]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
order by oid -> order by *default_order_by() when called by mapper layer.
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 2 Jan 2006 05:28:05 +0000 (05:28 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 2 Jan 2006 05:28:05 +0000 (05:28 +0000)
- one layer of abstraction between the "oid" and default ordering

lib/sqlalchemy/mapping/mapper.py
lib/sqlalchemy/mapping/properties.py
lib/sqlalchemy/sql.py

index 01dfd05d3c50e5eeb7a8fd8119d1eff51d007440..9108c0308c0ca75ddc605c78156e1941108df899 100644 (file)
@@ -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
         
             
index e6b41999dbb9f44a124b9ace9c4540493f550ffd..3f9578372e2767d377cd9f84070eb129649740e8 100644 (file)
@@ -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)
index 25b73c7768098e2ed0afbc708050b088453b2471..3012708fe59593780940ef71c7155fdd2324bf71 100644 (file)
@@ -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)