]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
add a test for r2491
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 23 May 2012 16:23:56 +0000 (12:23 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 23 May 2012 16:23:56 +0000 (12:23 -0400)
test/orm/test_rel_fn.py

index e35dd925a610b239e26e4d5a3c198d761dc250cd..c00a903fa91316622772e05c0f949c1086bb6eaf 100644 (file)
@@ -81,6 +81,11 @@ class _JoinFixtures(object):
                                 primary_key=True),
             Column('base_id', Integer, ForeignKey('base.id'))
         )
+        cls.sub_w_sub_rel = Table('sub_w_sub_rel', m, 
+            Column('id', Integer, ForeignKey('base.id'), 
+                                primary_key=True),
+            Column('sub_id', Integer, ForeignKey('sub.id'))
+        )
         cls.right_w_base_rel = Table('right_w_base_rel', m,
             Column('id', Integer, primary_key=True),
             Column('base_id', Integer, ForeignKey('base.id'))
@@ -283,6 +288,17 @@ class _JoinFixtures(object):
             primaryjoin=self.sub_w_base_rel.c.base_id==self.base.c.id
         )
 
+    def _join_fixture_o2m_joined_sub_to_sub(self, **kw):
+        left = self.base.join(self.sub, self.base.c.id==self.sub.c.id)
+        right = self.base.join(self.sub_w_sub_rel, self.base.c.id==self.sub_w_sub_rel.c.id)
+        return relationships.JoinCondition(
+            left,
+            right,
+            self.sub,
+            self.sub_w_sub_rel,
+            primaryjoin=self.sub.c.id==self.sub_w_sub_rel.c.sub_id
+        )
+
     def _join_fixture_m2o_sub_to_joined_sub(self, **kw):
         # see test.orm.test_mapper:MapperTest.test_add_column_prop_deannotate,
         right = self.base.join(self.right_w_base_rel, 
@@ -484,6 +500,26 @@ class ColumnCollectionsTest(_JoinFixtures, fixtures.TestBase, AssertsCompiledSQL
             ]
         )
 
+    def test_determine_remote_columns_o2m_joined_sub_to_sub(self):
+        def _join_fixture_o2m_joined_sub_to_sub(self, **kw):
+            left = self.base.join(self.sub, self.base.c.id==self.sub.c.id)
+            right = self.base.join(self.sub_w_sub_rel, self.base.c.id==self.sub_w_sub_rel.c.id)
+            return relationships.JoinCondition(
+                left,
+                right,
+                self.sub,
+                self.sub_w_sub_rel,
+                primaryjoin=self.sub.c.id==self.sub_w_sub_rel.c.sub_id
+            )
+
+        joincond = self._join_fixture_o2m_joined_sub_to_sub()
+        eq_(
+            joincond.local_remote_pairs,
+            [
+                (self.sub.c.id, self.sub_w_sub_rel.c.sub_id)
+            ]
+        )
+
     def test_determine_remote_columns_compound_1(self):
         joincond = self._join_fixture_compound_expression_1(
                                 support_sync=False)