From: Mike Bayer Date: Wed, 14 Nov 2012 04:43:31 +0000 (-0500) Subject: Fixed bug whereby using "key" with Column X-Git-Tag: rel_0_8_0b2~61 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=27db59b337b9918aada537d3049fa7973f99f1f2;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git 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] --- 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()