diff options
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/util.py | 9 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/util.py | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py index 7ac3ac96a..fb6471ac6 100644 --- a/lib/sqlalchemy/orm/util.py +++ b/lib/sqlalchemy/orm/util.py @@ -918,8 +918,13 @@ class _ORMJoin(expression.Join): of_type=right_info.mapper) if sj is not None: - left = sql.join(left, secondary, pj, isouter) - onclause = sj + if isouter: + # note this is an inner join from secondary->right + right = sql.join(secondary, right, sj) + onclause = pj + else: + left = sql.join(left, secondary, pj, isouter) + onclause = sj else: onclause = pj self._target_adapter = target_adapter diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py index 4422705cd..bf3f3397e 100644 --- a/lib/sqlalchemy/sql/util.py +++ b/lib/sqlalchemy/sql/util.py @@ -213,6 +213,8 @@ def surface_selectables(clause): yield elem if isinstance(elem, expression.Join): stack.extend((elem.left, elem.right)) + elif isinstance(elem, expression.FromGrouping): + stack.append(elem.element) def selectables_overlap(left, right): """Return True if left/right have some overlapping selectable""" |
