Handle changes in MySQL behavior between migrations
Signed-off-by: James Ren <[email protected]>
--- autotest/database/db_utils.py 2010-06-09 10:36:04.000000000 -0700
+++ autotest/database/db_utils.py 2010-06-09 10:36:04.000000000 -0700
@@ -92,6 +92,20 @@
'%s missing from database, stopping' % name)
+def check_index_exists(manager, table_name, index_name):
+ """
+ Checks if a particular index exists on the table
+
+ @param manager the migration manager
+ @param table_name the table to check
+ @param index_name the index to check
+ """
+ query = ('SELECT 1 FROM information_schema.statistics '
+ 'WHERE table_schema = %s AND table_name = %s AND index_name = %s')
+ rows = manager.execute(query, manager.get_db_name(), table_name,
index_name)
+ return bool(rows)
+
+
DJANGO_AUTH_TABLES = ('auth_group', 'auth_group_permissions',
'auth_permission')
def auth_tables_exist(manager):
--- autotest/frontend/migrations/062_drone_sets_unique.py 2010-06-09
10:36:04.000000000 -0700
+++ autotest/frontend/migrations/062_drone_sets_unique.py 2010-06-09
10:36:04.000000000 -0700
@@ -1,3 +1,6 @@
+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);
@@ -8,7 +11,11 @@
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;
"""
@@ -38,3 +45,7 @@
'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)
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest