*/
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'),
),
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;
}
* @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