From: Leonel Atencio Date: Fri, 26 Jul 2019 18:11:34 +0000 (-0500) Subject: Add support for try_cast function on qlalchemy.dialects.mssql X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3f28dcb98bf00bcd24fe315ade3e9ab57b449aa4;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Add support for try_cast function on qlalchemy.dialects.mssql --- diff --git a/lib/sqlalchemy/dialects/mssql/__init__.py b/lib/sqlalchemy/dialects/mssql/__init__.py index 7cd1d34a55..27edc8fcb0 100644 --- a/lib/sqlalchemy/dialects/mssql/__init__.py +++ b/lib/sqlalchemy/dialects/mssql/__init__.py @@ -42,6 +42,7 @@ from .base import UNIQUEIDENTIFIER from .base import VARBINARY from .base import VARCHAR from .base import XML +from .base import TRY_CAST base.dialect = dialect = pyodbc.dialect @@ -79,5 +80,6 @@ __all__ = ( "UNIQUEIDENTIFIER", "SQL_VARIANT", "XML", + "TRY_CAST", "dialect", ) diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index 86116e6a17..03027a0c84 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -1173,6 +1173,10 @@ class SQL_VARIANT(sqltypes.TypeEngine): __visit_name__ = "SQL_VARIANT" +class TRY_CAST(elements.Cast): + pass + + # old names. MSDateTime = _MSDateTime MSDate = _MSDate @@ -1586,6 +1590,12 @@ class MSSQLCompiler(compiler.SQLCompiler): # Limit in mssql is after the select keyword return "" + def _try_cast(self, element, **kw): + return "TRY CAST (%s AS %s)" % ( + compiler.SQLCompiler.process(element.clause, **kw), + compiler.SQLCompiler.process(element.typeclause, **kw), + ) + def visit_select(self, select, **kwargs): """Look for ``LIMIT`` and OFFSET in a select statement, and if so tries to wrap it in a subquery with ``row_number()`` criterion.