diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2005-11-29 06:43:23 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2005-11-29 06:43:23 +0000 |
commit | 92dc0d0dbda52a94911f858429a41b09b728ad52 (patch) | |
tree | 3c089888af89d9cffb9ea6252a1be265c8ecd039 /lib/sqlalchemy/ansisql.py | |
parent | ee665372f66a16039e2383875f34afec93192789 (diff) | |
download | sqlalchemy-92dc0d0dbda52a94911f858429a41b09b728ad52.tar.gz |
added group_by, having to select. added func.foo(a, b) keyword to express functions within column lists and criterion lists
Diffstat (limited to 'lib/sqlalchemy/ansisql.py')
-rw-r--r-- | lib/sqlalchemy/ansisql.py | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/lib/sqlalchemy/ansisql.py b/lib/sqlalchemy/ansisql.py index 55550bfa8..4d65a70ce 100644 --- a/lib/sqlalchemy/ansisql.py +++ b/lib/sqlalchemy/ansisql.py @@ -133,7 +133,10 @@ class ANSICompiler(sql.Compiled): self.strings[column] = "%s.%s" % (column.table.name, column.name) def visit_columnclause(self, column): - self.strings[column] = "%s.%s" % (column.table.name, column.text) + if column.table is not None and column.table.name is not None: + self.strings[column] = "%s.%s" % (column.table.name, column.text) + else: + self.strings[column] = column.text def visit_fromclause(self, fromclause): self.froms[fromclause] = fromclause.from_name @@ -143,7 +146,8 @@ class ANSICompiler(sql.Compiled): self.strings[textclause] = "(" + textclause.text + ")" else: self.strings[textclause] = textclause.text - + self.froms[textclause] = textclause.text + def visit_null(self, null): self.strings[null] = 'NULL' @@ -163,6 +167,9 @@ class ANSICompiler(sql.Compiled): self.strings[list] = "(" + string.join([self.get_str(c) for c in list.clauses], ', ') + ")" else: self.strings[list] = string.join([self.get_str(c) for c in list.clauses], ', ') + + def visit_function(self, func): + self.strings[func] = func.name + "(" + string.join([self.get_str(c) for c in func.clauses], ', ') + ")" def visit_binary(self, binary): result = self.get_str(binary.left) @@ -198,6 +205,7 @@ class ANSICompiler(sql.Compiled): for c in select._raw_columns: for co in c.columns: + co.accept_visitor(self) inner_columns.append(co) if select.use_labels: self.typemap.setdefault(co.label, co.type) @@ -205,9 +213,9 @@ class ANSICompiler(sql.Compiled): self.typemap.setdefault(co.key, co.type) if select.use_labels: - collist = string.join(["%s AS %s" % (c.fullname, c.label) for c in inner_columns], ', ') + collist = string.join(["%s AS %s" % (self.get_str(c), c.label) for c in inner_columns], ', ') else: - collist = string.join([c.fullname for c in inner_columns], ', ') + collist = string.join([self.get_str(c) for c in inner_columns], ', ') text = "SELECT " if select.distinct: @@ -240,6 +248,11 @@ class ANSICompiler(sql.Compiled): for tup in select._clauses: text += " " + tup[0] + " " + self.get_str(tup[1]) + if select.having is not None: + t = self.get_str(select.having) + if t: + text += " \nHAVING " + t + if getattr(select, 'issubquery', False): self.strings[select] = "(" + text + ")" else: |