From 555f30d64c23558a13bb95c2c10cb8556b5b21ae Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 6 Jun 2013 12:52:18 -0400 Subject: When querying the information schema on SQL Server 2000, removed a CAST call that was added in 0.8.1 to help with driver issues, which apparently is not compatible on 2000. The CAST remains in place for SQL Server 2005 and greater. [ticket:2747] --- lib/sqlalchemy/dialects/mssql/information_schema.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'lib/sqlalchemy/dialects/mssql') diff --git a/lib/sqlalchemy/dialects/mssql/information_schema.py b/lib/sqlalchemy/dialects/mssql/information_schema.py index a7628f213..c0d5d9168 100644 --- a/lib/sqlalchemy/dialects/mssql/information_schema.py +++ b/lib/sqlalchemy/dialects/mssql/information_schema.py @@ -10,10 +10,11 @@ from ... import Table, MetaData, Column from ...types import String, Unicode, Integer, TypeDecorator from ... import cast from ... import util +from ...sql import expression +from ...ext.compiler import compiles ischema = MetaData() - class CoerceUnicode(TypeDecorator): impl = Unicode @@ -23,7 +24,19 @@ class CoerceUnicode(TypeDecorator): return value def bind_expression(self, bindvalue): - return cast(bindvalue, Unicode) + return _cast_on_2005(bindvalue) + +class _cast_on_2005(expression.ColumnElement): + def __init__(self, bindvalue): + self.bindvalue = bindvalue + +@compiles(_cast_on_2005) +def _compile(element, compiler, **kw): + from . import base + if compiler.dialect.server_version_info < base.MS_2005_VERSION: + return compiler.process(element.bindvalue, **kw) + else: + return compiler.process(cast(element.bindvalue, Unicode), **kw) schemata = Table("SCHEMATA", ischema, Column("CATALOG_NAME", CoerceUnicode, key="catalog_name"), -- cgit v1.2.1