From 6793bbd079e074083ac07efd1eb42d19fee5f07c Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 20 Jun 2007 21:17:28 +0000 Subject: [PATCH] fixed outerjoin() to use correct start point --- lib/sqlalchemy/orm/query.py | 2 +- test/orm/query.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 0eea06e841..16dd1eebaa 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -472,7 +472,7 @@ class Query(object): by direct traversal of each keyname (i.e. like join_via()). """ q = self._clone() - (clause, mapper) = self._join_to(prop, outerjoin=True) + (clause, mapper) = self._join_to(prop, outerjoin=True, start=self.mapper) q._from_obj = [clause] q._joinpoint = mapper return q diff --git a/test/orm/query.py b/test/orm/query.py index 2194565a14..f3e7914966 100644 --- a/test/orm/query.py +++ b/test/orm/query.py @@ -212,6 +212,10 @@ class JoinTest(QueryTest): # load a user who has an order that contains item id 3 and address id 1 (order 3, owned by jack) result = create_session().query(User).join(['orders', 'items']).filter_by(id=3).join(['orders','address']).filter_by(id=1).all() assert [User(id=7, name='jack')] == result + + def test_overlapping_paths_outerjoin(self): + result = create_session().query(User).outerjoin(['orders', 'items']).filter_by(id=3).outerjoin(['orders','address']).filter_by(id=1).all() + assert [User(id=7, name='jack')] == result def test_overlap_with_aliases(self): oalias = orders.alias('oalias') -- 2.47.3