From 669eaa291eae53b669dba9aa02635f170a64fa8d Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Sat, 3 Nov 2012 19:40:52 +0000
Subject: [PATCH] Issue #1829942 by amateescu: Fixed Cloning an entity query
 doesn't clone its conditions.

---
 core/lib/Drupal/Core/Entity/Query/QueryBase.php    |  6 ++++++
 .../Drupal/system/Tests/Entity/EntityQueryTest.php | 14 ++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/core/lib/Drupal/Core/Entity/Query/QueryBase.php b/core/lib/Drupal/Core/Entity/Query/QueryBase.php
index 586af6907cea..9ad26e1e6e4c 100644
--- a/core/lib/Drupal/Core/Entity/Query/QueryBase.php
+++ b/core/lib/Drupal/Core/Entity/Query/QueryBase.php
@@ -233,4 +233,10 @@ public function tableSort(&$headers) {
     return $this;
   }
 
+  /**
+   * Makes sure that the Condition object is cloned as well.
+   */
+  function __clone() {
+    $this->condition = clone $this->condition;
+  }
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
index a7afcc60b085..8c04faac2277 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
@@ -156,6 +156,20 @@ function testEntityQuery() {
     // 15) needs to be set.
     $this->assertResult(1, 3, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15);
 
+    // Test cloning of query conditions.
+    $query = $this->factory->get('test_entity')
+      ->condition("$figures.color", 'red')
+      ->sort('ftid');
+    $cloned_query = clone $query;
+    $cloned_query
+      ->condition("$figures.shape", 'circle');
+    // Bit 0 (1, 3, 5, 7, 9, 11, 13, 15) needs to be set.
+    $this->queryResults = $query->execute();
+    $this->assertResult(1, 3, 5, 7, 9, 11, 13, 15);
+    // No red color has a circle shape.
+    $this->queryResults = $cloned_query->execute();
+    $this->assertResult();
+
     $query = $this->factory->get('test_entity');
     $group = $query->orConditionGroup()
       ->exists($greetings, 'tr')
-- 
GitLab