summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/ansisql.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-08-12 22:01:30 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-08-12 22:01:30 +0000
commit6e477b750eb432e91f933abae3aff3cb58b27362 (patch)
treeaeab7803228343be9ef2326f8c581f7e35aa6acd /lib/sqlalchemy/ansisql.py
parent6b6443f82c98db6511b873828d2c3f396aef6c67 (diff)
downloadsqlalchemy-6e477b750eb432e91f933abae3aff3cb58b27362.tar.gz
- got is_subquery() working in the case of compound selects, test for ms-sql
Diffstat (limited to 'lib/sqlalchemy/ansisql.py')
-rw-r--r--lib/sqlalchemy/ansisql.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/lib/sqlalchemy/ansisql.py b/lib/sqlalchemy/ansisql.py
index 8c7e6bb1c..4d50b6a25 100644
--- a/lib/sqlalchemy/ansisql.py
+++ b/lib/sqlalchemy/ansisql.py
@@ -225,10 +225,7 @@ class ANSICompiler(engine.Compiled, sql.ClauseVisitor):
if stack:
self.stack.append(stack)
try:
- x = self.traverse_single(obj, **kwargs)
- if x is None:
- raise "hi " + repr(obj)
- return x
+ return self.traverse_single(obj, **kwargs)
finally:
if stack:
self.stack.pop(-1)
@@ -383,13 +380,24 @@ class ANSICompiler(engine.Compiled, sql.ClauseVisitor):
return ".".join(func.packagenames + [func.name]) + (not func.group and " " or "") + self.process(func.clause_expr)
def visit_compound_select(self, cs, asfrom=False, parens=True, **kwargs):
+ stack_entry = {'select':cs}
+
+ if asfrom:
+ stack_entry['is_selected_from'] = stack_entry['is_subquery'] = True
+ elif self.stack and self.stack[-1].get('select'):
+ stack_entry['is_subquery'] = True
+ self.stack.append(stack_entry)
+
text = string.join([self.process(c, asfrom=asfrom, parens=False) for c in cs.selects], " " + cs.keyword + " ")
group_by = self.process(cs._group_by_clause, asfrom=asfrom)
if group_by:
text += " GROUP BY " + group_by
+
text += self.order_by_clause(cs)
text += (cs._limit or cs._offset) and self.limit_clause(cs) or ""
+ self.stack.pop(-1)
+
if asfrom and parens:
return "(" + text + ")"
else:
@@ -595,7 +603,7 @@ class ANSICompiler(engine.Compiled, sql.ClauseVisitor):
t = self.process(select._having)
if t:
text += " \nHAVING " + t
-
+
text += self.order_by_clause(select)
text += (select._limit or select._offset) and self.limit_clause(select) or ""
text += self.for_update_clause(select)