CRM-14765 - Allow fillTempTable() to return multiple pieces of information
authorTim Otten <totten@civicrm.org>
Tue, 10 Jun 2014 02:50:13 +0000 (19:50 -0700)
committerTim Otten <totten@civicrm.org>
Tue, 10 Jun 2014 02:52:18 +0000 (19:52 -0700)
CRM/Contact/Form/Search/Custom/FullText.php
CRM/Contact/Form/Search/Custom/FullText/AbstractPartialQuery.php
CRM/Contact/Form/Search/Custom/FullText/File.php

index 719124ffde1f4afc25dcc2abac88609fb159fad9..f00b4b47b812fecfec19f70af2f20fe65f5afc7b 100644 (file)
@@ -235,7 +235,8 @@ CREATE TEMPORARY TABLE {$this->_entityIDTableName} (
       /** @var $partialQuery CRM_Contact_Form_Search_Custom_FullText_AbstractPartialQuery */
       if (!$this->_table || $this->_table == $partialQuery->getName()) {
         if ($partialQuery->isActive()) {
-          $this->_foundRows[$partialQuery->getName()] = $partialQuery->fillTempTable($this->_text, $this->_entityIDTableName, $this->_tableName, $this->_limitClause, $this->_limitDetailClause);
+          $result = $partialQuery->fillTempTable($this->_text, $this->_entityIDTableName, $this->_tableName, $this->_limitClause, $this->_limitDetailClause);
+          $this->_foundRows[$partialQuery->getName()] = $result['count'];
         }
       }
     }
index aad88082bac153fafb21394e00ae71dc8302b780..6eb226418cbf75332ea753098c2bd3ddfce58cce 100644 (file)
@@ -76,7 +76,8 @@ abstract class CRM_Contact_Form_Search_Custom_FullText_AbstractPartialQuery {
    *                   NULL if no limit; or array(0 => $limit, 1 => $offset)
    * @param array|NULL $detailLimit final limit (applied when building $detailTable)
    *                   NULL if no limit; or array(0 => $limit, 1 => $offset)
-   * @return int number of matches
+   * @return array keys: match-descriptor
+   *   - count: int
    */
   public abstract function fillTempTable($queryText, $entityIDTableName, $detailTable, $queryLimit, $detailLimit);
 
@@ -118,8 +119,12 @@ AND        cf.html_type IN ( 'Text', 'TextArea', 'RichTextEditor' )
 
   /**
    * @param string $queryText
-   * @param array $tables
-   * @return int the total number of matches
+   * @param array $tables a list of places to query. Keys may be:
+   *   - sql: an array of SQL queries to execute
+   *   - final: an array of SQL queries to execute at the end
+   *   - *: All other keys are treated as table names
+   * @return array keys: match-descriptor
+   *   - count: int
    */
   function runQueries($queryText, &$tables, $entityIDTableName, $limit) {
     $sql = "TRUNCATE {$entityIDTableName}";
@@ -192,8 +197,9 @@ GROUP BY {$tableValues['id']}
       }
     }
 
-    $rowCount = "SELECT count(*) FROM {$entityIDTableName}";
-    return CRM_Core_DAO::singleValueQuery($rowCount);
+    return array(
+      'count' => CRM_Core_DAO::singleValueQuery("SELECT count(*) FROM {$entityIDTableName}")
+    );
   }
 
   /**
index 8b2fc40c2a98a32bace663bbc605c2cc12f0e8f2..239f994eef4f2fb216f392323cf7e7e488748abc 100644 (file)
@@ -83,7 +83,9 @@ class CRM_Contact_Form_Search_Custom_FullText_File extends CRM_Contact_Form_Sear
         ts('File Search')
       );
     }
-    return count($solrResponse->docs);
+    return array(
+      'count' => count($solrResponse->docs),
+    );
     //return $solrResponse->numFound;
     //return count($matches);
   }