From: Mike Bayer Date: Wed, 20 Jun 2007 21:17:28 +0000 (+0000) Subject: fixed outerjoin() to use correct start point X-Git-Tag: rel_0_4_6~190 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6793bbd079e074083ac07efd1eb42d19fee5f07c;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git fixed outerjoin() to use correct start point --- 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')