.. changelog::
:version: 0.9.8
+ .. change::
+ :tags: bug, orm
+ :versions: 1.0.0
+ :tickets: 3194
+
+ Fixed warning that would emit when a complex self-referential
+ primaryjoin contained functions, while at the same time remote_side
+ was specified; the warning would suggest setting "remote side".
+ It now only emits if remote_side isn't present.
+
.. change::
:tags: bug, ext
- :verions: 1.0.0
+ :versions: 1.0.0
:tickets: 3191
Fixed bug in ordering list where the order of items would be
elif self._local_remote_pairs or self._remote_side:
self._annotate_remote_from_args()
elif self._refers_to_parent_table():
- self._annotate_selfref(lambda col: "foreign" in col._annotations)
+ self._annotate_selfref(lambda col: "foreign" in col._annotations, False)
elif self._tables_overlap():
self._annotate_remote_with_overlap()
else:
self.secondaryjoin = visitors.replacement_traverse(
self.secondaryjoin, {}, repl)
- def _annotate_selfref(self, fn):
+ def _annotate_selfref(self, fn, remote_side_given):
"""annotate 'remote' in primaryjoin, secondaryjoin
when the relationship is detected as self-referential.
if fn(binary.right) and not equated:
binary.right = binary.right._annotate(
{"remote": True})
- else:
+ elif not remote_side_given:
self._warn_non_column_elements()
self.primaryjoin = visitors.cloned_traverse(
remote_side = self._remote_side
if self._refers_to_parent_table():
- self._annotate_selfref(lambda col: col in remote_side)
+ self._annotate_selfref(lambda col: col in remote_side, True)
else:
def repl(element):
if element in remote_side:
**kw
)
+ def _join_fixture_o2m_composite_selfref_func_remote_side(self, **kw):
+ return relationships.JoinCondition(
+ self.composite_selfref,
+ self.composite_selfref,
+ self.composite_selfref,
+ self.composite_selfref,
+ primaryjoin=and_(
+ self.composite_selfref.c.group_id ==
+ func.foo(self.composite_selfref.c.group_id),
+ self.composite_selfref.c.parent_id ==
+ self.composite_selfref.c.id
+ ),
+ remote_side=set([self.composite_selfref.c.parent_id]),
+ **kw
+ )
+
def _join_fixture_o2m_composite_selfref_func_annotated(self, **kw):
return relationships.JoinCondition(
self.composite_selfref,
self._join_fixture_o2m_composite_selfref_func
)
+ def test_determine_local_remote_pairs_o2m_composite_selfref_func_rs(self):
+ # no warning
+ self._join_fixture_o2m_composite_selfref_func_remote_side()
+
def test_determine_local_remote_pairs_o2m_overlap_func_warning(self):
self._assert_non_simple_warning(
self._join_fixture_m2o_sub_to_joined_sub_func