summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/util.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-01-23 15:16:43 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-01-23 15:16:43 +0000
commit74a128c6867ef67623cc9d1de3bdfdc9b064f988 (patch)
tree78f9848b38d34eba7beb8b04fe7fcb7a1e762616 /lib/sqlalchemy/sql/util.py
parent47a8b6d10d150f8bb51a977bb64ad7c8cb1a5c1f (diff)
downloadsqlalchemy-74a128c6867ef67623cc9d1de3bdfdc9b064f988.tar.gz
more capability added to reduce_columns
Diffstat (limited to 'lib/sqlalchemy/sql/util.py')
-rw-r--r--lib/sqlalchemy/sql/util.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py
index cecea51d3..2cd0a26fd 100644
--- a/lib/sqlalchemy/sql/util.py
+++ b/lib/sqlalchemy/sql/util.py
@@ -81,9 +81,13 @@ def reduce_columns(columns, *clauses):
if clauses:
def visit_binary(binary):
- cols = columns.difference(omit)
- if binary.operator == operators.eq and binary.left in cols and binary.right in cols:
- omit.add(binary.right)
+ if binary.operator == operators.eq:
+ cols = util.Set(chain(*[c.proxy_set for c in columns.difference(omit)]))
+ if binary.left in cols and binary.right in cols:
+ for c in columns:
+ if c.shares_lineage(binary.right):
+ omit.add(c)
+ break
for clause in clauses:
visitors.traverse(clause, visit_binary=visit_binary)