[Sqlalchemy-tickets] Issue #3957: incorrect rendering of sqltext for column-level check constraint
Brought to you by:
zzzeek
From: Michael B. <iss...@bi...> - 2017-04-04 13:48:42
|
New issue 3957: incorrect rendering of sqltext for column-level check constraint https://bitbucket.org/zzzeek/sqlalchemy/issues/3957/incorrect-rendering-of-sqltext-for-column Michael Bayer: ``` #!python from sqlalchemy import * from sqlalchemy.sql.expression import ColumnClause class CodenameConstraint(CheckConstraint): """Check that the column uses a limited alphabet.""" def __init__(self, column_name): column = ColumnClause(column_name) super(CodenameConstraint, self).__init__( column.op("~")("^[A-Za-z0-9_-]+$")) m = MetaData() t = Table( 't', m, Column('x', String, CodenameConstraint('x')), ) from sqlalchemy.schema import CreateTable print CreateTable(t) ``` a string compiler is being invoked separately, needs this: ``` #!diff diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 4415028..b18f903 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -2602,7 +2602,9 @@ class DDLCompiler(Compiled): 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 ``` been this way for years so 1.2 to allow for any surprises. |