]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
Fix autogenerate check constraint main
authorFederico Caselli <cfederico87@gmail.com>
Wed, 5 Aug 2026 21:11:37 +0000 (23:11 +0200)
committerFederico Caselli <cfederico87@gmail.com>
Thu, 6 Aug 2026 18:02:42 +0000 (20:02 +0200)
Fixed bug in the check constraint detection implemented in :ticket:`508`
that failed to take into account column bound check constraints,
leading to wrong autogenerate detections.

Fixes: #1842
Change-Id: I43e18fb3b54ffbabc3e59bd1a7270516c7b1713f

alembic/autogenerate/compare/check_constraints.py
alembic/autogenerate/compare/constraints.py
alembic/testing/__init__.py
alembic/util/sqla_compat.py
docs/build/unreleased/1842.rst [new file with mode: 0644]
tests/requirements.py
tests/test_autogen_check_constraints.py

index 89f577b4f011b77bb53f86dc2bd7e6638bfd4e00..fbdef5c95616b3ec5311622acc0f8870ca7b98d1 100644 (file)
@@ -57,12 +57,9 @@ def _compare_check_constraints(
     inspector = autogen_context.inspector
     impl = autogen_context.migration_context.impl
 
     inspector = autogen_context.inspector
     impl = autogen_context.migration_context.impl
 
-    metadata_ck_constraints = {
-        ck
-        for ck in metadata_table.constraints
-        if isinstance(ck, sa_schema.CheckConstraint)
-        and not sqla_compat._is_type_bound(ck)
-    }
+    metadata_ck_constraints = sqla_compat.all_table_check_constraints(
+        metadata_table
+    )
 
     try:
         conn_ck_list = _InspectorConv(inspector).get_check_constraints(
 
     try:
         conn_ck_list = _InspectorConv(inspector).get_check_constraints(
index c550bc6df5adb3f52da46584581b7a6b20115f98..eeb032a163bd95f78c3865555ad09be95f5d031e 100644 (file)
@@ -63,6 +63,7 @@ def _compare_indexes_and_uniques(
 
     # 1a. get raw indexes and unique constraints from metadata ...
     if metadata_table is not None:
 
     # 1a. get raw indexes and unique constraints from metadata ...
     if metadata_table is not None:
+        # unique constraints can't be set on columns, are all table bound.
         metadata_unique_constraints = {
             uq
             for uq in metadata_table.constraints
         metadata_unique_constraints = {
             uq
             for uq in metadata_table.constraints
@@ -636,6 +637,8 @@ def _compare_foreign_keys(
         return PriorityDispatchResult.CONTINUE
 
     inspector = autogen_context.inspector
         return PriorityDispatchResult.CONTINUE
 
     inspector = autogen_context.inspector
+    # fk constraints can be set on columns, but they appear also on
+    # the table constraint list
     metadata_fks = {
         fk
         for fk in metadata_table.constraints
     metadata_fks = {
         fk
         for fk in metadata_table.constraints
index 32915081d9530a6c1239778a84f34479d21026b2..8bd6660f9e2b5db97c7b1dfbfdc115565b2edbf2 100644 (file)
@@ -8,7 +8,6 @@ from sqlalchemy.testing import skip_if
 from sqlalchemy.testing import uses_deprecated
 from sqlalchemy.testing.config import combinations
 from sqlalchemy.testing.config import fixture
 from sqlalchemy.testing import uses_deprecated
 from sqlalchemy.testing.config import combinations
 from sqlalchemy.testing.config import fixture
-from sqlalchemy.testing.config import requirements as requires
 from sqlalchemy.testing.config import Variation
 from sqlalchemy.testing.config import variation
 
 from sqlalchemy.testing.config import Variation
 from sqlalchemy.testing.config import variation
 
index 6053ca839c305a7eda23f1f04a476b21a517bf83..330521f0593b1a5759fd06bfbfad6b46f369c642 100644 (file)
@@ -6,6 +6,7 @@ from __future__ import annotations
 from collections.abc import Iterable
 from collections.abc import Iterator
 import contextlib
 from collections.abc import Iterable
 from collections.abc import Iterator
 import contextlib
+from itertools import chain
 import re
 from typing import Any
 from typing import Callable
 import re
 from typing import Any
 from typing import Callable
@@ -22,6 +23,7 @@ from sqlalchemy import types as sqltypes
 from sqlalchemy.schema import CheckConstraint
 from sqlalchemy.schema import Column
 from sqlalchemy.schema import ForeignKeyConstraint
 from sqlalchemy.schema import CheckConstraint
 from sqlalchemy.schema import Column
 from sqlalchemy.schema import ForeignKeyConstraint
+from sqlalchemy.schema import Table
 from sqlalchemy.sql import visitors
 from sqlalchemy.sql.base import DialectKWArgs
 from sqlalchemy.sql.elements import BindParameter
 from sqlalchemy.sql import visitors
 from sqlalchemy.sql.base import DialectKWArgs
 from sqlalchemy.sql.elements import BindParameter
@@ -35,7 +37,6 @@ if TYPE_CHECKING:
     from sqlalchemy import ClauseElement
     from sqlalchemy import Identity
     from sqlalchemy import Index
     from sqlalchemy import ClauseElement
     from sqlalchemy import Identity
     from sqlalchemy import Index
-    from sqlalchemy import Table
     from sqlalchemy.engine import Connection
     from sqlalchemy.engine import Dialect
     from sqlalchemy.engine import Transaction
     from sqlalchemy.engine import Connection
     from sqlalchemy.engine import Dialect
     from sqlalchemy.engine import Transaction
@@ -251,6 +252,14 @@ def _table_for_constraint(constraint: Constraint) -> Table:
         table = constraint.parent
         assert table is not None
         return table  # type: ignore[return-value]
         table = constraint.parent
         assert table is not None
         return table  # type: ignore[return-value]
+    elif isinstance(constraint, CheckConstraint):
+        parent = constraint.parent
+        if not isinstance(parent, Table):
+            table = parent.table
+            assert table is not None
+            return table
+        else:
+            return parent
     else:
         return constraint.table
 
     else:
         return constraint.table
 
@@ -504,3 +513,16 @@ def _inherit_schema_deprecated() -> bool:
     # at some point in 2.1 inherit_schema was replaced with a property
     # so that's preset at the class level, while before it wasn't.
     return sqla_2_1 and hasattr(sqltypes.Enum, "inherit_schema")
     # at some point in 2.1 inherit_schema was replaced with a property
     # so that's preset at the class level, while before it wasn't.
     return sqla_2_1 and hasattr(sqltypes.Enum, "inherit_schema")
+
+
+def all_table_check_constraints(table: Table) -> set[CheckConstraint]:
+    """Returns all check constraint that are not type-bound,
+    including those on columns."""
+    candidates = chain(
+        table.constraints, *(c.constraints for c in table.columns)
+    )
+    return {
+        ck
+        for ck in candidates
+        if isinstance(ck, CheckConstraint) and not _is_type_bound(ck)
+    }
diff --git a/docs/build/unreleased/1842.rst b/docs/build/unreleased/1842.rst
new file mode 100644 (file)
index 0000000..adc5776
--- /dev/null
@@ -0,0 +1,7 @@
+.. change::
+    :tags: bug, autogenerate
+    :tickets: 1842
+
+    Fixed bug in the check constraint detection implemented in :ticket:`508`
+    that failed to take into account column bound check constraints,
+    leading to wrong autogenerate detections.
index 911715a58fbb6db8d9507e4e3a62c0bc892419b3..7607472dedd0c69f604759c19e6fe9b060725224 100644 (file)
@@ -259,6 +259,16 @@ class DefaultRequirements(SuiteRequirements):
             self._mysql_and_check_constraints_exist,
         )
 
             self._mysql_and_check_constraints_exist,
         )
 
+    @property
+    def inline_check_constraint_reflection(self):
+        return exclusions.only_on(
+            [
+                "postgresql",
+                "sqlite",
+                "oracle",
+            ]
+        )
+
     def mysql_check_col_name_change(self, config):
         # MySQL has check constraints that enforce an reflect, however
         # they prevent a column's name from being changed due to a bug in
     def mysql_check_col_name_change(self, config):
         # MySQL has check constraints that enforce an reflect, however
         # they prevent a column's name from being changed due to a bug in
index 456953ec91cbeadddd53ce67a90a2ac697459c74..cab8789ca4c5b4857b837de80d76bd1f44c9fd7f 100644 (file)
@@ -14,6 +14,7 @@ from alembic.operations import ops
 from alembic.testing import config
 from alembic.testing import eq_
 from alembic.testing import eq_ignore_whitespace
 from alembic.testing import config
 from alembic.testing import eq_
 from alembic.testing import eq_ignore_whitespace
+from alembic.testing import fixture
 from alembic.testing import TestBase
 from alembic.testing import util
 from alembic.testing.env import clear_staging_env
 from alembic.testing import TestBase
 from alembic.testing import util
 from alembic.testing.env import clear_staging_env
@@ -28,11 +29,28 @@ _ck_plugin_disabled_opts = {
 }
 
 
 }
 
 
+@fixture(params=["table", "column"])
+def col_and_check(request):
+    if (
+        request.param == "column"
+        and not config.requirements.inline_check_constraint_reflection.enabled
+    ):
+        config.skip_test("does not support column bound check constraints")
+
+    def make(name, type_, check):
+        if request.param == "table":
+            return [Column(name, type_), check]
+        else:
+            return [Column(name, type_, check)]
+
+    return make
+
+
 class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
     __backend__ = True
     __requires__ = ("check_constraint_reflection",)
 
 class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
     __backend__ = True
     __requires__ = ("check_constraint_reflection",)
 
-    def test_add_check_constraint(self):
+    def test_add_check_constraint(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         m1 = MetaData()
         m2 = MetaData()
 
@@ -45,8 +63,9 @@ class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
         Table(
             "t",
             m2,
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         diffs = self._fixture(m1, m2)
         )
 
         diffs = self._fixture(m1, m2)
@@ -55,7 +74,7 @@ class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
         eq_(diffs[0][0], "add_constraint")
         eq_(diffs[0][1].name, "ck_t_x_positive")
 
         eq_(diffs[0][0], "add_constraint")
         eq_(diffs[0][1].name, "ck_t_x_positive")
 
-    def test_can_be_disabled_via_exclusion(self):
+    def test_can_be_disabled_via_exclusion(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         m1 = MetaData()
         m2 = MetaData()
 
@@ -68,8 +87,9 @@ class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
         Table(
             "t",
             m2,
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         diffs = self._fixture(m1, m2, opts=_ck_plugin_disabled_opts)
         )
 
         diffs = self._fixture(m1, m2, opts=_ck_plugin_disabled_opts)
@@ -82,15 +102,16 @@ class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
         ]
         eq_(check_diffs, [])
 
         ]
         eq_(check_diffs, [])
 
-    def test_remove_check_constraint(self):
+    def test_remove_check_constraint(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         Table(
         )
 
         Table(
@@ -105,44 +126,50 @@ class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
         eq_(diffs[0][0], "remove_constraint")
         eq_(diffs[0][1].name, "ck_t_x_positive")
 
         eq_(diffs[0][0], "remove_constraint")
         eq_(diffs[0][1].name, "ck_t_x_positive")
 
-    def test_same_name_different_expression_no_change(self):
+    def test_same_name_different_expression_no_change(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         Table(
             "t",
             m2,
         )
 
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 5", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 5", name="ck_t_x_positive")
+            ),
         )
 
         diffs = self._fixture(m1, m2)
 
         eq_(diffs, [])
 
         )
 
         diffs = self._fixture(m1, m2)
 
         eq_(diffs, [])
 
-    def test_compare_check_constraint_is_different(self, monkeypatch):
+    def test_compare_check_constraint_is_different(
+        self, col_and_check, monkeypatch
+    ):
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         Table(
             "t",
             m2,
         )
 
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 5", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 5", name="ck_t_x_positive")
+            ),
         )
 
         monkeypatch.setattr(
         )
 
         monkeypatch.setattr(
@@ -161,22 +188,26 @@ class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
             {"add_constraint", "remove_constraint"},
         )
 
             {"add_constraint", "remove_constraint"},
         )
 
-    def test_compare_check_constraint_is_skip(self, monkeypatch):
+    def test_compare_check_constraint_is_skip(
+        self, col_and_check, monkeypatch
+    ):
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         Table(
             "t",
             m2,
         )
 
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 5", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 5", name="ck_t_x_positive")
+            ),
         )
 
         monkeypatch.setattr(
         )
 
         monkeypatch.setattr(
@@ -191,29 +222,31 @@ class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
 
         eq_(diffs, [])
 
 
         eq_(diffs, [])
 
-    def test_no_change_check_constraint(self):
+    def test_no_change_check_constraint(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         Table(
             "t",
             m2,
         )
 
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         diffs = self._fixture(m1, m2)
 
         eq_(diffs, [])
 
         )
 
         diffs = self._fixture(m1, m2)
 
         eq_(diffs, [])
 
-    def test_unnamed_check_constraint_in_metadata_ignored(self):
+    def test_unnamed_check_constraint_in_metadata_ignored(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         m1 = MetaData()
         m2 = MetaData()
 
@@ -226,8 +259,7 @@ class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
         Table(
             "t",
             m2,
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 0"),
+            *col_and_check("x", Integer, CheckConstraint("x > 0")),
         )
 
         diffs = self._fixture(m1, m2)
         )
 
         diffs = self._fixture(m1, m2)
@@ -261,7 +293,7 @@ class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
         ]
         eq_(check_diffs, [])
 
         ]
         eq_(check_diffs, [])
 
-    def test_multiple_check_constraints(self):
+    def test_multiple_check_constraints(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         m1 = MetaData()
         m2 = MetaData()
 
@@ -277,9 +309,10 @@ class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
             "t",
             m2,
             Column("x", Integer),
             "t",
             m2,
             Column("x", Integer),
-            Column("y", Integer),
             CheckConstraint("x > 0", name="ck_x"),
             CheckConstraint("x > 0", name="ck_x"),
-            CheckConstraint("y > 0", name="ck_y"),
+            *col_and_check(
+                "y", Integer, CheckConstraint("y > 0", name="ck_y")
+            ),
         )
 
         diffs = self._fixture(m1, m2)
         )
 
         diffs = self._fixture(m1, m2)
@@ -288,7 +321,7 @@ class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
         eq_(diffs[0][0], "add_constraint")
         eq_(diffs[0][1].name, "ck_y")
 
         eq_(diffs[0][0], "add_constraint")
         eq_(diffs[0][1].name, "ck_y")
 
-    def test_remove_one_of_multiple(self):
+    def test_remove_one_of_multiple(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         m1 = MetaData()
         m2 = MetaData()
 
@@ -296,9 +329,10 @@ class AutogenCheckConstraintTest(AutogenFixtureTest, TestBase):
             "t",
             m1,
             Column("x", Integer),
             "t",
             m1,
             Column("x", Integer),
-            Column("y", Integer),
             CheckConstraint("x > 0", name="ck_x"),
             CheckConstraint("x > 0", name="ck_x"),
-            CheckConstraint("y > 0", name="ck_y"),
+            *col_and_check(
+                "y", Integer, CheckConstraint("y > 0", name="ck_y")
+            ),
         )
 
         Table(
         )
 
         Table(
@@ -392,7 +426,7 @@ class AutogenCheckConstraintSchemaTest(AutogenFixtureTest, TestBase):
     __backend__ = True
     __requires__ = ("check_constraint_reflection",)
 
     __backend__ = True
     __requires__ = ("check_constraint_reflection",)
 
-    def test_add_check_constraint_schema(self):
+    def test_add_check_constraint_schema(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         m1 = MetaData()
         m2 = MetaData()
 
@@ -406,8 +440,9 @@ class AutogenCheckConstraintSchemaTest(AutogenFixtureTest, TestBase):
         Table(
             "t",
             m2,
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
             schema=config.test_schema,
         )
 
             schema=config.test_schema,
         )
 
@@ -418,15 +453,16 @@ class AutogenCheckConstraintSchemaTest(AutogenFixtureTest, TestBase):
         eq_(diffs[0][1].name, "ck_t_x_positive")
         eq_(diffs[0][1].table.schema, config.test_schema)
 
         eq_(diffs[0][1].name, "ck_t_x_positive")
         eq_(diffs[0][1].table.schema, config.test_schema)
 
-    def test_remove_check_constraint_schema(self):
+    def test_remove_check_constraint_schema(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
             schema=config.test_schema,
         )
 
             schema=config.test_schema,
         )
 
@@ -449,15 +485,18 @@ class AutogenCheckConstraintFilterTest(AutogenFixtureTest, TestBase):
     __backend__ = True
     __requires__ = ("check_constraint_reflection",)
 
     __backend__ = True
     __requires__ = ("check_constraint_reflection",)
 
-    def test_include_name_excludes_reflected_check_constraint(self):
+    def test_include_name_excludes_reflected_check_constraint(
+        self, col_and_check
+    ):
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         Table(
         )
 
         Table(
@@ -485,7 +524,7 @@ class AutogenCheckConstraintFilterTest(AutogenFixtureTest, TestBase):
         ]
         eq_(check_diffs, [])
 
         ]
         eq_(check_diffs, [])
 
-    def test_include_object_excludes_add(self):
+    def test_include_object_excludes_add(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         m1 = MetaData()
         m2 = MetaData()
 
@@ -498,8 +537,9 @@ class AutogenCheckConstraintFilterTest(AutogenFixtureTest, TestBase):
         Table(
             "t",
             m2,
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         def include_object(obj, name, type_, reflected, compare_to):
         )
 
         def include_object(obj, name, type_, reflected, compare_to):
@@ -521,15 +561,16 @@ class AutogenCheckConstraintFilterTest(AutogenFixtureTest, TestBase):
         ]
         eq_(check_diffs, [])
 
         ]
         eq_(check_diffs, [])
 
-    def test_include_object_excludes_remove(self):
+    def test_include_object_excludes_remove(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         Table(
         )
 
         Table(
@@ -557,7 +598,7 @@ class AutogenCheckConstraintFilterTest(AutogenFixtureTest, TestBase):
         ]
         eq_(check_diffs, [])
 
         ]
         eq_(check_diffs, [])
 
-    def test_include_object_receives_correct_args_for_add(self):
+    def test_include_object_receives_correct_args_for_add(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         m1 = MetaData()
         m2 = MetaData()
 
@@ -570,8 +611,9 @@ class AutogenCheckConstraintFilterTest(AutogenFixtureTest, TestBase):
         Table(
             "t",
             m2,
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         calls = []
         )
 
         calls = []
@@ -593,15 +635,18 @@ class AutogenCheckConstraintFilterTest(AutogenFixtureTest, TestBase):
         eq_(calls[0][2], False)
         eq_(calls[0][3], None)
 
         eq_(calls[0][2], False)
         eq_(calls[0][3], None)
 
-    def test_include_object_receives_correct_args_for_remove(self):
+    def test_include_object_receives_correct_args_for_remove(
+        self, col_and_check
+    ):
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         Table(
         )
 
         Table(
@@ -643,7 +688,7 @@ class AutogenCheckConstraintNoReflectionTest(AutogenFixtureTest, TestBase):
         eng.dialect.get_check_constraints = unimpl
         eng.dialect.get_multi_check_constraints = unimpl
 
         eng.dialect.get_check_constraints = unimpl
         eng.dialect.get_multi_check_constraints = unimpl
 
-    def test_no_reflection_graceful_skip_add(self):
+    def test_no_reflection_graceful_skip_add(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         m1 = MetaData()
         m2 = MetaData()
 
@@ -656,8 +701,9 @@ class AutogenCheckConstraintNoReflectionTest(AutogenFixtureTest, TestBase):
         Table(
             "t",
             m2,
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         diffs = self._fixture(m1, m2)
         )
 
         diffs = self._fixture(m1, m2)
@@ -670,15 +716,16 @@ class AutogenCheckConstraintNoReflectionTest(AutogenFixtureTest, TestBase):
         ]
         eq_(check_diffs, [])
 
         ]
         eq_(check_diffs, [])
 
-    def test_no_reflection_graceful_skip_remove(self):
+    def test_no_reflection_graceful_skip_remove(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
         m1 = MetaData()
         m2 = MetaData()
 
         Table(
             "t",
             m1,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         Table(
         )
 
         Table(
@@ -768,7 +815,7 @@ class AutogenCheckConstraintNamingConvTest(AutogenFixtureTest, TestBase):
     __backend__ = True
     __requires__ = ("check_constraint_reflection",)
 
     __backend__ = True
     __requires__ = ("check_constraint_reflection",)
 
-    def test_add_named_via_convention(self):
+    def test_add_named_via_convention(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData(
             naming_convention={"ck": "ck_%(table_name)s_%(constraint_name)s"}
         m1 = MetaData()
         m2 = MetaData(
             naming_convention={"ck": "ck_%(table_name)s_%(constraint_name)s"}
@@ -779,8 +826,9 @@ class AutogenCheckConstraintNamingConvTest(AutogenFixtureTest, TestBase):
         Table(
             "t",
             m2,
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="x_positive")
+            ),
         )
 
         diffs = self._fixture(m1, m2)
         )
 
         diffs = self._fixture(m1, m2)
@@ -789,7 +837,7 @@ class AutogenCheckConstraintNamingConvTest(AutogenFixtureTest, TestBase):
         eq_(diffs[0][0], "add_constraint")
         eq_(diffs[0][1].name, "ck_t_x_positive")
 
         eq_(diffs[0][0], "add_constraint")
         eq_(diffs[0][1].name, "ck_t_x_positive")
 
-    def test_remove_named_via_convention(self):
+    def test_remove_named_via_convention(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData(
             naming_convention={"ck": "ck_%(table_name)s_%(constraint_name)s"}
         m1 = MetaData()
         m2 = MetaData(
             naming_convention={"ck": "ck_%(table_name)s_%(constraint_name)s"}
@@ -798,8 +846,9 @@ class AutogenCheckConstraintNamingConvTest(AutogenFixtureTest, TestBase):
         Table(
             "t",
             m1,
         Table(
             "t",
             m1,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         Table("t", m2, Column("x", Integer))
         )
 
         Table("t", m2, Column("x", Integer))
@@ -810,7 +859,7 @@ class AutogenCheckConstraintNamingConvTest(AutogenFixtureTest, TestBase):
         eq_(diffs[0][0], "remove_constraint")
         eq_(diffs[0][1].name, "ck_t_x_positive")
 
         eq_(diffs[0][0], "remove_constraint")
         eq_(diffs[0][1].name, "ck_t_x_positive")
 
-    def test_no_change_named_via_convention(self):
+    def test_no_change_named_via_convention(self, col_and_check):
         m1 = MetaData()
         m2 = MetaData(
             naming_convention={"ck": "ck_%(table_name)s_%(constraint_name)s"}
         m1 = MetaData()
         m2 = MetaData(
             naming_convention={"ck": "ck_%(table_name)s_%(constraint_name)s"}
@@ -819,15 +868,17 @@ class AutogenCheckConstraintNamingConvTest(AutogenFixtureTest, TestBase):
         Table(
             "t",
             m1,
         Table(
             "t",
             m1,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="ck_t_x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="ck_t_x_positive")
+            ),
         )
 
         Table(
             "t",
             m2,
         )
 
         Table(
             "t",
             m2,
-            Column("x", Integer),
-            CheckConstraint("x > 0", name="x_positive"),
+            *col_and_check(
+                "x", Integer, CheckConstraint("x > 0", name="x_positive")
+            ),
         )
 
         diffs = self._fixture(m1, m2)
         )
 
         diffs = self._fixture(m1, m2)