summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-04-25 13:54:40 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-04-25 13:54:40 -0400
commit6f05aa06bfde7a9aa1437fa542232bf05ff13df2 (patch)
treede79cb1b694625174a4ab8935ffaff3186c6fc01 /lib/sqlalchemy/sql
parent637232709770de034caf67c9ece6121c83c43681 (diff)
downloadsqlalchemy-6f05aa06bfde7a9aa1437fa542232bf05ff13df2.tar.gz
everything passes with this!!!!!!! holy crap !!!!! and its the simplest of all
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r--lib/sqlalchemy/sql/expression.py16
-rw-r--r--lib/sqlalchemy/sql/util.py2
2 files changed, 15 insertions, 3 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
diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py
index 520c90f99..4aa2d7496 100644
--- a/lib/sqlalchemy/sql/util.py
+++ b/lib/sqlalchemy/sql/util.py
@@ -203,7 +203,7 @@ def clause_is_present(clause, search):
stack = [search]
while stack:
elem = stack.pop()
- if clause is elem:
+ if clause == elem: # use == here so that Annotated's compare
return True
elif isinstance(elem, expression.Join):
stack.extend((elem.left, elem.right))