def _join_fixture_m2m(self, **kw):
     return relationships.JoinCondition(self.m2mleft,
                                        self.m2mright,
                                        self.m2mleft,
                                        self.m2mright,
                                        secondary=self.m2msecondary,
                                        **kw)
    def _join_fixture_inh_selfref_w_entity(self, **kw):
        fake_logger = mock.Mock(info=lambda *arg, **kw: None)
        prop = mock.Mock(parent=mock.Mock(),
                         mapper=mock.Mock(),
                         logger=fake_logger)
        local_selectable = self.base.join(self.sub)
        remote_selectable = self.base.join(self.sub_w_sub_rel)

        # note this test requires that "parentmapper" annotation is
        # present in the columns ahead of time

        sub_w_sub_rel__sub_id = self.sub_w_sub_rel.c.sub_id._annotate(
            {"parentmapper": prop.mapper})
        sub__id = self.sub.c.id._annotate({"parentmapper": prop.parent})
        sub_w_sub_rel__flag = self.base.c.flag._annotate(
            {"parentmapper": prop.mapper})
        return relationships.JoinCondition(
            local_selectable,
            remote_selectable,
            local_selectable,
            remote_selectable,
            primaryjoin=and_(
                sub_w_sub_rel__sub_id == sub__id,
                sub_w_sub_rel__flag == True,  # noqa
            ),
            prop=prop,
        )
 def _join_fixture_o2m_to_annotated_func(self, **kw):
     return relationships.JoinCondition(
         self.left,
         self.right,
         self.left,
         self.right,
         primaryjoin=self.left.c.id == foreign(func.foo(self.right.c.lid)),
         **kw)
 def _join_fixture_m2o_selfref(self, **kw):
     return relationships.JoinCondition(self.selfref,
                                        self.selfref,
                                        self.selfref,
                                        self.selfref,
                                        remote_side=set([self.selfref.c.id
                                                         ]),
                                        **kw)
 def _join_fixture_o2m_to_oldstyle_func(self, **kw):
     return relationships.JoinCondition(
         self.left,
         self.right,
         self.left,
         self.right,
         primaryjoin=self.left.c.id == func.foo(self.right.c.lid),
         consider_as_foreign_keys=[self.right.c.lid],
         **kw)
 def _join_fixture_o2m_o_side_none(self, **kw):
     return relationships.JoinCondition(
         self.left,
         self.right,
         self.left,
         self.right,
         primaryjoin=and_(self.left.c.id == self.right.c.lid,
                          self.left.c.x == 5),
         **kw)
 def _join_fixture_compound_expression_1_non_annotated(self, **kw):
     return relationships.JoinCondition(
         self.left,
         self.right,
         self.left,
         self.right,
         primaryjoin=(self.left.c.x + self.left.c.y) == (self.right.c.x *
                                                         self.right.c.y),
         **kw)
 def _join_fixture_o2m_joined_sub_to_base(self, **kw):
     left = self.base.join(self.sub_w_base_rel,
                           self.base.c.id == self.sub_w_base_rel.c.id)
     return relationships.JoinCondition(
         left,
         self.base,
         self.sub_w_base_rel,
         self.base,
         primaryjoin=self.sub_w_base_rel.c.base_id == self.base.c.id,
     )
 def _join_fixture_purely_single_m2o(self, **kw):
     return relationships.JoinCondition(
         self.purely_single_col,
         self.purely_single_col,
         self.purely_single_col,
         self.purely_single_col,
         support_sync=False,
         primaryjoin=remote(self.purely_single_col.c.path).like(
             foreign(self.purely_single_col.c.path.concat("%"))),
     )
 def _join_fixture_overlapping_composite_fks(self, **kw):
     return relationships.JoinCondition(self.composite_target,
                                        self.composite_multi_ref,
                                        self.composite_target,
                                        self.composite_multi_ref,
                                        consider_as_foreign_keys=[
                                            self.composite_multi_ref.c.uid2,
                                            self.composite_multi_ref.c.oid,
                                        ],
                                        **kw)
 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,
                            self.base.c.id == self.right_w_base_rel.c.id)
     return relationships.JoinCondition(
         self.right_w_base_rel,
         right,
         self.right_w_base_rel,
         self.right_w_base_rel,
     )
 def _join_fixture_compound_expression_2(self, **kw):
     return relationships.JoinCondition(
         self.left,
         self.right,
         self.left,
         self.right,
         primaryjoin=(self.left.c.x +
                      self.left.c.y) == relationships.foreign(
                          self.right.c.x * self.right.c.y),
         **kw)
 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_composite_selfref(self, **kw):
     return relationships.JoinCondition(
         self.composite_selfref,
         self.composite_selfref,
         self.composite_selfref,
         self.composite_selfref,
         remote_side=set([
             self.composite_selfref.c.id,
             self.composite_selfref.c.group_id,
         ]),
         **kw)
 def _join_fixture_fks_ambig_m2m(self):
     return relationships.JoinCondition(
         self.m2mleft,
         self.m2mright,
         self.m2mleft,
         self.m2mright,
         secondary=self.m2msecondary_ambig_fks,
         consider_as_foreign_keys=[
             self.m2msecondary_ambig_fks.c.lid1,
             self.m2msecondary_ambig_fks.c.rid1,
         ],
     )
 def _join_fixture_base_to_joined_sub(self, **kw):
     # see test/orm/inheritance/test_abc_inheritance:TestaTobM2O
     # and others there
     right = self.base_w_sub_rel.join(
         self.rel_sub, self.base_w_sub_rel.c.id == self.rel_sub.c.id)
     return relationships.JoinCondition(
         self.base_w_sub_rel,
         right,
         self.base_w_sub_rel,
         self.rel_sub,
         primaryjoin=self.base_w_sub_rel.c.sub_id == self.rel_sub.c.id,
         **kw)
 def _join_fixture_o2m_composite_selfref_func_annotated(self, **kw):
     return relationships.JoinCondition(
         self.composite_selfref,
         self.composite_selfref,
         self.composite_selfref,
         self.composite_selfref,
         primaryjoin=and_(
             remote(self.composite_selfref.c.group_id) == func.foo(
                 self.composite_selfref.c.group_id),
             remote(self.composite_selfref.c.parent_id) ==
             self.composite_selfref.c.id,
         ),
         **kw)
 def _join_fixture_m2o_joined_sub_to_sub_on_base(self, **kw):
     # this is a late add - a variant of the test case
     # in #2491 where we join on the base cols instead.  only
     # m2o has a problem at the time of this test.
     left = self.base.join(self.sub, self.base.c.id == self.sub.c.id)
     right = self.base.join(self.sub_w_base_rel,
                            self.base.c.id == self.sub_w_base_rel.c.id)
     return relationships.JoinCondition(
         left,
         right,
         self.sub,
         self.sub_w_base_rel,
         primaryjoin=self.sub_w_base_rel.c.base_id == self.base.c.id,
     )
    def _join_fixture_remote_local_multiple_ref(self, **kw):
        def fn(a, b):
            return (a == b) | (b == a)

        return relationships.JoinCondition(
            self.selfref,
            self.selfref,
            self.selfref,
            self.selfref,
            support_sync=False,
            primaryjoin=fn(
                # we're putting a do-nothing annotation on
                # "a" so that the left/right is preserved;
                # annotation vs. non seems to affect __eq__ behavior
                self.selfref.c.sid._annotate({"foo": "bar"}),
                foreign(remote(self.selfref.c.sid)),
            ),
        )
    def _join_fixture_m2m_backref(self, **kw):
        """return JoinCondition in the same way RelationshipProperty
        calls it for a backref on an m2m.

        """
        j1 = self._join_fixture_m2m()
        return (
            j1,
            relationships.JoinCondition(
                self.m2mright,
                self.m2mleft,
                self.m2mright,
                self.m2mleft,
                secondary=self.m2msecondary,
                primaryjoin=j1.secondaryjoin_minus_local,
                secondaryjoin=j1.primaryjoin_minus_local,
            ),
        )
    def _join_fixture_overlapping_three_tables(self, **kw):
        def _can_sync(*cols):
            for c in cols:
                if self.three_tab_c.c.contains_column(c):
                    return False
            else:
                return True

        return relationships.JoinCondition(
            self.three_tab_a,
            self.three_tab_b,
            self.three_tab_a,
            self.three_tab_b,
            support_sync=False,
            can_be_synced_fn=_can_sync,
            primaryjoin=and_(
                self.three_tab_a.c.id == self.three_tab_b.c.aid,
                self.three_tab_c.c.bid == self.three_tab_b.c.id,
                self.three_tab_c.c.aid == self.three_tab_a.c.id,
            ),
        )
 def _join_fixture_m2o(self, **kw):
     return relationships.JoinCondition(self.right, self.left, self.right,
                                        self.left, **kw)
 def _join_fixture_o2m_composite_selfref(self, **kw):
     return relationships.JoinCondition(self.composite_selfref,
                                        self.composite_selfref,
                                        self.composite_selfref,
                                        self.composite_selfref, **kw)
    def _join_fixture_o2o_joined_sub_to_base(self, **kw):
        left = self.base.join(self.sub, self.base.c.id == self.sub.c.id)

        # see test_relationships->AmbiguousJoinInterpretedAsSelfRef
        return relationships.JoinCondition(left, self.sub, left, self.sub)