changeset 3693:a775afeeee8b

Database interface fixes. - Fix a problem with wrong sort-order in RDBMS backend when a sort-attribute is also searched for. We need to preserve correct sort attribute order in that case. A test for this was added earlier. - Added forgotten fail_ok parameter to sql_commit method in sqlite backend to make tests work again. - Note that this version still fails a test for the postgresql backend.
author Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
date Wed, 30 Aug 2006 09:05:30 +0000
parents 8e52157e2073
children 595041d78104
files roundup/backends/back_sqlite.py roundup/backends/rdbms_common.py
diffstat 2 files changed, 15 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/roundup/backends/back_sqlite.py	Wed Aug 30 08:50:44 2006 +0000
+++ b/roundup/backends/back_sqlite.py	Wed Aug 30 09:05:30 2006 +0000
@@ -1,4 +1,4 @@
-# $Id: back_sqlite.py,v 1.45 2006-08-11 00:02:12 richard Exp $
+# $Id: back_sqlite.py,v 1.46 2006-08-30 09:05:30 schlatterbeck Exp $
 '''Implements a backend for SQLite.
 
 See https://pysqlite.sourceforge.net/ for pysqlite info
@@ -288,7 +288,7 @@
     def __repr__(self):
         return '<roundlite 0x%x>'%id(self)
 
-    def sql_commit(self):
+    def sql_commit(self, fail_ok=False):
         ''' Actually commit to the database.
 
             Ignore errors if there's nothing to commit.
--- a/roundup/backends/rdbms_common.py	Wed Aug 30 08:50:44 2006 +0000
+++ b/roundup/backends/rdbms_common.py	Wed Aug 30 09:05:30 2006 +0000
@@ -15,7 +15,7 @@
 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 #
-#$Id: rdbms_common.py,v 1.179 2006-08-29 04:32:49 richard Exp $
+#$Id: rdbms_common.py,v 1.180 2006-08-30 09:05:30 schlatterbeck Exp $
 ''' Relational database (SQL) backend common code.
 
 Basics:
@@ -2092,8 +2092,7 @@
             if not mlseen:
                 pt.attr_sort_done = pt.tree_sort_done = True
         proptree.compute_sort_done()
-                
-        orderby = []
+
         ordercols = []
         auxcols = {}
         mlsort = []
@@ -2262,8 +2261,8 @@
                     if (self.order_by_null_values and p.name != 'id'):
                         nv = self.order_by_null_values % oc
                         ordercols.append(nv)
-                        orderby.append(nv + desc)
-                    orderby.append(oc + desc)
+                        p.orderby.append(nv + desc)
+                    p.orderby.append(oc + desc)
 
         props = self.getprops()
 
@@ -2290,9 +2289,16 @@
             cols = ['distinct(_%s.id)'%icn]
         else:
             cols = ['_%s.id'%icn]
-        if orderby:
+        if ordercols:
             cols = cols + ordercols
-            order = ' order by %s'%(','.join(orderby))
+        order = []
+        # keep correct sequence of order attributes.
+        for sa in proptree.sortattr:
+            if not sa.attr_sort_done:
+                continue
+            order.extend(sa.orderby)
+        if order:
+            order = ' order by %s'%(','.join(order))
         else:
             order = ''
         for o, p in auxcols.iteritems ():

Roundup Issue Tracker: http://roundup-tracker.org/