]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
fixed oracle's efforts to get an ORDER BY for its ROW NUMBER OVER clause, fixed suppo...
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 22 Mar 2006 16:57:46 +0000 (16:57 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 22 Mar 2006 16:57:46 +0000 (16:57 +0000)
lib/sqlalchemy/databases/oracle.py

index ec93d43ff157ccb3a3f0c500301a6961ecfbba93..1a02448e08f68c41180b1e4c2708f6d9370d0dd8 100644 (file)
@@ -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: