From: Mike Bayer Date: Sun, 12 Jan 2014 02:55:17 +0000 (-0500) Subject: - More fixes to index autodetection; indexes created with expressions X-Git-Tag: rel_0_6_3~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8fb75e4c9e61bf3327b331ad69e5c6257e230195;p=thirdparty%2Fsqlalchemy%2Falembic.git - 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. #164 --- diff --git a/alembic/autogenerate/compare.py b/alembic/autogenerate/compare.py index c33a3ff1..cf313bb5 100644 --- a/alembic/autogenerate/compare.py +++ b/alembic/autogenerate/compare.py @@ -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): diff --git a/docs/build/changelog.rst b/docs/build/changelog.rst index a216737d..f42c525c 100644 --- a/docs/build/changelog.rst +++ b/docs/build/changelog.rst @@ -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 diff --git a/tests/test_autogenerate.py b/tests/test_autogenerate.py index 3b559086..544ac332 100644 --- a/tests/test_autogenerate.py +++ b/tests/test_autogenerate.py @@ -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)