From: Gord Thompson Date: Fri, 20 Oct 2023 14:19:42 +0000 (-0600) Subject: Fix identity column reflection failure X-Git-Tag: rel_2_0_23~16^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4c46ed6a9f6f93abd5abe5ba4b95c4c1e8f52a4c;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 --- 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 5bf81e8676..e770313f93 100644 --- a/lib/sqlalchemy/dialects/mssql/information_schema.py +++ b/lib/sqlalchemy/dialects/mssql/information_schema.py @@ -211,7 +211,7 @@ class NumericSqlVariant(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 122c5d7e32..b6a1d411a2 100644 --- a/test/dialect/mssql/test_reflection.py +++ b/test/dialect/mssql/test_reflection.py @@ -1196,7 +1196,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()), ] @@ -1218,7 +1222,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"]), int) eq_(type(col["identity"]["increment"]), int) elif col["name"] == "id4":