]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
fixed outerjoin() to use correct start point
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 20 Jun 2007 21:17:28 +0000 (21:17 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 20 Jun 2007 21:17:28 +0000 (21:17 +0000)
lib/sqlalchemy/orm/query.py
test/orm/query.py

index 0eea06e841a5a8f44cb1e2433a893287e6cad297..16dd1eebaa53b3c4ebb345c64623825ef5a91c59 100644 (file)
@@ -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
index 2194565a14382aa71f779f52ed9ddbcdffdaf0bf..f3e7914966cdde22bd58cced3b30e06071d20fa0 100644 (file)
@@ -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')