summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2017-09-13 15:50:42 -0400
committerGerrit Code Review <gerrit@awstats.zzzcomputing.com>2017-09-13 15:50:42 -0400
commitd0c46d9ae53f2e6d1863633b5fb0a7d2328180cc (patch)
tree7f0f2c7ccf3409b649f5ed09c1dc95d4a9c38c06 /lib
parent70516536107a44230762206342c51239c5d85417 (diff)
parent01ed5c4009ce77876345107b3f8385caa93edf84 (diff)
downloadsqlalchemy-d0c46d9ae53f2e6d1863633b5fb0a7d2328180cc.tar.gz
Merge "Ensure (+) is rendered for all right-hand members"
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/dialects/oracle/base.py15
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py
index b2eb44b5b..dbef1200a 100644
--- a/lib/sqlalchemy/dialects/oracle/base.py
+++ b/lib/sqlalchemy/dialects/oracle/base.py
@@ -733,12 +733,17 @@ class OracleCompiler(compiler.SQLCompiler):
def visit_join(join):
if join.isouter:
+ # https://docs.oracle.com/database/121/SQLRF/queries006.htm#SQLRF52354
+ # "apply the outer join operator (+) to all columns of B in
+ # the join condition in the WHERE clause" - that is,
+ # unconditionally regardless of operator or the other side
def visit_binary(binary):
- if binary.operator == sql_operators.eq:
- if join.right.is_derived_from(binary.left.table):
- binary.left = _OuterJoinColumn(binary.left)
- elif join.right.is_derived_from(binary.right.table):
- binary.right = _OuterJoinColumn(binary.right)
+ if isinstance(binary.left, expression.ColumnClause) \
+ and join.right.is_derived_from(binary.left.table):
+ binary.left = _OuterJoinColumn(binary.left)
+ elif isinstance(binary.right, expression.ColumnClause) \
+ and join.right.is_derived_from(binary.right.table):
+ binary.right = _OuterJoinColumn(binary.right)
clauses.append(visitors.cloned_traverse(
join.onclause, {}, {'binary': visit_binary}))
else: