diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-02-18 22:37:22 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-02-18 22:37:22 +0000 |
commit | 8c957a074732d3162b3e44ee49a430d35b2b5c4b (patch) | |
tree | 445099bedc25d327ba4fea256a02730b7c3db471 /lib/sqlalchemy/ansisql.py | |
parent | d953de35d67a75863eae5857239be99d1d9b81e0 (diff) | |
download | sqlalchemy-8c957a074732d3162b3e44ee49a430d35b2b5c4b.tar.gz |
added hooks for engines to add stuff to SELECT, etc.
Diffstat (limited to 'lib/sqlalchemy/ansisql.py')
-rw-r--r-- | lib/sqlalchemy/ansisql.py | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/lib/sqlalchemy/ansisql.py b/lib/sqlalchemy/ansisql.py index ed0f829fb..a9c6bb207 100644 --- a/lib/sqlalchemy/ansisql.py +++ b/lib/sqlalchemy/ansisql.py @@ -277,8 +277,7 @@ class ANSICompiler(sql.Compiled): collist = string.join([self.get_str(v) for v in inner_columns.values()], ', ') text = "SELECT " - if select.distinct: - text += "DISTINCT " + text += self.visit_select_precolumns(select) text += collist whereclause = select.whereclause @@ -330,18 +329,23 @@ class ANSICompiler(sql.Compiled): t = self.get_str(select.having) if t: text += " \nHAVING " + t - - if select.limit is not None or select.offset is not None: - # TODO: ok, so this is a simple limit/offset thing. - # need to make this DB neutral for mysql, oracle - text += self.limit_clause(select) - + + text += self.visit_select_postclauses(select) + if getattr(select, 'issubquery', False): self.strings[select] = "(" + text + ")" else: self.strings[select] = text self.froms[select] = "(" + text + ")" + def visit_select_precolumns(self, select): + """ called when building a SELECT statment, position is just before column list """ + return select.distinct and "DISTINCT " or "" + + def visit_select_postclauses(self, select): + """ called when building a SELECT statement, position is after all other SELECT clauses. Most DB syntaxes put LIMIT/OFFSET here """ + return (select.limit or select.offset) and self.limit_clause(select) or "" + def limit_clause(self, select): if select.limit is not None: return " \n LIMIT " + str(select.limit) |