server/sources/rql2sql.py
branchstable
changeset 7108 bcdf22734059
parent 7042 8bcf33c493f8
child 7166 dde161937d3e
child 7193 7eaef037ea9d
equal deleted inserted replaced
7107:5ea4bf53eff2 7108:bcdf22734059
   618                 sql += '\nGROUP BY %s' % groups
   618                 sql += '\nGROUP BY %s' % groups
   619             if having:
   619             if having:
   620                 sql += '\nHAVING %s' % having
   620                 sql += '\nHAVING %s' % having
   621             # sort
   621             # sort
   622             if sorts:
   622             if sorts:
   623                 sqlsortterms = [self._sortterm_sql(sortterm, fselectidx)
   623                 sqlsortterms = []
   624                                 for sortterm in sorts]
   624                 for sortterm in sorts:
   625                 sqlsortterms = [x for x in sqlsortterms if x is not None]
   625                     _term = self._sortterm_sql(sortterm, fselectidx)
       
   626                     if _term is not None:
       
   627                         sqlsortterms.append(_term)
   626                 if sqlsortterms:
   628                 if sqlsortterms:
   627                     sql += '\nORDER BY %s' % ','.join(sqlsortterms)
   629                     sql = self.dbhelper.sql_add_order_by(sql, sqlsortterms,
   628                     if sorts and fneedwrap:
   630                                                          origselection,
   629                         selection = ['T1.C%s' % i for i in xrange(len(origselection))]
   631                                                          fneedwrap,
   630                         sql = 'SELECT %s FROM (%s) AS T1' % (','.join(selection), sql)
   632                                                          select.limit or select.offset)
       
   633                     ## sql += '\nORDER BY %s' % ','.join(sqlsortterms)
       
   634                     ## if sorts and fneedwrap:
       
   635                     ##     selection = ['T1.C%s' % i for i in xrange(len(origselection))]
       
   636                     ##     sql = 'SELECT %s FROM (%s) AS T1' % (','.join(selection), sql)
       
   637             else:
       
   638                 sqlsortterms = None
   631             state.finalize_source_cbs()
   639             state.finalize_source_cbs()
   632         finally:
   640         finally:
   633             select.selection = origselection
   641             select.selection = origselection
   634         # limit / offset
   642         # limit / offset
   635         limit = select.limit
   643         sql = self.dbhelper.sql_add_limit_offset(sql,
   636         if limit:
   644                                                  select.limit,
   637             sql += '\nLIMIT %s' % limit
   645                                                  select.offset,
   638         offset = select.offset
   646                                                  sqlsortterms)
   639         if offset:
       
   640             sql += '\nOFFSET %s' % offset
       
   641         return sql
   647         return sql
   642 
   648 
   643     def _subqueries_sql(self, select, state):
   649     def _subqueries_sql(self, select, state):
   644         for i, subquery in enumerate(select.with_):
   650         for i, subquery in enumerate(select.with_):
   645             sql = self.union_sql(subquery.query, needalias=True)
   651             sql = self.union_sql(subquery.query, needalias=True)