summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-04-18 17:41:30 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-04-18 17:41:30 -0400
commit0790efcf87a268fd8bc810b711fe2b9760bcf1e6 (patch)
treef53ebd26adec21c594ffc02d254119a2c7b6013b
parent835f0abb59c10c1204884df1a19f088cf55d49d7 (diff)
downloadsqlalchemy-0790efcf87a268fd8bc810b711fe2b9760bcf1e6.tar.gz
- 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]
-rw-r--r--doc/build/changelog/changelog_08.rst14
-rw-r--r--lib/sqlalchemy/dialects/mssql/information_schema.py4
-rw-r--r--test/dialect/test_mssql.py2
3 files changed, 19 insertions, 1 deletions
diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst
index 224690cc2..25a8d4c19 100644
--- a/doc/build/changelog/changelog_08.rst
+++ b/doc/build/changelog/changelog_08.rst
@@ -7,6 +7,20 @@
: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 35ce2450e..80e59d323 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 0dfda9015..f1cd3fe85 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')