1 import common 2 from autotest_lib.database import db_utils 3 4 UP_SQL = """ 5 CREATE INDEX afe_drone_sets_drones_droneset_ibfk 6 ON afe_drone_sets_drones (droneset_id); 7 8 ALTER TABLE afe_drone_sets_drones 9 DROP KEY afe_drone_sets_drones_unique; 10 11 ALTER TABLE afe_drone_sets_drones 12 ADD CONSTRAINT afe_drone_sets_drones_unique 13 UNIQUE KEY (drone_id); 14 """ 15 16 # On first migration to 62, this key will be deleted automatically. However, if 17 # you migrate to 62, then down to 61, then back to 62, this key will remain. 18 DROP_KEY_SQL = """ 19 ALTER TABLE afe_drone_sets_drones 20 DROP KEY afe_drone_sets_drones_drone_ibfk; 21 """ 22 23 DOWN_SQL = """ 24 CREATE INDEX afe_drone_sets_drones_drone_ibfk 25 ON afe_drone_sets_drones (drone_id); 26 27 ALTER TABLE afe_drone_sets_drones 28 DROP KEY afe_drone_sets_drones_unique; 29 30 ALTER TABLE afe_drone_sets_drones 31 ADD CONSTRAINT afe_drone_sets_drones_unique 32 UNIQUE KEY (droneset_id, drone_id); 33 34 ALTER TABLE afe_drone_sets_drones 35 DROP KEY afe_drone_sets_drones_droneset_ibfk; 36 """ 37 38 39 def migrate_up(manager): 40 query = ('SELECT * FROM afe_drone_sets_drones ' 41 'GROUP BY drone_id HAVING COUNT(*) > 1') 42 rows = manager.execute(query) 43 if rows: 44 raise Exception('Some drones are associated with more than one drone ' 45 'set. Please remove all duplicates before running this ' 46 'migration.') 47 manager.execute_script(UP_SQL) 48 49 if db_utils.check_index_exists(manager, 'afe_drone_sets_drones', 50 'afe_drone_sets_drones_drone_ibfk'): 51 manager.execute(DROP_KEY_SQL) 52