Deploy hotfix to fix dev/core#746 until tests can be written for fix
authorSeamus Lee <seamuslee001@gmail.com>
Fri, 22 Feb 2019 01:11:53 +0000 (12:11 +1100)
committerSeamus Lee <seamuslee001@gmail.com>
Fri, 22 Feb 2019 04:11:01 +0000 (15:11 +1100)
Fix GroupContactCacheTest

CRM/Contact/BAO/Query.php
tests/phpunit/CRM/Contact/BAO/GroupContactCacheTest.php

index a935ca96d2c6e1937f4416580822d6eff073520f..cdd3f4761808fce1e52ccc2ac19b9a24a0411974 100644 (file)
@@ -412,6 +412,8 @@ class CRM_Contact_BAO_Query {
 
   public $_pseudoConstantsSelect = array();
 
+  public $_groupUniqueKey = NULL;
+
   /**
    * Class constructor which also does all the work.
    *
@@ -3038,12 +3040,13 @@ class CRM_Contact_BAO_Query {
     //CRM-19589: contact(s) removed from a Smart Group, resides in civicrm_group_contact table
     $groupContactCacheClause = '';
     if (count($smartGroupIDs) || empty($value)) {
-      $gccTableAlias = "civicrm_group_contact_cache";
+      $this->_groupUniqueKey = uniqid();
+      $gccTableAlias = "civicrm_group_contact_cache_{$this->_groupUniqueKey}";
       $groupContactCacheClause = $this->addGroupContactCache($smartGroupIDs, $gccTableAlias, "contact_a", $op);
       if (!empty($groupContactCacheClause)) {
         if ($isNotOp) {
           $groupIds = implode(',', (array) $smartGroupIDs);
-          $gcTable = "civicrm_group_contact";
+          $gcTable = "civicrm_group_contact_{$this->_groupUniqueKey}";
           $joinClause = array("contact_a.id = {$gcTable}.contact_id");
           $this->_tables[$gcTable] = $this->_whereTables[$gcTable] = " LEFT JOIN civicrm_group_contact {$gcTable} ON (" . implode(' AND ', $joinClause) . ")";
           if (strpos($op, 'IN') !== FALSE) {
@@ -3069,6 +3072,10 @@ class CRM_Contact_BAO_Query {
     }
   }
 
+  public function getGroupCacheTableKey() {
+    return $this->_groupUniqueKey;
+  }
+
   /**
    * Function translates selection of group type into a list of groups.
    * @param $value
index 893390f1908511c2c8b0c8d2166014dd22a08863..fc1acf50a6a1670115e2b46b8667a561dbe5353f 100644 (file)
@@ -441,7 +441,8 @@ class CRM_Contact_BAO_GroupContactCacheTest extends CiviUnitTestCase {
       FALSE, FALSE, FALSE,
       TRUE, FALSE
     );
-    $expectedWhere = "civicrm_group_contact_cache.group_id IN (\"{$group2->id}\")";
+    $key = $query->getGroupCacheTableKey();
+    $expectedWhere = "civicrm_group_contact_cache_{$key}.group_id IN (\"{$group2->id}\")";
     $this->assertContains($expectedWhere, $query->_whereClause);
     $this->_assertContactIds($query, "group_id = {$group2->id}");
 
@@ -452,8 +453,9 @@ class CRM_Contact_BAO_GroupContactCacheTest extends CiviUnitTestCase {
       FALSE,
       FALSE, FALSE
     );
+    $key = $query->getGroupCacheTableKey();
     //Assert if proper where clause is present.
-    $expectedWhere = "civicrm_group_contact.group_id != {$group->id} AND civicrm_group_contact_cache.group_id IS NULL OR  ( civicrm_group_contact_cache.contact_id NOT IN (SELECT contact_id FROM civicrm_group_contact_cache cgcc WHERE cgcc.group_id IN ( {$group->id} ) ) )";
+    $expectedWhere = "civicrm_group_contact_{$key}.group_id != {$group->id} AND civicrm_group_contact_cache_{$key}.group_id IS NULL OR  ( civicrm_group_contact_cache_{$key}.contact_id NOT IN (SELECT contact_id FROM civicrm_group_contact_cache cgcc WHERE cgcc.group_id IN ( {$group->id} ) ) )";
     $this->assertContains($expectedWhere, $query->_whereClause);
     $this->_assertContactIds($query, "group_id != {$group->id}");
 
@@ -464,7 +466,8 @@ class CRM_Contact_BAO_GroupContactCacheTest extends CiviUnitTestCase {
       FALSE,
       FALSE, FALSE
     );
-    $expectedWhere = "civicrm_group_contact_cache.group_id IN (\"{$group->id}\", \"{$group2->id}\")";
+    $key = $query->getGroupCacheTableKey();
+    $expectedWhere = "civicrm_group_contact_cache_{$key}.group_id IN (\"{$group->id}\", \"{$group2->id}\")";
     $this->assertContains($expectedWhere, $query->_whereClause);
     $this->_assertContactIds($query, "group_id IN ({$group->id}, {$group2->id})");
 
@@ -475,7 +478,8 @@ class CRM_Contact_BAO_GroupContactCacheTest extends CiviUnitTestCase {
       FALSE,
       FALSE, FALSE
     );
-    $expectedWhere = "civicrm_group_contact.group_id NOT IN ( {$group->id} ) AND civicrm_group_contact_cache.group_id IS NULL OR  ( civicrm_group_contact_cache.contact_id NOT IN (SELECT contact_id FROM civicrm_group_contact_cache cgcc WHERE cgcc.group_id IN ( {$group->id} ) ) )";
+    $key = $query->getGroupCacheTableKey();
+    $expectedWhere = "civicrm_group_contact_{$key}.group_id NOT IN ( {$group->id} ) AND civicrm_group_contact_cache_{$key}.group_id IS NULL OR  ( civicrm_group_contact_cache_{$key}.contact_id NOT IN (SELECT contact_id FROM civicrm_group_contact_cache cgcc WHERE cgcc.group_id IN ( {$group->id} ) ) )";
     $this->assertContains($expectedWhere, $query->_whereClause);
     $this->_assertContactIds($query, "group_id NOT IN ({$group->id})");
   }