From: Gord Thompson Date: Fri, 20 Oct 2023 14:19:42 +0000 (-0600) Subject: Fix identity column reflection failure X-Git-Tag: rel_1_4_50~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9ea0bb11d9bb947c525c6c6ecc0320c47e93d893;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Fix identity column reflection failure Fixes: #10504 Fix reflection failure for bigint identity column with a large identity start value (more than 18 digits). Change-Id: I8a7ec114e4596b1710d789a4a4fb08013edd80ce (cherry picked from commit 4c46ed6a9f6f93abd5abe5ba4b95c4c1e8f52a4c) --- diff --git a/doc/build/changelog/unreleased_14/10504.rst b/doc/build/changelog/unreleased_14/10504.rst new file mode 100644 index 0000000000..7afc00f667 --- /dev/null +++ b/doc/build/changelog/unreleased_14/10504.rst @@ -0,0 +1,8 @@ +.. change:: + :tags: bug, mssql, reflection + :tickets: 10504 + :versions: 2.0.23 + + Fixed issue where identity column reflection would fail + for a bigint column with a large identity start value + (more than 18 digits). diff --git a/lib/sqlalchemy/dialects/mssql/information_schema.py b/lib/sqlalchemy/dialects/mssql/information_schema.py index 8ca95d79b5..998757c170 100644 --- a/lib/sqlalchemy/dialects/mssql/information_schema.py +++ b/lib/sqlalchemy/dialects/mssql/information_schema.py @@ -215,7 +215,7 @@ class IdentitySqlVariant(TypeDecorator): cache_ok = True def column_expression(self, colexpr): - return cast(colexpr, Numeric) + return cast(colexpr, Numeric(38, 0)) identity_columns = Table( diff --git a/test/dialect/mssql/test_reflection.py b/test/dialect/mssql/test_reflection.py index d24ee4adb9..125959cf9d 100644 --- a/test/dialect/mssql/test_reflection.py +++ b/test/dialect/mssql/test_reflection.py @@ -847,7 +847,11 @@ class IdentityReflectionTest(fixtures.TablesTest): ), ), Column("id2", Integer, Identity()), - Column("id3", sqltypes.BigInteger, Identity()), + Column( + "id3", + sqltypes.BigInteger, + Identity(start=-9223372036854775808), + ), Column("id4", sqltypes.SmallInteger, Identity()), Column("id5", sqltypes.Numeric, Identity()), ] @@ -869,7 +873,10 @@ class IdentityReflectionTest(fixtures.TablesTest): eq_(type(col["identity"]["start"]), int) eq_(type(col["identity"]["increment"]), int) elif col["name"] == "id3": - eq_(col["identity"], {"start": 1, "increment": 1}) + eq_( + col["identity"], + {"start": -9223372036854775808, "increment": 1}, + ) eq_(type(col["identity"]["start"]), util.compat.long_type) eq_(type(col["identity"]["increment"]), util.compat.long_type) elif col["name"] == "id4":