CRM-21806: Fix issues is search form when FULL_GROUP_BY_MODE enabled
authordeb.monish <monish.deb@jmaconsulting.biz>
Tue, 6 Mar 2018 07:28:57 +0000 (12:58 +0530)
committerdeb.monish <monish.deb@jmaconsulting.biz>
Tue, 6 Mar 2018 12:01:28 +0000 (17:31 +0530)
CRM/Contact/BAO/Query.php
CRM/Contact/Selector.php

index 4dfcde1e36b7c1ad27fdde044959bcedc207b0bc..df6aa40b97a42925422acc422a6873aeec49ef19 100644 (file)
@@ -4890,7 +4890,10 @@ civicrm_relationship.is_permission_a_b = 0
     list($select, $from, $where, $having) = $this->query($count, $sortByChar, $groupContacts, $onlyDeleted);
 
     if (!empty($groupByCols)) {
-      $select = self::appendAnyValueToSelect($this->_select, $groupByCols, 'GROUP_CONCAT');
+      // It doesn't matter to include columns in SELECT clause, which are present in GROUP BY when we just want the contact IDs
+      if (!$groupContacts) {
+        $select = self::appendAnyValueToSelect($this->_select, $groupByCols, 'GROUP_CONCAT');
+      }
       $groupBy = " GROUP BY " . implode(', ', $groupByCols);
       if (!empty($order)) {
         // retrieve order by columns from ORDER BY clause
index d0f5b4a85a52f5281125f5b3f854c03a50fb53af..b4135b71851605240edcc75a2f8e39ac115d7ee4 100644 (file)
@@ -1012,7 +1012,6 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se
       $sql = $this->_query->searchQuery($start, $end, $sort, FALSE, $this->_query->_includeContactIds,
         FALSE, TRUE, TRUE);
     }
-    $replaceSQL = $this->_query->getSelect();
 
     // CRM-9096
     // due to limitations in our search query writer, the above query does not work
@@ -1025,10 +1024,10 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se
 
     $insertSQL = "
 INSERT INTO civicrm_prevnext_cache ( entity_table, entity_id1, entity_id2, cacheKey, data )
-SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', contact_a.display_name
+SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', contact_a.sort_name
 ";
 
-    $sql = str_replace($replaceSQL, $insertSQL, $sql);
+    $sql = str_replace(array("SELECT contact_a.id as contact_id", "SELECT contact_a.id as id"), $insertSQL, $sql);
     try {
       CRM_Core_DAO::executeQuery($sql);
     }