From 27db59b337b9918aada537d3049fa7973f99f1f2 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Tue, 13 Nov 2012 23:43:31 -0500 Subject: [PATCH] Fixed bug whereby using "key" with Column in conjunction with "schema" for the owning Table would fail to locate result rows due to the MSSQL dialect's "schema rendering" logic's failure to take .key into account. Also in 0.7.10. [ticket:2607] --- doc/build/changelog/changelog_08.rst | 11 +++++++++++ lib/sqlalchemy/dialects/mssql/base.py | 3 +-- test/sql/test_query.py | 21 +++++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index 0571798ce7..9025f8c301 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -6,6 +6,17 @@ .. changelog:: :version: 0.8.0b2 + .. change:: + :tags: mssql, bug + :tickets:2607 + + Fixed bug whereby using "key" with Column + in conjunction with "schema" for the owning + Table would fail to locate result rows due + to the MSSQL dialect's "schema rendering" + logic's failure to take .key into account. + Also in 0.7.10. + .. change:: :tags: sql, bug :tickets: 2603 diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index f9b7b944ce..09db05e1fe 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -855,12 +855,11 @@ class MSSQLCompiler(compiler.SQLCompiler): if t is not None: converted = expression._corresponding_column_or_error( t, column) - if add_to_result_map is not None: add_to_result_map( column.name, column.name, - (column, ), + (column, column.name, column.key), column.type ) diff --git a/test/sql/test_query.py b/test/sql/test_query.py index f8f5953c5a..95e1593161 100644 --- a/test/sql/test_query.py +++ b/test/sql/test_query.py @@ -1569,6 +1569,13 @@ class KeyTargetingTest(fixtures.TablesTest): Column('ctype', String(30), key="content_type") ) + if testing.requires.schemas.enabled: + wschema = Table('wschema', metadata, + Column("a", CHAR(2), key="b"), + Column("c", CHAR(2), key="q"), + schema="test_schema" + ) + @classmethod def insert_data(cls): cls.tables.keyed1.insert().execute(dict(b="a1", q="c1")) @@ -1577,6 +1584,20 @@ class KeyTargetingTest(fixtures.TablesTest): cls.tables.keyed4.insert().execute(dict(b="b4", q="q4")) cls.tables.content.insert().execute(type="t1") + if testing.requires.schemas.enabled: + cls.tables['test_schema.wschema'].insert().execute(dict(b="a1", q="c1")) + + @testing.requires.schemas + def test_keyed_accessor_wschema(self): + keyed1 = self.tables['test_schema.wschema'] + row = testing.db.execute(keyed1.select()).first() + + eq_(row.b, "a1") + eq_(row.q, "c1") + eq_(row.a, "a1") + eq_(row.c, "c1") + + def test_keyed_accessor_single(self): keyed1 = self.tables.keyed1 row = testing.db.execute(keyed1.select()).first() -- 2.47.3