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:
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)):
# 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
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)
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)
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):
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)