server/sources/rql2sql.py
branchstable
changeset 7108 bcdf22734059
parent 7042 8bcf33c493f8
child 7166 dde161937d3e
child 7193 7eaef037ea9d
--- a/server/sources/rql2sql.py	Thu Mar 24 13:31:12 2011 +0100
+++ b/server/sources/rql2sql.py	Tue Mar 22 15:11:38 2011 +0100
@@ -620,24 +620,30 @@
                 sql += '\nHAVING %s' % having
             # sort
             if sorts:
-                sqlsortterms = [self._sortterm_sql(sortterm, fselectidx)
-                                for sortterm in sorts]
-                sqlsortterms = [x for x in sqlsortterms if x is not None]
+                sqlsortterms = []
+                for sortterm in sorts:
+                    _term = self._sortterm_sql(sortterm, fselectidx)
+                    if _term is not None:
+                        sqlsortterms.append(_term)
                 if sqlsortterms:
-                    sql += '\nORDER BY %s' % ','.join(sqlsortterms)
-                    if sorts and fneedwrap:
-                        selection = ['T1.C%s' % i for i in xrange(len(origselection))]
-                        sql = 'SELECT %s FROM (%s) AS T1' % (','.join(selection), sql)
+                    sql = self.dbhelper.sql_add_order_by(sql, sqlsortterms,
+                                                         origselection,
+                                                         fneedwrap,
+                                                         select.limit or select.offset)
+                    ## sql += '\nORDER BY %s' % ','.join(sqlsortterms)
+                    ## if sorts and fneedwrap:
+                    ##     selection = ['T1.C%s' % i for i in xrange(len(origselection))]
+                    ##     sql = 'SELECT %s FROM (%s) AS T1' % (','.join(selection), sql)
+            else:
+                sqlsortterms = None
             state.finalize_source_cbs()
         finally:
             select.selection = origselection
         # limit / offset
-        limit = select.limit
-        if limit:
-            sql += '\nLIMIT %s' % limit
-        offset = select.offset
-        if offset:
-            sql += '\nOFFSET %s' % offset
+        sql = self.dbhelper.sql_add_limit_offset(sql,
+                                                 select.limit,
+                                                 select.offset,
+                                                 sqlsortterms)
         return sql
 
     def _subqueries_sql(self, select, state):