tableExists('competition_winners')) { return; } if ($this->indexExists($db, 'competition_winners', 'competition_id_class_section_id_rank')) { $db->query('DROP INDEX competition_id_class_section_id_rank ON competition_winners'); } if (! $this->indexExists($db, 'competition_winners', 'competition_id_class_section_id_rank')) { $db->query( 'CREATE INDEX competition_id_class_section_id_rank ON competition_winners (competition_id, class_section_id, rank)' ); } } public function down() { $db = \Config\Database::connect(); if (!$db->tableExists('competition_winners')) { return; } if ($this->indexExists($db, 'competition_winners', 'competition_id_class_section_id_rank')) { $db->query('DROP INDEX competition_id_class_section_id_rank ON competition_winners'); } $db->query( 'ALTER TABLE competition_winners ADD UNIQUE KEY competition_id_class_section_id_rank (competition_id, class_section_id, rank)' ); } private function indexExists($db, string $table, string $index): bool { if (method_exists($db, 'indexExists')) { return $db->indexExists($table, $index); } $dbName = $db->getDatabase(); $builder = $db->table('information_schema.STATISTICS'); $row = $builder ->select('INDEX_NAME') ->where('TABLE_SCHEMA', $dbName) ->where('TABLE_NAME', $table) ->where('INDEX_NAME', $index) ->get() ->getRowArray(); return ! empty($row); } }