diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-12-23 22:59:44 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-12-23 22:59:44 -0500 |
commit | c7d6c667b53d96a65e0dedcb83c098e03d4c7453 (patch) | |
tree | 7ca6a760327812581139995de29f93e4af26a334 | |
parent | 93b48e6aba6b1c20f525a0a22d58fc57ee4637f5 (diff) | |
download | sqlalchemy-c7d6c667b53d96a65e0dedcb83c098e03d4c7453.tar.gz |
- Fixed an assertion that would raise somewhat inappropriately
if a :class:`.Index` were associated with a :class:`.Column` that
is associated with a lower-case-t :class:`.TableClause`; the
association should be ignored for the purposes of associating
the index with a :class:`.Table`.
fixes #3616
-rw-r--r-- | doc/build/changelog/changelog_11.rst | 10 | ||||
-rw-r--r-- | lib/sqlalchemy/sql/schema.py | 10 | ||||
-rw-r--r-- | test/sql/test_metadata.py | 7 |
3 files changed, 24 insertions, 3 deletions
diff --git a/doc/build/changelog/changelog_11.rst b/doc/build/changelog/changelog_11.rst index 0d9f997f9..83a57ba7c 100644 --- a/doc/build/changelog/changelog_11.rst +++ b/doc/build/changelog/changelog_11.rst @@ -22,6 +22,16 @@ :version: 1.1.0b1 .. change:: + :tags: bug, sql + :tickets: 3616 + + Fixed an assertion that would raise somewhat inappropriately + if a :class:`.Index` were associated with a :class:`.Column` that + is associated with a lower-case-t :class:`.TableClause`; the + association should be ignored for the purposes of associating + the index with a :class:`.Table`. + + .. change:: :tags: bug, orm :tickets: 3601 diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index 42dbe72b2..b244d746c 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -2498,9 +2498,13 @@ class ColumnCollectionMixin(object): has_string_cols = set(self._pending_colargs).difference(col_objs) if not has_string_cols: def _col_attached(column, table): - cols_wo_table.discard(column) - if not cols_wo_table: - self._check_attach(evt=True) + # this isinstance() corresponds with the + # isinstance() above; only want to count Table-bound + # columns + if isinstance(table, Table): + cols_wo_table.discard(column) + if not cols_wo_table: + self._check_attach(evt=True) self._cols_wo_table = cols_wo_table for col in cols_wo_table: col._on_table_attach(_col_attached) diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index d4039a5fe..bbc318421 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -2068,6 +2068,13 @@ class IndexTest(fixtures.TestBase): t.append_constraint, idx ) + def test_column_associated_w_lowercase_table(self): + from sqlalchemy import table + c = Column('x', Integer) + table('foo', c) + idx = Index('q', c) + is_(idx.table, None) # lower-case-T table doesn't have indexes + class ConstraintTest(fixtures.TestBase): |