summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-03-07 18:05:39 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-03-07 18:05:39 +0000
commit46b82976bf8651500de6e1c4ccf8c20d535a14e9 (patch)
tree781f0cfbff5514a8ba758106f2fb1a4977d4029f /lib
parent231acabf72e092c8573a6a9b9a8e4acc20b79812 (diff)
downloadsqlalchemy-46b82976bf8651500de6e1c4ccf8c20d535a14e9.tar.gz
- fixed use_alter flag on ForeignKeyConstraint [ticket:503]
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/exceptions.py4
-rw-r--r--lib/sqlalchemy/schema.py4
-rw-r--r--lib/sqlalchemy/topological.py6
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)