From: Mike Bayer Date: Tue, 10 Jan 2023 21:51:49 +0000 (-0500) Subject: repair regression in SQL Server server default comapre logic X-Git-Tag: rel_1_9_2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eb01c5407d0eb164944973be0189d950d8ea46af;p=thirdparty%2Fsqlalchemy%2Falembic.git repair regression in SQL Server server default comapre logic Fixed regression caused by :ticket:`1145` where the string transformations applied to server defaults caused expressions such as ``(getdate())`` to no longer compare as equivalent on SQL Server, others. Change-Id: I9c611edd70765487746f652c9eb09e54d935da28 Fixes: #1152 --- diff --git a/alembic/ddl/mssql.py b/alembic/ddl/mssql.py index 00c5f0ed..b622bc58 100644 --- a/alembic/ddl/mssql.py +++ b/alembic/ddl/mssql.py @@ -231,6 +231,7 @@ class MSSQLImpl(DefaultImpl): rendered_metadata_default, rendered_inspector_default, ): + if rendered_metadata_default is not None: rendered_metadata_default = re.sub( r"^\((.+)\)$", r"\1", rendered_metadata_default @@ -241,9 +242,14 @@ class MSSQLImpl(DefaultImpl): ) if rendered_inspector_default is not None: - rendered_inspector_default = re.sub( - r"^\(+(.+?)\)+$", r"\1", rendered_inspector_default - ) + + # the iteration is a quick hack to remove balanced parens only + # up to two levels deep, like ((foo)) but not (foo()) + # see issue #1152 + for i in range(2): + rendered_inspector_default = re.sub( + r"^\((.+)\)$", r"\1", rendered_inspector_default + ) rendered_inspector_default = re.sub( r"^\"?'(.+)'\"?$", r"\1", rendered_inspector_default diff --git a/docs/build/unreleased/1152.rst b/docs/build/unreleased/1152.rst new file mode 100644 index 00000000..c5af2d5a --- /dev/null +++ b/docs/build/unreleased/1152.rst @@ -0,0 +1,7 @@ +.. change:: + :tags: bug, autogenerate + :tickets: 1152 + + Fixed regression caused by :ticket:`1145` where the string transformations + applied to server defaults caused expressions such as ``(getdate())`` to no + longer compare as equivalent on SQL Server, others. diff --git a/tests/test_autogen_diffs.py b/tests/test_autogen_diffs.py index 88806ff4..aa775d70 100644 --- a/tests/test_autogen_diffs.py +++ b/tests/test_autogen_diffs.py @@ -913,6 +913,12 @@ class CompareServerDefaultTest(TestBase): (VARCHAR(30), "some default"), (VARCHAR(30), text("'//slash'")), (VARCHAR(30), text("'has '' quote'")), + (DateTime(), text("(getdate())"), testing.exclusions.only_on("mssql")), + ( + DateTime(), + text("(now())"), + testing.exclusions.only_on("postgresql", "sqlite"), + ), (Integer(), text("15")), (Integer(), "15"), id_="ss",