]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
repair regression in SQL Server server default comapre logic
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 10 Jan 2023 21:51:49 +0000 (16:51 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 10 Jan 2023 21:53:23 +0000 (16:53 -0500)
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
alembic/ddl/mssql.py
docs/build/unreleased/1152.rst [new file with mode: 0644]
tests/test_autogen_diffs.py

index 00c5f0ed703c9bb721b13e09621be90ada469e01..b622bc583ad377a150e47a19052593acc7bcd096 100644 (file)
@@ -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 (file)
index 0000000..c5af2d5
--- /dev/null
@@ -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.
index 88806ff4dd9ed924e39ffb767d38a6770be56d17..aa775d70786f922262a8bb598fe30859ce1035c8 100644 (file)
@@ -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",