]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
broke apart deafult ordering into oid or primary key. a DB that has no oids will...
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 2 Jan 2006 05:40:37 +0000 (05:40 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 2 Jan 2006 05:40:37 +0000 (05:40 +0000)
lib/sqlalchemy/sql.py
test/mapper.py

index 3012708fe59593780940ef71c7155fdd2324bf71..51b1b51f91a91d9a42b99b28083ce1970aa94c03 100644 (file)
@@ -487,8 +487,10 @@ class FromClause(Selectable):
     def default_order_by(self):
         if not self.engine.default_ordering:
             return None
-        else:
+        elif self.oid_column is not None:
             return [self.oid_column]    
+        else:
+            return self.primary_key
     def hash_key(self):
         return "FromClause(%s, %s)" % (repr(self.id), repr(self.from_name))
     def accept_visitor(self, visitor): 
@@ -664,8 +666,6 @@ class BinaryClause(ClauseElement, CompareMixin):
         self.left = self.right
         self.right = c
 
-
-        
 class Join(FromClause):
     # TODO: put "using" + "natural" concepts in here and make "onclause" optional
     def __init__(self, left, right, onclause=None, isouter = False, allcols = True):
@@ -911,23 +911,20 @@ class TableImpl(FromClause):
         self.id = self.table.name
 
     def _oid_col(self):
+        # OID remains a little hackish so far
         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)
                 self._oid_column._set_parent(self.table)
             else:
-                if len(self.table.primary_key) > 0:
-                    c = self.table.primary_key[0]
-                else:
-                    c = self.table.columns[self.table.columns.keys()[0]]
-                self._oid_column = schema.Column(c.name, c.type, hidden=True)
-                self._oid_column._set_parent(self.table)
+                self._oid_column = None
         return self._oid_column
 
     oid_column = property(_oid_col)
     engine = property(lambda s: s.table.engine)
     columns = property(lambda self: self.table.columns)
-
+    primary_key = property(lambda self:self.table.primary_key)
+    
     def _get_col_by_original(self, column):
         try:
           col = self.columns[column.key]
index b3df100408ce084d2b17906d7f3946570242e6ee..72c062016a7a18fbf49a92cf7f4546e29cc54e28 100644 (file)
@@ -237,7 +237,7 @@ class DeferredTest(MapperSuperTest):
             print o2.description
 
         self.assert_sql(db, go, [
-            ("SELECT orders.order_id AS orders_order_id, orders.user_id AS orders_user_id, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.oid_column.key, {}),
+            ("SELECT orders.order_id AS orders_order_id, orders.user_id AS orders_user_id, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.default_order_by()[0].key, {}),
             ("SELECT orders.description AS orders_description FROM orders WHERE orders.order_id = :orders_order_id", {'orders_order_id':3})
         ])
     
@@ -265,7 +265,7 @@ class DeferredTest(MapperSuperTest):
             o2 = l[2]
             print o2.opened, o2.description, o2.userident
         self.assert_sql(db, go, [
-            ("SELECT orders.order_id AS orders_order_id FROM orders ORDER BY orders.%s" % orders.oid_column.key, {}),
+            ("SELECT orders.order_id AS orders_order_id FROM orders ORDER BY orders.%s" % orders.default_order_by()[0].key, {}),
             ("SELECT orders.user_id AS orders_user_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders WHERE orders.order_id = :orders_order_id", {'orders_order_id':3})
         ])
         
@@ -277,7 +277,7 @@ class DeferredTest(MapperSuperTest):
             l = m2.select()
             print l[2].user_id
         self.assert_sql(db, go, [
-            ("SELECT orders.order_id AS orders_order_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.oid_column.key, {}),
+            ("SELECT orders.order_id AS orders_order_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.default_order_by()[0].key, {}),
             ("SELECT orders.user_id AS orders_user_id FROM orders WHERE orders.order_id = :orders_order_id", {'orders_order_id':3})
         ])
         objectstore.clear()
@@ -287,7 +287,7 @@ class DeferredTest(MapperSuperTest):
             l = m3.select()
             print l[3].user_id
         self.assert_sql(db, go, [
-            ("SELECT orders.order_id AS orders_order_id, orders.user_id AS orders_user_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.oid_column.key, {}),
+            ("SELECT orders.order_id AS orders_order_id, orders.user_id AS orders_user_id, orders.description AS orders_description, orders.isopen AS orders_isopen FROM orders ORDER BY orders.%s" % orders.default_order_by()[0].key, {}),
         ])
 
     def testdeepoptions(self):