summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQin Zhao <chaochin@gmail.com>2015-02-16 17:45:08 +0800
committerQin Zhao <chaochin@gmail.com>2015-03-16 15:21:03 +0000
commite57ee4c3a4247c634980cbeba74d04a01253967d (patch)
tree9a8092b37c38e70372d4f00fd13d672533238922
parent8a638ce9d6f1103ce688117e7c78b8f6eb392e49 (diff)
downloadsqlalchemy-migrate-e57ee4c3a4247c634980cbeba74d04a01253967d.tar.gz
Fix ibmdb2 index name handling0.9.6
The ibmdb2 code calls _index_identifier() when it handles index name. This method only exists from sqlalchemy 0.6.5 to 0.7.*. Nova code change https://review.openstack.org/#/c/153123/ attempts to drop a db constraint and it fails to sync nova db with sqlalchemy 0.9.8 running against db2. Need to let ibmdb2 code identify sqlalchemy version and call the correct method to handle index name. Closes-Bug: 1428477 Change-Id: Ie6333f9cea0209c1ea290356873a1a1bcf409bed
-rw-r--r--migrate/changeset/databases/ibmdb2.py36
1 files changed, 30 insertions, 6 deletions
diff --git a/migrate/changeset/databases/ibmdb2.py b/migrate/changeset/databases/ibmdb2.py
index 7b6a3a1..89693e3 100644
--- a/migrate/changeset/databases/ibmdb2.py
+++ b/migrate/changeset/databases/ibmdb2.py
@@ -118,10 +118,28 @@ class IBMDBSchemaChanger(IBMDBSchemaGenerator, ansisql.ANSISchemaChanger):
self.append("RENAME TABLE %s " % self.preparer.format_table(table))
def visit_index(self, index):
- old_name = self.preparer.quote(self._index_identifier(index.name),
- index.quote)
- new_name = self.preparer.quote(self._index_identifier(index.new_name),
- index.quote)
+ if hasattr(self, '_index_identifier'):
+ # SA >= 0.6.5, < 0.8
+ old_name = self.preparer.quote(
+ self._index_identifier(index.name), index.quote)
+ new_name = self.preparer.quote(
+ self._index_identifier(index.new_name), index.quote)
+ else:
+ # SA >= 0.8
+ class NewName(object):
+ """Map obj.name -> obj.new_name"""
+ def __init__(self, index):
+ self.name = index.new_name
+ self._obj = index
+
+ def __getattr__(self, attr):
+ if attr == 'name':
+ return getattr(self, attr)
+ return getattr(self._obj, attr)
+
+ old_name = self._prepared_index_name(index)
+ new_name = self._prepared_index_name(NewName(index))
+
self.append("RENAME INDEX %s TO %s" % (old_name, new_name))
self.execute()
self.append("COMMIT")
@@ -293,8 +311,14 @@ class IBMDBConstraintDropper(ansisql.ANSIConstraintDropper,
constraint.exclude_nulls = True
break
if getattr(constraint, 'exclude_nulls', None):
- index_name = self.preparer.quote(
- self._index_identifier(constraint.name), constraint.quote)
+ if hasattr(self, '_index_identifier'):
+ # SA >= 0.6.5, < 0.8
+ index_name = self.preparer.quote(
+ self._index_identifier(constraint.name),
+ constraint.quote)
+ else:
+ # SA >= 0.8
+ index_name = self._prepared_index_name(constraint)
sql = 'DROP INDEX %s ' % index_name
else:
sql = self.process(DropConstraint(constraint,