]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- fixed generation of CHECK constraints on columns [ticket:464]
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 17 Feb 2007 03:46:13 +0000 (03:46 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 17 Feb 2007 03:46:13 +0000 (03:46 +0000)
CHANGES
lib/sqlalchemy/ansisql.py
lib/sqlalchemy/schema.py
test/sql/constraints.py

diff --git a/CHANGES b/CHANGES
index 24f0f95e60371ef8006cf12cac785fb8cc0e4e1a..612597f1157d86c7501622ce9f94657d71cff2db 100644 (file)
--- 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,
index 6cb57e1489744ef574fb23baae317d411b466343..6471407918e7e76d8adf8902bcf62336724d38be 100644 (file)
@@ -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:
index 323d30da5cd768c41ce6d6be7953ee9af0385f15..d0863800b95bb4e45e8a32495d1e89516158c286 100644 (file)
@@ -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')
 
index 886baef0cc27c617243c6cfdc3bd8004055178c7..926022c82d1c81d4ba8442a93d54761f4ed351e9 100644 (file)
@@ -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()