From ea06a3ac2f8225a9aac81cd849d681ee40d2e57a Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 3 May 2006 16:55:56 +0000 Subject: [PATCH] "order_by" parameter propigated to inheriting mappers oracle ROW_NUMBER logic uses select.oid_column to get default order by --- lib/sqlalchemy/databases/oracle.py | 10 ++-------- lib/sqlalchemy/mapping/mapper.py | 2 ++ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index a475d29b76..863cfd03e8 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -276,16 +276,10 @@ class OracleCompiler(ansisql.ANSICompiler): return if select.limit is not None or select.offset is not None: select._oracle_visit = True + # to use ROW_NUMBER(), an ORDER BY is required. orderby = self.strings[select.order_by_clause] if not orderby: - # 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 - if len(select.primary_key): - col = select.primary_key[0].original.table.name - else: - col = [c for c in select.c][0].original.table.name - orderby = "%s.rowid ASC" % col + orderby = select.oid_column 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: diff --git a/lib/sqlalchemy/mapping/mapper.py b/lib/sqlalchemy/mapping/mapper.py index 4a26a4f38a..db404b6eac 100644 --- a/lib/sqlalchemy/mapping/mapper.py +++ b/lib/sqlalchemy/mapping/mapper.py @@ -114,6 +114,8 @@ class Mapper(object): self._synchronizer = None self.inherits = inherits self.noninherited_table = table + if self.order_by is False: + self.order_by = inherits.order_by else: self.primarytable = self.table self.noninherited_table = self.table -- 2.47.2