diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-04-25 13:54:40 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-04-25 13:54:40 -0400 |
commit | 6f05aa06bfde7a9aa1437fa542232bf05ff13df2 (patch) | |
tree | de79cb1b694625174a4ab8935ffaff3186c6fc01 /lib/sqlalchemy/sql | |
parent | 637232709770de034caf67c9ece6121c83c43681 (diff) | |
download | sqlalchemy-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.py | 16 | ||||
-rw-r--r-- | lib/sqlalchemy/sql/util.py | 2 |
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)) |