*
* These tests create and drop indexes on the civicrm_uf_join table. The indexes
* being added and dropped we assume will never exist.
+ *
* @group headless
*/
class CRM_Core_BAO_SchemaHandlerTest extends CiviUnitTestCase {
+ /**
+ * Ensure any removed indices are put back.
+ *
+ * @throws \CRM_Core_Exception
+ */
+ public function tearDown() {
+ parent::tearDown();
+ $this->callAPISuccess('System', 'updateindexes', []);
+ }
+
/**
* Test creating an index.
*
$tables = ['civicrm_uf_join' => ['weight']];
CRM_Core_BAO_SchemaHandler::createIndexes($tables);
CRM_Core_BAO_SchemaHandler::createIndexes($tables);
- $dao = CRM_Core_DAO::executeQuery("SHOW INDEX FROM civicrm_uf_join");
+ $dao = CRM_Core_DAO::executeQuery('SHOW INDEX FROM civicrm_uf_join');
$count = 0;
while ($dao->fetch()) {
- if ($dao->Column_name == 'weight') {
+ if ($dao->Column_name === 'weight') {
$count++;
- CRM_Core_DAO::executeQuery("ALTER TABLE civicrm_uf_join DROP INDEX " . $dao->Key_name);
+ CRM_Core_DAO::executeQuery('ALTER TABLE civicrm_uf_join DROP INDEX ' . $dao->Key_name);
}
}
$this->assertEquals(1, $count);
$tables = ['civicrm_uf_join' => [['weight', 'module']]];
CRM_Core_BAO_SchemaHandler::createIndexes($tables);
- $dao = CRM_Core_DAO::executeQuery("SHOW INDEX FROM civicrm_uf_join");
+ $dao = CRM_Core_DAO::executeQuery('SHOW INDEX FROM civicrm_uf_join');
$weightCount = 0;
- $combinedCount = 0;
$indexes = [];
while ($dao->fetch()) {
- if ($dao->Column_name == 'weight') {
+ if ($dao->Column_name === 'weight') {
$weightCount++;
$indexes[$dao->Key_name] = $dao->Key_name;
}
- if ($dao->Column_name == 'module') {
- $combinedCount++;
+ if ($dao->Column_name === 'module') {
$this->assertArrayHasKey($dao->Key_name, $indexes);
}
}
foreach (array_keys($indexes) as $index) {
- CRM_Core_DAO::executeQuery("ALTER TABLE civicrm_uf_join DROP INDEX " . $index);
+ CRM_Core_DAO::executeQuery('ALTER TABLE civicrm_uf_join DROP INDEX ' . $index);
}
$this->assertEquals(2, $weightCount);
}
* @dataProvider columnTests
*/
public function testCheckIfColumnExists($tableName, $columnName) {
- if ($columnName == 'xxxx') {
+ if ($columnName === 'xxxx') {
$this->assertFalse(CRM_Core_BAO_SchemaHandler::checkIfFieldExists($tableName, $columnName));
}
else {
* Test to see if we can drop foreign key
*
* @dataProvider foreignKeyTests
+ *
+ * @param string $tableName
+ * @param string $key
*/
public function testSafeDropForeignKey($tableName, $key) {
- if ($key == 'FK_civicrm_mailing_recipients_id') {
+ if ($key === 'FK_civicrm_mailing_recipients_id') {
$this->assertFalse(CRM_Core_BAO_SchemaHandler::safeRemoveFK('civicrm_mailing_recipients', $key));
}
else {
$this->assertEmpty($missingIndices);
}
+ /**
+ * Check there are no missing indices
+ *
+ * @throws \CRM_Core_Exception
+ */
+ public function testGetMissingIndicesWithTableFilter() {
+ CRM_Core_DAO::executeQuery('ALTER TABLE civicrm_contact DROP INDEX index_sort_name');
+ CRM_Core_DAO::executeQuery('ALTER TABLE civicrm_contribution DROP INDEX index_total_amount_receive_date');
+ $missingIndices = $this->callAPISuccess('System', 'getmissingindices', [])['values'];
+ $expected = [
+ 'civicrm_contact' => [
+ [
+ 'name' => 'index_sort_name',
+ 'field' => ['sort_name'],
+ 'localizable' => FALSE,
+ 'sig' => 'civicrm_contact::0::sort_name',
+ ],
+ ],
+ 'civicrm_contribution' => [
+ [
+ 'name' => 'index_total_amount_receive_date',
+ 'field' => ['total_amount', 'receive_date'],
+ 'localizable' => FALSE,
+ 'sig' => 'civicrm_contribution::0::total_amount::receive_date',
+ ],
+ ],
+ ];
+ $this->assertEquals($expected, $missingIndices);
+ $missingIndices = $this->callAPISuccess('System', 'getmissingindices', ['tables' => ['civicrm_contact']])['values'];
+ $this->assertEquals(['civicrm_contact' => $expected['civicrm_contact']], $missingIndices);
+ $this->callAPISuccess('System', 'updateindexes', ['tables' => 'civicrm_contribution']);
+ $missingIndices = $this->callAPISuccess('System', 'getmissingindices', [])['values'];
+ $this->assertEquals(['civicrm_contact' => $expected['civicrm_contact']], $missingIndices);
+ }
+
/**
* Check for partial indices
*/
// drop col1
CRM_Core_DAO::executeQuery(CRM_Core_BAO_SchemaHandler::buildFieldChangeSql($alterParams, FALSE));
- $create_table = CRM_Core_DAO::executeQuery("SHOW CREATE TABLE civicrm_test_drop_column");
+ $create_table = CRM_Core_DAO::executeQuery('SHOW CREATE TABLE civicrm_test_drop_column');
while ($create_table->fetch()) {
$this->assertNotContains('col1', $create_table->Create_Table);
$this->assertContains('col2', $create_table->Create_Table);
$alterParams['name'] = 'col2';
CRM_Core_DAO::executeQuery(CRM_Core_BAO_SchemaHandler::buildFieldChangeSql($alterParams, FALSE));
- $create_table = CRM_Core_DAO::executeQuery("SHOW CREATE TABLE civicrm_test_drop_column");
+ $create_table = CRM_Core_DAO::executeQuery('SHOW CREATE TABLE civicrm_test_drop_column');
while ($create_table->fetch()) {
$this->assertNotContains('col2', $create_table->Create_Table);
}
'type' => 'text',
];
$sql = CRM_Core_BAO_SchemaHandler::buildFieldChangeSql($params, FALSE);
- $this->assertEquals("ALTER TABLE big_table
- ADD COLUMN `big_bob` text", trim($sql));
+ $this->assertEquals('ALTER TABLE big_table
+ ADD COLUMN `big_bob` text', trim($sql));
$params['operation'] = 'modify';
$params['comment'] = 'super big';