diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-03-07 18:05:39 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-03-07 18:05:39 +0000 |
| commit | 46b82976bf8651500de6e1c4ccf8c20d535a14e9 (patch) | |
| tree | 781f0cfbff5514a8ba758106f2fb1a4977d4029f /lib | |
| parent | 231acabf72e092c8573a6a9b9a8e4acc20b79812 (diff) | |
| download | sqlalchemy-46b82976bf8651500de6e1c4ccf8c20d535a14e9.tar.gz | |
- fixed use_alter flag on ForeignKeyConstraint [ticket:503]
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqlalchemy/exceptions.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/schema.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/topological.py | 6 |
3 files changed, 9 insertions, 5 deletions
diff --git a/lib/sqlalchemy/exceptions.py b/lib/sqlalchemy/exceptions.py index 08908cdb6..55c345bd7 100644 --- a/lib/sqlalchemy/exceptions.py +++ b/lib/sqlalchemy/exceptions.py @@ -49,6 +49,10 @@ class ConcurrentModificationError(SQLAlchemyError): pass +class CircularDependencyError(SQLAlchemyError): + """Raised by topological sorts when a circular dependency is detected""" + pass + class FlushError(SQLAlchemyError): """Raised when an invalid condition is detected upon a ``flush()``.""" pass diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index ae4a0b162..52324e63e 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -908,7 +908,7 @@ class ForeignKeyConstraint(Constraint): visitor.visit_foreign_key_constraint(self) def append_element(self, col, refcol): - fk = ForeignKey(refcol, constraint=self) + fk = ForeignKey(refcol, constraint=self, name=self.name, onupdate=self.onupdate, ondelete=self.ondelete, use_alter=self.use_alter) fk._set_parent(self.table.c[col]) self._append_fk(fk) @@ -917,7 +917,7 @@ class ForeignKeyConstraint(Constraint): self.elements.add(fk) def copy(self): - return ForeignKeyConstraint([x.parent.name for x in self.elements], [x._get_colspec() for x in self.elements], name=self.name, onupdate=self.onupdate, ondelete=self.ondelete) + return ForeignKeyConstraint([x.parent.name for x in self.elements], [x._get_colspec() for x in self.elements], name=self.name, onupdate=self.onupdate, ondelete=self.ondelete, use_alter=self.use_alter) class PrimaryKeyConstraint(Constraint): def __init__(self, *columns, **kwargs): diff --git a/lib/sqlalchemy/topological.py b/lib/sqlalchemy/topological.py index d9f68ac01..41fa9d9b2 100644 --- a/lib/sqlalchemy/topological.py +++ b/lib/sqlalchemy/topological.py @@ -44,7 +44,7 @@ I realized this characteristic of the algorithm. import string, StringIO from sqlalchemy import util -from sqlalchemy.exceptions import * +from sqlalchemy.exceptions import CircularDependencyError class _Node(object): """Represent each item in the sort. @@ -188,7 +188,7 @@ class QueueDependencySorter(object): n.cycles = util.Set([n]) continue else: - raise FlushError("Self-referential dependency detected " + repr(t)) + raise CircularDependencyError("Self-referential dependency detected " + repr(t)) childnode = nodes[t[1]] parentnode = nodes[t[0]] edges.add((parentnode, childnode)) @@ -222,7 +222,7 @@ class QueueDependencySorter(object): continue else: # long cycles not allowed - raise FlushError("Circular dependency detected " + repr(edges) + repr(queue)) + raise CircularDependencyError("Circular dependency detected " + repr(edges) + repr(queue)) node = queue.pop() if not hasattr(node, '_cyclical'): output.append(node) |
