summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/expression.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/sql/expression.py')
-rw-r--r--lib/sqlalchemy/sql/expression.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py
index d2e644ce2..92b8aea98 100644
--- a/lib/sqlalchemy/sql/expression.py
+++ b/lib/sqlalchemy/sql/expression.py
@@ -3909,8 +3909,14 @@ class Join(FromClause):
def is_derived_from(self, fromclause):
return fromclause is self or \
- self.left.is_derived_from(fromclause) or\
- self.right.is_derived_from(fromclause)
+ self.left.is_derived_from(fromclause) or \
+ self.right.is_derived_from(fromclause) or \
+ (
+ isinstance(fromclause, Join) and
+ self.left.is_derived_from(fromclause.left) and
+ self.right.is_derived_from(fromclause.right) and
+ self.onclause.compare(fromclause.onclause)
+ )
def self_group(self, against=None):
return FromGrouping(self)
@@ -3947,6 +3953,12 @@ class Join(FromClause):
def get_children(self, **kwargs):
return self.left, self.right, self.onclause
+ def compare(self, other):
+ return isinstance(other, Join) and \
+ self.left.compare(other.left) and \
+ self.right.compare(other.right) and \
+ self.onclause.compare(other.onclause)
+
def _match_primaries(self, left, right):
if isinstance(left, Join):
left_right = left.right