From 0f7484094cfa7077e90865acdb5cad175608f567 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Mon, 2 Jan 2006 05:28:05 +0000 Subject: [PATCH] order by oid -> order by *default_order_by() when called by mapper layer. - one layer of abstraction between the "oid" and default ordering --- lib/sqlalchemy/mapping/mapper.py | 12 ++++++------ lib/sqlalchemy/mapping/properties.py | 12 ++++++------ lib/sqlalchemy/sql.py | 8 +++++--- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/lib/sqlalchemy/mapping/mapper.py b/lib/sqlalchemy/mapping/mapper.py index 01dfd05d3c..9108c0308c 100644 --- a/lib/sqlalchemy/mapping/mapper.py +++ b/lib/sqlalchemy/mapping/mapper.py @@ -602,8 +602,8 @@ class Mapper(object): if not no_sort: if self.order_by: order_by = self.order_by - elif self.table.oid_column is not None: - order_by = [self.table.oid_column] + elif self.table.default_order_by() is not None: + order_by = self.table.default_order_by() else: order_by = None else: @@ -611,8 +611,8 @@ class Mapper(object): if self._should_nest(**kwargs): s2 = sql.select(self.table.primary_key, whereclause, use_labels=True, **kwargs) - if not kwargs.get('distinct', False) and self.table.oid_column is not None: - s2.order_by(self.table.oid_column) + if not kwargs.get('distinct', False) and self.table.default_order_by() is not None: + s2.order_by(*self.table.default_order_by()) s3 = s2.alias('rowcount') crit = [] for i in range(0, len(self.table.primary_key)): @@ -631,8 +631,8 @@ class Mapper(object): # add that to the column list # TODO: this idea should be handled by the SELECT statement itself, insuring # that order_by cols are in the select list if DISTINCT is selected - if kwargs.get('distinct', False) and self.table.oid_column is not None and order_by == [self.table.oid_column]: - statement.append_column(self.table.oid_column) + if kwargs.get('distinct', False) and self.table.default_order_by() is not None and order_by == [self.table.default_order_by()]: + statement.append_column(*self.table.default_order_by()) # plugin point diff --git a/lib/sqlalchemy/mapping/properties.py b/lib/sqlalchemy/mapping/properties.py index e6b41999db..3f9578372e 100644 --- a/lib/sqlalchemy/mapping/properties.py +++ b/lib/sqlalchemy/mapping/properties.py @@ -592,8 +592,8 @@ class LazyLoader(PropertyLoader): if allparams: if self.order_by is not None: order_by = self.order_by - elif self.secondary is not None and self.secondary.oid_column is not None: - order_by = [self.secondary.oid_column] + elif self.secondary is not None and self.secondary.default_order_by() is not None: + order_by = self.secondary.default_order_by() else: order_by = None result = self.mapper.select(self.lazywhere, order_by=order_by, params=params) @@ -714,12 +714,12 @@ class EagerLoader(PropertyLoader): if self.secondaryjoin is not None: statement._outerjoin = sql.outerjoin(towrap, self.secondary, self.primaryjoin).outerjoin(self.eagertarget, self.eagersecondary) - if self.order_by is None and self.secondary.oid_column is not None: - statement.order_by(self.secondary.oid_column) + if self.order_by is None and self.secondary.default_order_by() is not None: + statement.order_by(*self.secondary.default_order_by()) else: statement._outerjoin = towrap.outerjoin(self.eagertarget, self.eagerprimary) - if self.order_by is None and self.eagertarget.oid_column is not None: - statement.order_by(self.eagertarget.oid_column) + if self.order_by is None and self.eagertarget.default_order_by() is not None: + statement.order_by(*self.eagertarget.default_order_by()) if self.eager_order_by is not None: statement.order_by(*self.eager_order_by) diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 25b73c7768..3012708fe5 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -484,6 +484,11 @@ class FromClause(Selectable): def _get_from_objects(self): # this could also be [self], at the moment it doesnt matter to the Select object return [] + def default_order_by(self): + if not self.engine.default_ordering: + return None + else: + return [self.oid_column] def hash_key(self): return "FromClause(%s, %s)" % (repr(self.id), repr(self.from_name)) def accept_visitor(self, visitor): @@ -906,9 +911,6 @@ class TableImpl(FromClause): self.id = self.table.name def _oid_col(self): - if not self.table.engine.default_ordering: - return None - if not hasattr(self, '_oid_column'): if self.table.engine.oid_column_name() is not None: self._oid_column = schema.Column(self.table.engine.oid_column_name(), sqltypes.Integer, hidden=True) -- 2.47.2