Merge remote-tracking branch 'upstream/4.5' into 4.5-master-2014-12-01-14-40-22
[civicrm-core.git] / CRM / Core / InnoDBIndexer.php
index a505feec538863b027f595f94a4c1047352d28d1..abe15f8edcaf14834977548b38f1c19b828144c6 100644 (file)
@@ -37,21 +37,37 @@ class CRM_Core_InnoDBIndexer {
    */
   private static $singleton = NULL;
 
+  /**
+   * @param bool $fresh
+   * @return CRM_Core_InnoDBIndexer
+   */
   public static function singleton($fresh = FALSE) {
     if ($fresh || self::$singleton === NULL) {
       $indices = array(
         'civicrm_address' => array(
           array('street_address', 'city', 'postal_code')
         ),
+        'civicrm_activity' => array(
+          array('subject', 'details'),
+        ),
         'civicrm_contact' => array(
           array('sort_name', 'nick_name', 'display_name'),
         ),
+        'civicrm_contribution' => array(
+          array('source', 'amount_level', 'trxn_Id', 'invoice_id'),
+        ),
         'civicrm_email' => array(
           array('email')
         ),
+        'civicrm_membership' => array(
+          array('source'),
+        ),
         'civicrm_note' => array(
           array('subject', 'note'),
         ),
+        'civicrm_participant' => array(
+          array('source', 'fee_level'),
+        ),
         'civicrm_phone' => array(
           array('phone'),
         ),
@@ -59,7 +75,8 @@ class CRM_Core_InnoDBIndexer {
           array('name'),
         ),
       );
-      self::$singleton = new self(TRUE, $indices);
+      $active = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::SEARCH_PREFERENCES_NAME, 'enable_innodb_fts', NULL, FALSE);
+      self::$singleton = new self($active, $indices);
     }
     return self::$singleton;
   }
@@ -139,6 +156,13 @@ class CRM_Core_InnoDBIndexer {
    * @return array (string $indexName => string $indexName)
    */
   public function findActualFtsIndexNames($table) {
+    $mysqlVersion = CRM_Core_DAO::singleValueQuery('SELECT VERSION()');
+    if (version_compare($mysqlVersion, '5.6', '<')) {
+      // If we're not on 5.6+, then there cannot be any InnoDB FTS indices!
+      // Also: information_schema.innodb_sys_indexes is only available on 5.6+.
+      return array();
+    }
+
     // Note: this only works in MySQL 5.6,  but this whole system is intended to only work in MySQL 5.6
     $sql = "
       SELECT i.name as index_name