diff options
Diffstat (limited to 'lib/sqlalchemy/orm/strategies.py')
| -rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index 2caee2dd4..7911b93c8 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -407,21 +407,11 @@ class LazyLoader(AbstractRelationLoader): else: return othercol in remote_side - def find_column_in_expr(expr): - if not isinstance(expr, sql.ColumnElement): - return None - columns = [] - class FindColumnInColumnClause(visitors.ClauseVisitor): - def visit_column(self, c): - columns.append(c) - FindColumnInColumnClause().traverse(expr) - return len(columns) and columns[0] or None - def visit_binary(binary): - leftcol = find_column_in_expr(binary.left) - rightcol = find_column_in_expr(binary.right) - if leftcol is None or rightcol is None: + if not isinstance(binary.left, sql.ColumnElement) or not isinstance(binary.right, sql.ColumnElement): return + leftcol = binary.left + rightcol = binary.right if should_bind(leftcol, rightcol): col = leftcol @@ -438,14 +428,13 @@ class LazyLoader(AbstractRelationLoader): reverse[leftcol] = binds[col] lazywhere = primaryjoin - li = mapperutil.BinaryVisitor(visit_binary) if not secondaryjoin or not reverse_direction: - lazywhere = li.traverse(lazywhere, clone=True) + lazywhere = visitors.traverse(lazywhere, clone=True, visit_binary=visit_binary) if secondaryjoin is not None: if reverse_direction: - secondaryjoin = li.traverse(secondaryjoin, clone=True) + secondaryjoin = visitors.traverse(secondaryjoin, clone=True, visit_binary=visit_binary) lazywhere = sql.and_(lazywhere, secondaryjoin) return (lazywhere, binds, reverse) _create_lazy_clause = classmethod(_create_lazy_clause) |
