From 2cc08018bdc985c3dc5557dd0773eda431253295 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 22 Mar 2006 16:57:46 +0000 Subject: [PATCH] fixed oracle's efforts to get an ORDER BY for its ROW NUMBER OVER clause, fixed support for multi-leveled Alias objects to render correctly --- lib/sqlalchemy/databases/oracle.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index ec93d43ff1..1a02448e08 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -244,8 +244,8 @@ class OracleCompiler(ansisql.ANSICompiler): def visit_alias(self, alias): """oracle doesnt like 'FROM table AS alias'. is the AS standard SQL??""" - self.froms[alias] = self.get_from_text(alias.selectable) + " " + alias.name - self.strings[alias] = self.get_str(alias.selectable) + self.froms[alias] = self.get_from_text(alias.original) + " " + alias.name + self.strings[alias] = self.get_str(alias.original) def visit_column(self, column): if self._use_ansi: @@ -282,8 +282,10 @@ class OracleCompiler(ansisql.ANSICompiler): if hasattr(select, "order_by_clause"): orderby = self.strings[select.order_by_clause] else: + # to use ROW_NUMBER(), an ORDER BY is required. so here we dig in + # as best we can to find some column we can order by # TODO: try to get "oid_column" to be used here - orderby = "%s.rowid ASC" % select.froms[0].name + orderby = "%s.rowid ASC" % select.primary_key[0].original.table.name select.append_column(sql.ColumnClause("ROW_NUMBER() OVER (ORDER BY %s)" % orderby).label("ora_rn")) limitselect = sql.select([c for c in select.c if c.key!='ora_rn']) if select.offset is not None: -- 2.47.2