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
}
+@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",)
- def test_add_check_constraint(self):
+ def test_add_check_constraint(self, col_and_check):
m1 = MetaData()
m2 = MetaData()
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[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()
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)
]
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,
- 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(
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,
- 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),
- 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, [])
- 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,
- 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),
- CheckConstraint("x > 5", name="ck_t_x_positive"),
+ *col_and_check(
+ "x", Integer, CheckConstraint("x > 5", name="ck_t_x_positive")
+ ),
)
monkeypatch.setattr(
{"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,
- 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),
- CheckConstraint("x > 5", name="ck_t_x_positive"),
+ *col_and_check(
+ "x", Integer, CheckConstraint("x > 5", name="ck_t_x_positive")
+ ),
)
monkeypatch.setattr(
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,
- 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),
- 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, [])
- 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()
Table(
"t",
m2,
- Column("x", Integer),
- CheckConstraint("x > 0"),
+ *col_and_check("x", Integer, CheckConstraint("x > 0")),
)
diffs = self._fixture(m1, m2)
]
eq_(check_diffs, [])
- def test_multiple_check_constraints(self):
+ def test_multiple_check_constraints(self, col_and_check):
m1 = MetaData()
m2 = MetaData()
"t",
m2,
Column("x", Integer),
- Column("y", Integer),
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)
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()
"t",
m1,
Column("x", Integer),
- Column("y", Integer),
CheckConstraint("x > 0", name="ck_x"),
- CheckConstraint("y > 0", name="ck_y"),
+ *col_and_check(
+ "y", Integer, CheckConstraint("y > 0", name="ck_y")
+ ),
)
Table(
__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()
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,
)
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,
- 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,
)
__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,
- 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(
]
eq_(check_diffs, [])
- def test_include_object_excludes_add(self):
+ def test_include_object_excludes_add(self, col_and_check):
m1 = MetaData()
m2 = MetaData()
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):
]
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,
- 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(
]
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()
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 = []
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,
- 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(
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()
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_(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,
- 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(
__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"}
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)
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"}
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))
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"}
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),
- CheckConstraint("x > 0", name="x_positive"),
+ *col_and_check(
+ "x", Integer, CheckConstraint("x > 0", name="x_positive")
+ ),
)
diffs = self._fixture(m1, m2)