summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-02-17 03:46:13 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-02-17 03:46:13 +0000
commitb5bb6bb06d33b03c9af61eb869aab84b2a99a792 (patch)
tree57d648afa77e52870de7b17569b5dbe050eda37a
parentf4b1484ff570125ba511ed931e8e5e53d53f4866 (diff)
downloadsqlalchemy-b5bb6bb06d33b03c9af61eb869aab84b2a99a792.tar.gz
- fixed generation of CHECK constraints on columns [ticket:464]
-rw-r--r--CHANGES1
-rw-r--r--lib/sqlalchemy/ansisql.py4
-rw-r--r--lib/sqlalchemy/schema.py7
-rw-r--r--test/sql/constraints.py3
4 files changed, 13 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 24f0f95e6..612597f11 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 6cb57e148..647140791 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 323d30da5..d0863800b 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 886baef0c..926022c82 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()