diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-08-12 22:01:30 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-08-12 22:01:30 +0000 |
commit | 6e477b750eb432e91f933abae3aff3cb58b27362 (patch) | |
tree | aeab7803228343be9ef2326f8c581f7e35aa6acd /lib/sqlalchemy/ansisql.py | |
parent | 6b6443f82c98db6511b873828d2c3f396aef6c67 (diff) | |
download | sqlalchemy-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.py | 18 |
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) |