import common from autotest_lib.database import db_utils UP_SQL = """ CREATE INDEX afe_drone_sets_drones_droneset_ibfk ON afe_drone_sets_drones (droneset_id); ALTER TABLE afe_drone_sets_drones DROP KEY afe_drone_sets_drones_unique; ALTER TABLE afe_drone_sets_drones ADD CONSTRAINT afe_drone_sets_drones_unique UNIQUE KEY (drone_id); """ # On first migration to 62, this key will be deleted automatically. However, if # you migrate to 62, then down to 61, then back to 62, this key will remain. DROP_KEY_SQL = """ ALTER TABLE afe_drone_sets_drones DROP KEY afe_drone_sets_drones_drone_ibfk; """ DOWN_SQL = """ CREATE INDEX afe_drone_sets_drones_drone_ibfk ON afe_drone_sets_drones (drone_id); ALTER TABLE afe_drone_sets_drones DROP KEY afe_drone_sets_drones_unique; ALTER TABLE afe_drone_sets_drones ADD CONSTRAINT afe_drone_sets_drones_unique UNIQUE KEY (droneset_id, drone_id); ALTER TABLE afe_drone_sets_drones DROP KEY afe_drone_sets_drones_droneset_ibfk; """ def migrate_up(manager): query = ('SELECT * FROM afe_drone_sets_drones ' 'GROUP BY drone_id HAVING COUNT(*) > 1') rows = manager.execute(query) if rows: raise Exception('Some drones are associated with more than one drone ' 'set. Please remove all duplicates before running this ' 'migration.') manager.execute_script(UP_SQL) if db_utils.check_index_exists(manager, 'afe_drone_sets_drones', 'afe_drone_sets_drones_drone_ibfk'): manager.execute(DROP_KEY_SQL)