summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-06-08 18:54:14 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-06-08 18:54:14 -0400
commit85368d25ed158c85bd19f4a63400884ab1cda26a (patch)
treefd202eb23d060f3e10489e46b0689cdcfbec69e3 /lib/sqlalchemy/dialects
parent31063d16f209beea9d19a2dfbec8e7fdc79cc99b (diff)
downloadsqlalchemy-85368d25ed158c85bd19f4a63400884ab1cda26a.tar.gz
get nested joins to render on oracle 8
Diffstat (limited to 'lib/sqlalchemy/dialects')
-rw-r--r--lib/sqlalchemy/dialects/oracle/base.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py
index 6b6c32ae0..a302bf401 100644
--- a/lib/sqlalchemy/dialects/oracle/base.py
+++ b/lib/sqlalchemy/dialects/oracle/base.py
@@ -460,8 +460,13 @@ class OracleCompiler(compiler.SQLCompiler):
return compiler.SQLCompiler.visit_join(self, join, **kwargs)
else:
kwargs['asfrom'] = True
+ if isinstance(join.right, expression.FromGrouping):
+ right = join.right.element
+ else:
+ right = join.right
return self.process(join.left, **kwargs) + \
- ", " + self.process(join.right, **kwargs)
+ ", " + self.process(right, **kwargs)
+
def _get_nonansi_join_whereclause(self, froms):
clauses = []
@@ -470,9 +475,9 @@ class OracleCompiler(compiler.SQLCompiler):
if join.isouter:
def visit_binary(binary):
if binary.operator == sql_operators.eq:
- if binary.left.table is join.right:
+ if join.right.is_derived_from(binary.left.table):
binary.left = _OuterJoinColumn(binary.left)
- elif binary.right.table is join.right:
+ elif join.right.is_derived_from(binary.right.table):
binary.right = _OuterJoinColumn(binary.right)
clauses.append(visitors.cloned_traverse(join.onclause, {},
{'binary': visit_binary}))
@@ -482,6 +487,8 @@ class OracleCompiler(compiler.SQLCompiler):
for j in join.left, join.right:
if isinstance(j, expression.Join):
visit_join(j)
+ elif isinstance(j, expression.FromGrouping):
+ visit_join(j.element)
for f in froms:
if isinstance(f, expression.Join):