diff options
| author | Qin Zhao <chaochin@gmail.com> | 2015-02-16 17:45:08 +0800 |
|---|---|---|
| committer | Qin Zhao <chaochin@gmail.com> | 2015-03-16 15:21:03 +0000 |
| commit | e57ee4c3a4247c634980cbeba74d04a01253967d (patch) | |
| tree | 9a8092b37c38e70372d4f00fd13d672533238922 /migrate/changeset | |
| parent | 8a638ce9d6f1103ce688117e7c78b8f6eb392e49 (diff) | |
| download | sqlalchemy-migrate-0.9.6.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
Diffstat (limited to 'migrate/changeset')
| -rw-r--r-- | migrate/changeset/databases/ibmdb2.py | 36 |
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, |
