summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/relationships.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-04-12 13:45:08 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2015-04-12 13:45:08 -0400
commit35a488ae5f4127b4bc2b4e5bfc388749e222a4e4 (patch)
tree7f9dfd6a1ea3d764e929ea6acb046c13dca02539 /lib/sqlalchemy/orm/relationships.py
parentfc702c9d809878c5a5d85876bfa23e17177940c2 (diff)
downloadsqlalchemy-35a488ae5f4127b4bc2b4e5bfc388749e222a4e4.tar.gz
- Made a small improvement to the heuristics of relationship when
determining remote side with semi-self-referential (e.g. two joined inh subclasses referring to each other), non-simple join conditions such that the parententity is taken into account and can reduce the need for using the ``remote()`` annotation; this can restore some cases that might have worked without the annotation prior to 0.9.4 via :ticket:`2948`. fixes #3364
Diffstat (limited to 'lib/sqlalchemy/orm/relationships.py')
-rw-r--r--lib/sqlalchemy/orm/relationships.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/sqlalchemy/orm/relationships.py b/lib/sqlalchemy/orm/relationships.py
index e36a644da..b649c9e21 100644
--- a/lib/sqlalchemy/orm/relationships.py
+++ b/lib/sqlalchemy/orm/relationships.py
@@ -2329,12 +2329,21 @@ class JoinCondition(object):
binary.right, binary.left = proc_left_right(binary.right,
binary.left)
+ check_entities = self.prop is not None and \
+ self.prop.mapper is not self.prop.parent
+
def proc_left_right(left, right):
if isinstance(left, expression.ColumnClause) and \
isinstance(right, expression.ColumnClause):
if self.child_selectable.c.contains_column(right) and \
self.parent_selectable.c.contains_column(left):
right = right._annotate({"remote": True})
+ elif check_entities and \
+ right._annotations.get('parentmapper') is self.prop.mapper:
+ right = right._annotate({"remote": True})
+ elif check_entities and \
+ left._annotations.get('parentmapper') is self.prop.mapper:
+ left = left._annotate({"remote": True})
else:
self._warn_non_column_elements()