]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
- More fixes to index autodetection; indexes created with expressions
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 12 Jan 2014 02:55:17 +0000 (21:55 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 12 Jan 2014 02:55:17 +0000 (21:55 -0500)
like DESC or functional indexes will no longer cause AttributeError
exceptions when attempting to compare the columns. #164

alembic/autogenerate/compare.py
docs/build/changelog.rst
tests/test_autogenerate.py

index c33a3ff1b01c6f16a3ff488c5d4a23118dbd8206..cf313bb56e547fd000e94763a4cff171fc52ddd1 100644 (file)
@@ -177,9 +177,9 @@ class _ix_constraint_sig(_constraint_sig):
 
 def _get_index_column_names(idx):
     if compat.sqla_08:
-        return [exp.name for exp in idx.expressions]
+        return [getattr(exp, "name", None) for exp in idx.expressions]
     else:
-        return [col.name for col in idx.columns]
+        return [getattr(col, "name", None) for col in idx.columns]
 
 def _compare_indexes_and_uniques(schema, tname, object_filters, conn_table,
             metadata_table, diffs, autogen_context, inspector):
index a216737d79f7537848cbfd460481facbb32ee090..f42c525cf52160c43611c31e9660e7316bef7630 100644 (file)
@@ -5,6 +5,14 @@ Changelog
 .. changelog::
     :version: 0.6.3
 
+    .. change::
+      :tags: bug
+      :tickets: 164
+
+     More fixes to index autodetection; indexes created with expressions
+     like DESC or functional indexes will no longer cause AttributeError
+     exceptions when attempting to compare the columns.
+
     .. change::
       :tags: feature
       :tickets: 163
index 3b559086979a57d1fad8529e1532dac6ab2f049e..544ac33299f66090f5c8b96e9599931ca01ca4b1 100644 (file)
@@ -942,6 +942,28 @@ class AutogenerateUniqueIndexTest(TestCase):
         eq_(diffs[1][0], "add_index")
         eq_(diffs[1][1].unique, False)
 
+    def test_add_idx_non_col(self):
+        m1 = MetaData()
+        m2 = MetaData()
+        Table('add_ix', m1, Column('x', String(50)))
+        t2 = Table('add_ix', m2, Column('x', String(50)))
+        Index('foo_idx', t2.c.x.desc())
+        diffs = self._fixture(m1, m2)
+
+        eq_(diffs[0][0], "add_index")
+
+    def test_unchanged_idx_non_col(self):
+        m1 = MetaData()
+        m2 = MetaData()
+        t1 = Table('add_ix', m1, Column('x', String(50)))
+        Index('foo_idx', t1.c.x.desc())
+        t2 = Table('add_ix', m2, Column('x', String(50)))
+        Index('foo_idx', t2.c.x.desc())
+        diffs = self._fixture(m1, m2)
+
+        eq_(diffs, [])
+
+
     def _fixture(self, m1, m2):
         self.metadata, model_metadata = m1, m2
         self.metadata.create_all(self.bind)