oracle 8 / non-ansi joins needs to apply (+) to all occurences of the right hand table
Issue #4076
resolved
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"
from sqlalchemy import and_ from sqlalchemy import table, column from sqlalchemy import select from sqlalchemy.dialects import oracle a = table('a', column('x'), column('y')) b = table('b', column('q'), column('p')) stmt = select([a]).select_from(a.outerjoin(b, and_(a.c.x > b.c.q, b.c.p == None))) print stmt.compile(dialect=oracle.dialect(use_ansi=False))
SELECT a.x, a.y FROM a, b WHERE a.x > b.q AND b.p IS NULL
Comments (2)
-
reporter -
reporter - changed status to resolved
Ensure (+) is rendered for all right-hand members
Fixed bug where Oracle 8 "non ansi" join mode would not add the
(+)
operator to expressions that used an operator other than the=
operator. The(+)
needs to be on all columns that are part of the right-hand side.Change-Id: I952e2369f11b78f5b918456ae3a5b0768d9761ec Fixes:
#4076→ <<cset 01ed5c4009ce>>
- Log in to comment
https://gerrit.sqlalchemy.org/517