From 6be35e3898c7a7726744dc2590598e0a5a20c76b Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 9 Mar 2013 18:05:21 -0500 Subject: [PATCH] - auto-append for CheckConstraint should skip table if the expression is against a lower-case-t table --- lib/sqlalchemy/schema.py | 4 ++-- test/sql/test_constraints.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 9d14bd3cab..01a763ca1b 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -2025,7 +2025,7 @@ class ColumnCollectionMixin(object): for c in columns] if self._pending_colargs and \ isinstance(self._pending_colargs[0], Column) and \ - self._pending_colargs[0].table is not None: + isinstance(self._pending_colargs[0].table, Table): self._set_parent_with_dispatch(self._pending_colargs[0].table) def _set_parent(self, table): @@ -2121,7 +2121,7 @@ class CheckConstraint(Constraint): elif _autoattach: cols = sqlutil.find_columns(self.sqltext) tables = set([c.table for c in cols - if c.table is not None]) + if isinstance(c.table, Table)]) if len(tables) == 1: self._set_parent_with_dispatch( tables.pop()) diff --git a/test/sql/test_constraints.py b/test/sql/test_constraints.py index ab294e1ebb..026095c3bd 100644 --- a/test/sql/test_constraints.py +++ b/test/sql/test_constraints.py @@ -7,6 +7,7 @@ from sqlalchemy import testing from sqlalchemy.testing import engines from sqlalchemy.testing import eq_ from sqlalchemy.testing.assertsql import AllOf, RegexSQL, ExactSQL, CompiledSQL +from sqlalchemy.sql import table, column class ConstraintGenTest(fixtures.TestBase, AssertsExecutionResults): __dialect__ = 'default' @@ -753,6 +754,18 @@ class ConstraintAPITest(fixtures.TestBase): c = Index('foo', t.c.a) assert c in t.indexes + def test_auto_append_lowercase_table(self): + t = table('t', column('a')) + t2 = table('t2', column('a')) + for c in ( + UniqueConstraint(t.c.a), + CheckConstraint(t.c.a > 5), + ForeignKeyConstraint([t.c.a], [t2.c.a]), + PrimaryKeyConstraint(t.c.a), + Index('foo', t.c.a) + ): + assert True + def test_tometadata_ok(self): m = MetaData() -- 2.47.2