.. changelog::
:version: 1.2.0b1
+ .. change:: 3957
+ :tags: bug, sql
+ :tickets: 3957
+
+ Fixed bug where a column-level :class:`.CheckConstraint` would fail
+ to compile the SQL expression using the underlying dialect compiler
+ as well as apply proper flags to generate literal values as
+ inline, in the case that the sqltext is a Core expression and
+ not just a plain string. This was long-ago fixed for table-level
+ check constraints in 0.9 as part of :ticket:`2742`, which more commonly
+ feature Core SQL expressions as opposed to plain string expressions.
+
.. change:: 3923
:tags: bug, sql
:tickets: 3923
formatted_name = self.preparer.format_constraint(constraint)
if formatted_name is not None:
text += "CONSTRAINT %s " % formatted_name
- text += "CHECK (%s)" % constraint.sqltext
+ text += "CHECK (%s)" % self.sql_compiler.process(constraint.sqltext,
+ include_table=False,
+ literal_binds=True)
text += self.define_constraint_deferrability(constraint)
return text
"ALTER TABLE tbl ADD CHECK (a > 5)"
)
+ def test_render_check_constraint_inline_sql_literal(self):
+ t, t2 = self._constraint_create_fixture()
+
+ m = MetaData()
+ t = Table(
+ 't', m,
+ Column('a', Integer, CheckConstraint(Column('a', Integer) > 5)))
+
+ self.assert_compile(
+ schema.CreateColumn(t.c.a),
+ "a INTEGER CHECK (a > 5)"
+ )
+
def test_render_index_sql_literal(self):
t, t2 = self._constraint_create_fixture()