summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-03-31 13:52:57 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2010-03-31 13:52:57 -0400
commit1258d1ed9e8064e08fd77d2dc3938fcebc130800 (patch)
tree506d5cbe32dd9efa1ae099e55d9124896ea94f7d
parent5c758932a512e281308d2e1c147e18ed4eddc6b0 (diff)
downloadsqlalchemy-1258d1ed9e8064e08fd77d2dc3938fcebc130800.tar.gz
- 'cycle' is a stack here - needs to be a list.
-rw-r--r--CHANGES4
-rw-r--r--lib/sqlalchemy/topological.py4
2 files changed, 6 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index cc3d9b619..39bba20bb 100644
--- a/CHANGES
+++ b/CHANGES
@@ -27,6 +27,10 @@ CHANGES
"delete-orphan", or will simply detach it otherwise.
[ticket:1754]
+ - Fixed a potential issue in topological cycle detection
+ introduced in 0.6beta3, for units of work with long
+ dependency cycles.
+
- sql
- Restored some bind-labeling logic from 0.5 which ensures
that tables with column names that overlap another column
diff --git a/lib/sqlalchemy/topological.py b/lib/sqlalchemy/topological.py
index d35213f6b..9e584ff4e 100644
--- a/lib/sqlalchemy/topological.py
+++ b/lib/sqlalchemy/topological.py
@@ -270,7 +270,7 @@ def _find_cycles(edges):
for (n, key) in edges.edges_by_parent(node):
if key in cycle:
continue
- cycle.add(key)
+ cycle.append(key)
if key is goal:
cycset = set(cycle)
for x in cycle:
@@ -287,7 +287,7 @@ def _find_cycles(edges):
cycle.pop()
for parent in edges.get_parents():
- traverse(parent, set(), parent)
+ traverse(parent, [], parent)
unique_cycles = set(tuple(s) for s in cycles.values())