You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.5 KiB
52 lines
1.5 KiB
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)
|