]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
Fix #141: SQLA 0.7 compatibility for index column names
authorijl <uijllji@gmail.com>
Tue, 15 Oct 2013 15:29:53 +0000 (11:29 -0400)
committerijl <uijllji@gmail.com>
Tue, 15 Oct 2013 15:29:53 +0000 (11:29 -0400)
alembic/autogenerate/compare.py
alembic/autogenerate/render.py
alembic/compat.py

index 56fe2194ce519ca79545d04dc88b65126a226cf6..ce3bc675ee8032847f7bc552218e0776c9f662b2 100644 (file)
@@ -1,6 +1,7 @@
 from sqlalchemy.exc import NoSuchTableError
 from sqlalchemy import schema as sa_schema, types as sqltypes
 import logging
+from ..compat import get_index_column_names
 from .render import _render_server_default
 from sqlalchemy.util import OrderedSet
 
@@ -258,7 +259,7 @@ def _compare_indexes(schema, tname, object_filters, conn_table,
         diffs.append(("add_index", meta))
         log.info("Detected added index '%s' on %s",
             key, ', '.join([
-                "'%s'" % y.name for y in meta.expressions
+                "'%s'" % get_index_column_names(meta)
                 ])
         )
 
@@ -271,8 +272,8 @@ def _compare_indexes(schema, tname, object_filters, conn_table,
         conn_index = c_objs[key]
         # TODO: why don't we just render the DDL here
         # so we can compare the string output fully
-        conn_exps = [exp.name for exp in conn_index.expressions]
-        meta_exps = [exp.name for exp in meta_index.expressions]
+        conn_exps = get_index_column_names(conn_index)
+        meta_exps = get_index_column_names(meta_index)
 
         # convert between both Nones (SQLA ticket #2825) on the metadata
         # side and zeroes on the reflection side.
index 88d199b41e406a53caa6969cd449ccc1cce5d8aa..c471182bf610565272ebc4dc6aea22cac10597c5 100644 (file)
@@ -3,7 +3,7 @@ import logging
 import re
 
 
-from ..compat import string_types
+from ..compat import string_types, get_index_column_names
 
 log = logging.getLogger(__name__)
 
@@ -47,7 +47,7 @@ def _add_index(index, autogen_context):
     text = "op.create_index('%(name)s', '%(table)s', %(columns)s, unique=%(unique)r%(schema)s%(kwargs)s)" % {
         'name': index.name,
         'table': index.table,
-        'columns': [exp.name for exp in index.expressions],
+        'columns': get_index_column_names(index),
         'unique': index.unique or False,
         'schema': (", schema='%s'" % index.table.schema) if index.table.schema else '',
         'kwargs': (', '+', '.join(
index 11dde867c18aab55f88157cf0250e65f9f2c2a9b..7d0357dccd67a85338f19817ed94f2458e45f9da 100644 (file)
@@ -1,4 +1,5 @@
 import sys
+from sqlalchemy import __version__ as sa_version
 
 if sys.version_info < (2, 6):
     raise NotImplementedError("Python 2.6 or greater is required.")
@@ -56,8 +57,6 @@ else:
         finally:
             fp.close()
 
-
-
 try:
     exec_ = getattr(compat_builtins, 'exec')
 except AttributeError:
@@ -65,6 +64,13 @@ except AttributeError:
     def exec_(func_text, globals_, lcl):
         exec('exec func_text in globals_, lcl')
 
+if sa_version >= '0.8.0':
+    def get_index_column_names(idx):
+        return [exp.name for exp in idx.expressions]
+else:
+    def get_index_column_names(idx):
+        return [col.name for col in idx.columns]
+
 ################################################
 # cross-compatible metaclass implementation
 # Copyright (c) 2010-2012 Benjamin Peterson