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) |