diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-01-23 15:16:43 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-01-23 15:16:43 +0000 |
commit | 74a128c6867ef67623cc9d1de3bdfdc9b064f988 (patch) | |
tree | 78f9848b38d34eba7beb8b04fe7fcb7a1e762616 /lib/sqlalchemy/sql/util.py | |
parent | 47a8b6d10d150f8bb51a977bb64ad7c8cb1a5c1f (diff) | |
download | sqlalchemy-74a128c6867ef67623cc9d1de3bdfdc9b064f988.tar.gz |
more capability added to reduce_columns
Diffstat (limited to 'lib/sqlalchemy/sql/util.py')
-rw-r--r-- | lib/sqlalchemy/sql/util.py | 10 |
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) |