From b5bb6bb06d33b03c9af61eb869aab84b2a99a792 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 17 Feb 2007 03:46:13 +0000 Subject: [PATCH] - fixed generation of CHECK constraints on columns [ticket:464] --- CHANGES | 1 + lib/sqlalchemy/ansisql.py | 4 ++++ lib/sqlalchemy/schema.py | 7 ++++++- test/sql/constraints.py | 3 ++- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 24f0f95e60..612597f115 100644 --- a/CHANGES +++ b/CHANGES @@ -13,6 +13,7 @@ for named args, or a list of list or dicts to invoke executemany() - small fix to BoundMetaData to accept unicode or string URLs - fixed named PrimaryKeyConstraint generation [ticket:466] courtesy andrija at gmail + - fixed generation of CHECK constraints on columns [ticket:464] - orm: - another refactoring to relationship calculation. Allows more accurate ORM behavior with relationships from/to/between mappers, particularly polymorphic mappers, diff --git a/lib/sqlalchemy/ansisql.py b/lib/sqlalchemy/ansisql.py index 6cb57e1489..6471407918 100644 --- a/lib/sqlalchemy/ansisql.py +++ b/lib/sqlalchemy/ansisql.py @@ -742,6 +742,10 @@ class ANSISchemaGenerator(ANSISchemaBase): if constraint.name is not None: self.append("CONSTRAINT %s " % constraint.name) self.append(" CHECK (%s)" % constraint.sqltext) + + def visit_column_check_constraint(self, constraint): + self.append(" ") + self.append(" CHECK (%s)" % constraint.sqltext) def visit_primary_key_constraint(self, constraint): if len(constraint) == 0: diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 323d30da5c..d0863800b9 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -705,7 +705,10 @@ class CheckConstraint(Constraint): super(CheckConstraint, self).__init__(name) self.sqltext = sqltext def accept_schema_visitor(self, visitor, traverse=True): - visitor.visit_check_constraint(self) + if isinstance(self.parent, Table): + visitor.visit_check_constraint(self) + else: + visitor.visit_column_check_constraint(self) def _set_parent(self, parent): self.parent = parent parent.constraints.add(self) @@ -993,6 +996,8 @@ class SchemaVisitor(sql.ClauseVisitor): pass def visit_check_constraint(self, constraint): pass + def visit_column_check_constraint(self, constraint): + pass default_metadata = DynamicMetaData('default') diff --git a/test/sql/constraints.py b/test/sql/constraints.py index 886baef0cc..926022c82d 100644 --- a/test/sql/constraints.py +++ b/test/sql/constraints.py @@ -28,7 +28,7 @@ class ConstraintTest(testbase.AssertMixin): ) metadata.create_all() - @testbase.unsupported('sqlite', 'mysql') + @testbase.unsupported('mysql') def test_check_constraint(self): foo = Table('foo', metadata, Column('id', Integer, primary_key=True), @@ -38,6 +38,7 @@ class ConstraintTest(testbase.AssertMixin): bar = Table('bar', metadata, Column('id', Integer, primary_key=True), Column('x', Integer, CheckConstraint('x>7')), + Column('z', Integer) ) metadata.create_all() -- 2.47.2