From: Nick Crews Date: Mon, 15 May 2023 19:21:22 +0000 (-0800) Subject: fixup: try_cast: restore mssql implementation X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e2be28a4847937203ab6adc4b83a2799164dfcae;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git fixup: try_cast: restore mssql implementation From comments at https://gerrit.sqlalchemy.org/c/sqlalchemy/sqlalchemy/+/4605 --- diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index acab87f2b9..344a9bd1aa 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -2145,6 +2145,12 @@ class MSSQLCompiler(compiler.SQLCompiler): else: return "" + def visit_try_cast(self, element, **kw): + return "TRY_CAST (%s AS %s)" % ( + self.process(element.clause, **kw), + self.process(element.typeclause, **kw), + ) + def translate_select_structure(self, select_stmt, **kwargs): """Look for ``LIMIT`` and OFFSET in a select statement, and if so tries to wrap it in a subquery with ``row_number()`` criterion. diff --git a/test/dialect/mssql/test_compiler.py b/test/dialect/mssql/test_compiler.py index 4afcbfd97a..3cccac6a8a 100644 --- a/test/dialect/mssql/test_compiler.py +++ b/test/dialect/mssql/test_compiler.py @@ -20,6 +20,7 @@ from sqlalchemy import String from sqlalchemy import Table from sqlalchemy import testing from sqlalchemy import text +from sqlalchemy import try_cast from sqlalchemy import union from sqlalchemy import UniqueConstraint from sqlalchemy import update @@ -1472,6 +1473,13 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL): "CREATE INDEX foo ON test (x) INCLUDE (y) WHERE y > 1", ) + def test_try_cast(self): + t1 = Table("t1", MetaData(), Column("id", Integer, primary_key=True)) + self.assert_compile( + select(try_cast(t1.c.id, Integer)), + "SELECT TRY_CAST (t1.id AS INTEGER) AS id FROM t1", + ) + @testing.combinations( ("no_persisted", "", "ignore"), ("persisted_none", "", None),