From: Gord Thompson Date: Thu, 22 Apr 2021 14:52:15 +0000 (-0600) Subject: Add .as_generic() support to mssql BIT columns X-Git-Tag: rel_1_4_12~11^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d23866e795a752ee4b4aaaa44addaf8b66547d6f;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Add .as_generic() support to mssql BIT columns Fixes: #6345 Change-Id: I2bdccc88e85c94d87519f58e474689ca7896f063 --- diff --git a/doc/build/changelog/unreleased_14/6345.rst b/doc/build/changelog/unreleased_14/6345.rst new file mode 100644 index 0000000000..152e38c432 --- /dev/null +++ b/doc/build/changelog/unreleased_14/6345.rst @@ -0,0 +1,7 @@ +.. change:: + :tags: bug, mssql, schema + :tickets: 6345 + + Add :meth:`_types.TypeEngine.as_generic` support for + :class:`sqlalchemy.dialects.mysql.BIT` columns, mapping + them to :class:`_sql.sqltypes.Boolean`. diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index 8c2abc8e7b..e59221f834 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -1255,7 +1255,14 @@ class XML(sqltypes.Text): __visit_name__ = "XML" -class BIT(sqltypes.TypeEngine): +class BIT(sqltypes.Boolean): + """MSSQL BIT type. + + Both pyodbc and pymssql return values from BIT columns as + Python so just subclass Boolean. + + """ + __visit_name__ = "BIT" diff --git a/test/dialect/mssql/test_types.py b/test/dialect/mssql/test_types.py index 4e78ec1220..798dbfc1fd 100644 --- a/test/dialect/mssql/test_types.py +++ b/test/dialect/mssql/test_types.py @@ -36,6 +36,7 @@ from sqlalchemy.dialects.mssql import base as mssql from sqlalchemy.dialects.mssql import ROWVERSION from sqlalchemy.dialects.mssql import TIMESTAMP from sqlalchemy.dialects.mssql.base import _MSDate +from sqlalchemy.dialects.mssql.base import BIT from sqlalchemy.dialects.mssql.base import DATETIMEOFFSET from sqlalchemy.dialects.mssql.base import MS_2005_VERSION from sqlalchemy.dialects.mssql.base import MS_2008_VERSION @@ -1342,3 +1343,31 @@ class BinaryTest(fixtures.TestBase): stream = fp.read(len_) fp.close() return stream + + +class BooleanTest(fixtures.TestBase, AssertsCompiledSQL): + __only_on__ = "mssql" + + @testing.provide_metadata + @testing.combinations( + ("as_boolean_null", Boolean, True, "CREATE TABLE tbl (boo BIT NULL)"), + ("as_bit_null", BIT, True, "CREATE TABLE tbl (boo BIT NULL)"), + ( + "as_boolean_not_null", + Boolean, + False, + "CREATE TABLE tbl (boo BIT NOT NULL)", + ), + ("as_bit_not_null", BIT, False, "CREATE TABLE tbl (boo BIT NOT NULL)"), + id_="iaaa", + argnames="col_type, is_nullable, ddl", + ) + def test_boolean_as_bit(self, col_type, is_nullable, ddl): + tbl = Table( + "tbl", self.metadata, Column("boo", col_type, nullable=is_nullable) + ) + self.assert_compile( + schema.CreateTable(tbl), + ddl, + ) + assert isinstance(tbl.c.boo.type.as_generic(), Boolean)