From cfb0f9ca14f82c9ba06c4d5cbc992f821eb2234e Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 15 May 2013 15:46:29 -0400 Subject: [PATCH] Regression from this ticket caused the unsupported keyword "true" to render, added logic to convert this to 1/0 for SQL server. [ticket:2682] --- doc/build/changelog/changelog_08.rst | 8 ++++++++ lib/sqlalchemy/dialects/mssql/base.py | 6 ++++++ test/dialect/test_mssql.py | 11 +++++++++++ test/dialect/test_oracle.py | 10 ++++++++++ 4 files changed, 35 insertions(+) diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index 663d3a40b2..9a09f10457 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -33,6 +33,14 @@ on the apparent string message sent in the exception; tested against mysqlconnector 1.0.9. + .. change:: + :tags: bug, sql, mssql + :tickets: 2682 + + Regression from this ticket caused the unsupported keyword + "true" to render, added logic to convert this to 1/0 + for SQL server. + .. changelog:: :version: 0.8.1 :released: April 27, 2013 diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index 70ffcb8cdf..fc952f4b59 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -701,6 +701,12 @@ class MSSQLCompiler(compiler.SQLCompiler): (self.process(binary.left, **kw), self.process(binary.right, **kw)) + def visit_true(self, expr, **kw): + return '1' + + def visit_false(self, expr, **kw): + return '0' + def visit_match_op_binary(self, binary, operator, **kw): return "CONTAINS (%s, %s)" % ( self.process(binary.left, **kw), diff --git a/test/dialect/test_mssql.py b/test/dialect/test_mssql.py index f1cd3fe85b..7b8f533908 100644 --- a/test/dialect/test_mssql.py +++ b/test/dialect/test_mssql.py @@ -17,10 +17,21 @@ from sqlalchemy.testing import emits_warning_on, assert_raises_message import decimal from sqlalchemy.engine.reflection import Inspector from sqlalchemy.util.compat import b +from sqlalchemy import sql + class CompileTest(fixtures.TestBase, AssertsCompiledSQL): __dialect__ = mssql.dialect() + def test_true_false(self): + self.assert_compile( + sql.false(), "0" + ) + self.assert_compile( + sql.true(), + "1" + ) + def test_select(self): t = table('sometable', column('somecolumn')) self.assert_compile(t.select(), diff --git a/test/dialect/test_oracle.py b/test/dialect/test_oracle.py index 861b28c5f7..def4654f02 100644 --- a/test/dialect/test_oracle.py +++ b/test/dialect/test_oracle.py @@ -15,6 +15,7 @@ import decimal from sqlalchemy.testing.schema import Table, Column import datetime import os +from sqlalchemy import sql class OutParamTest(fixtures.TestBase, AssertsExecutionResults): @@ -106,6 +107,15 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL): __dialect__ = oracle.dialect() + def test_true_false(self): + self.assert_compile( + sql.false(), "0" + ) + self.assert_compile( + sql.true(), + "1" + ) + def test_owner(self): meta = MetaData() parent = Table('parent', meta, Column('id', Integer, -- 2.47.2