From: Mike Bayer Date: Thu, 18 Apr 2013 21:41:30 +0000 (-0400) Subject: - this pymssql test needs to be against the pymssql dialect X-Git-Tag: rel_0_8_1~13^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0790efcf87a268fd8bc810b711fe2b9760bcf1e6;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - this pymssql test needs to be against the pymssql dialect - Part of a longer series of fixes needed for pyodbc+ mssql, a CAST to NVARCHAR(max) has been added to the bound parameter for the table name and schema name in all information schema queries to avoid the issue of comparing NVARCHAR to NTEXT, which seems to be rejected by the ODBC driver in some cases, such as FreeTDS (0.91 only?) plus unicode bound parameters being passed. The issue seems to be specific to the SQL Server information schema tables and the workaround is harmless for those cases where the problem doesn't exist in the first place. [ticket:2355] --- diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index 224690cc29..25a8d4c190 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -6,6 +6,20 @@ .. changelog:: :version: 0.8.1 + .. change:: + :tags: bug, mssql + :tickets: 2355 + + Part of a longer series of fixes needed for pyodbc+ + mssql, a CAST to NVARCHAR(max) has been added to the bound + parameter for the table name and schema name in all information schema + queries to avoid the issue of comparing NVARCHAR to NTEXT, + which seems to be rejected by the ODBC driver in some cases, + such as FreeTDS (0.91 only?) plus unicode bound parameters being passed. + The issue seems to be specific to the SQL Server information + schema tables and the workaround is harmless for those cases + where the problem doesn't exist in the first place. + .. change:: :tags: bug, sql :tickets: 2691 diff --git a/lib/sqlalchemy/dialects/mssql/information_schema.py b/lib/sqlalchemy/dialects/mssql/information_schema.py index 35ce2450e0..80e59d323e 100644 --- a/lib/sqlalchemy/dialects/mssql/information_schema.py +++ b/lib/sqlalchemy/dialects/mssql/information_schema.py @@ -8,6 +8,7 @@ from ... import Table, MetaData, Column from ...types import String, Unicode, Integer, TypeDecorator +from ... import cast ischema = MetaData() @@ -22,6 +23,9 @@ class CoerceUnicode(TypeDecorator): # end Py2K return value + def bind_expression(self, bindvalue): + return cast(bindvalue, Unicode) + schemata = Table("SCHEMATA", ischema, Column("CATALOG_NAME", CoerceUnicode, key="catalog_name"), Column("SCHEMA_NAME", CoerceUnicode, key="schema_name"), diff --git a/test/dialect/test_mssql.py b/test/dialect/test_mssql.py index 0dfda9015c..f1cd3fe85b 100644 --- a/test/dialect/test_mssql.py +++ b/test/dialect/test_mssql.py @@ -1949,7 +1949,7 @@ class TypeRoundTripTest(fixtures.TestBase, AssertsExecutionResults, ComparesTabl engine.execute(tbl.delete()) class MonkeyPatchedBinaryTest(fixtures.TestBase): - __only_on__ = 'mssql' + __only_on__ = 'mssql+pymssql' def test_unicode(self): module = __import__('pymssql')