summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPádraig Brady <pbrady@redhat.com>2013-09-23 15:12:44 +0100
committerPádraig Brady <P@draigBrady.com>2013-09-23 15:18:59 +0100
commit5c646eb55859206274e2118255f582e4d17d73e8 (patch)
tree82f46dd1922ebc98412b3b8b7853e5f8d0cc2348
parentddea3a8bc8c5cf4b927c4cf97bfc82e4ffd0826a (diff)
downloadsqalchemy-migrate-5c646eb55859206274e2118255f582e4d17d73e8.tar.gz
decouple index name generation from sqlalchemy version
In commit 0.7.2-16-gc670d1d the _index_identifier() implementation was copied from sqlalchemy, as that function was renamed in sqlalchemy 0.8. Instead handle call the renamed function when appropriate, to decouple ourselves from the sqlalchemy implementation. Change-Id: I97b22c20d96758fc5b6bd55318218edb26c5b5d0
-rw-r--r--migrate/changeset/ansisql.py34
1 files changed, 19 insertions, 15 deletions
diff --git a/migrate/changeset/ansisql.py b/migrate/changeset/ansisql.py
index 79e406c..495b197 100644
--- a/migrate/changeset/ansisql.py
+++ b/migrate/changeset/ansisql.py
@@ -154,19 +154,6 @@ class ANSISchemaChanger(AlterTableVisitor, SchemaGenerator):
name. NONE means the name is unchanged.
"""
- def _index_identifier(self, ident):
- """This function is move in 0.8 to _prepared_index_name"""
- if isinstance(ident, sqlalchemy.sql.compiler.sql._truncated_label):
- max = self.dialect.max_index_name_length or \
- self.dialect.max_identifier_length
- if len(ident) > max:
- ident = ident[0:max - 8] + \
- "_" + sqlalchemy.sql.compiler.util.md5_hex(ident)[-4:]
- else:
- self.dialect.validate_identifier(ident)
-
- return ident
-
def visit_table(self, table):
"""Rename a table. Other ops aren't supported."""
self.start_alter_table(table)
@@ -185,8 +172,8 @@ class ANSISchemaChanger(AlterTableVisitor, SchemaGenerator):
self.preparer.quote(
self._validate_identifier(
index.new_name, True), index.quote)))
- else:
- # SA >= 0.6.5
+ elif hasattr(self, '_index_identifier'):
+ # SA >= 0.6.5, < 0.8
self.append("ALTER INDEX %s RENAME TO %s" % (
self.preparer.quote(
self._index_identifier(
@@ -194,6 +181,23 @@ class ANSISchemaChanger(AlterTableVisitor, SchemaGenerator):
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)
+
+ self.append("ALTER INDEX %s RENAME TO %s" % (
+ self._prepared_index_name(index),
+ self._prepared_index_name(NewName(index))))
+
self.execute()
def visit_column(self, delta):