summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/ansisql.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-02-18 22:37:22 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-02-18 22:37:22 +0000
commit8c957a074732d3162b3e44ee49a430d35b2b5c4b (patch)
tree445099bedc25d327ba4fea256a02730b7c3db471 /lib/sqlalchemy/ansisql.py
parentd953de35d67a75863eae5857239be99d1d9b81e0 (diff)
downloadsqlalchemy-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.py20
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)