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
This commit is contained in:
parent
ddea3a8bc8
commit
5c646eb558
|
@ -154,19 +154,6 @@ class ANSISchemaChanger(AlterTableVisitor, SchemaGenerator):
|
||||||
name. NONE means the name is unchanged.
|
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):
|
def visit_table(self, table):
|
||||||
"""Rename a table. Other ops aren't supported."""
|
"""Rename a table. Other ops aren't supported."""
|
||||||
self.start_alter_table(table)
|
self.start_alter_table(table)
|
||||||
|
@ -185,8 +172,8 @@ class ANSISchemaChanger(AlterTableVisitor, SchemaGenerator):
|
||||||
self.preparer.quote(
|
self.preparer.quote(
|
||||||
self._validate_identifier(
|
self._validate_identifier(
|
||||||
index.new_name, True), index.quote)))
|
index.new_name, True), index.quote)))
|
||||||
else:
|
elif hasattr(self, '_index_identifier'):
|
||||||
# SA >= 0.6.5
|
# SA >= 0.6.5, < 0.8
|
||||||
self.append("ALTER INDEX %s RENAME TO %s" % (
|
self.append("ALTER INDEX %s RENAME TO %s" % (
|
||||||
self.preparer.quote(
|
self.preparer.quote(
|
||||||
self._index_identifier(
|
self._index_identifier(
|
||||||
|
@ -194,6 +181,23 @@ class ANSISchemaChanger(AlterTableVisitor, SchemaGenerator):
|
||||||
self.preparer.quote(
|
self.preparer.quote(
|
||||||
self._index_identifier(
|
self._index_identifier(
|
||||||
index.new_name), index.quote)))
|
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()
|
self.execute()
|
||||||
|
|
||||||
def visit_column(self, delta):
|
def visit_column(self, delta):
|
||||||
|
|
Loading…
Reference in New Issue