File: queryexecutorlimit.cpp

package info (click to toggle)
sqlitestudio 3.4.21%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 54,880 kB
  • sloc: ansic: 406,208; cpp: 123,872; yacc: 2,692; tcl: 497; sh: 462; xml: 426; makefile: 19
file content (30 lines) | stat: -rw-r--r-- 1,012 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

#include "queryexecutorlimit.h"
#include <QDebug>

bool QueryExecutorLimit::exec()
{
    SqliteSelectPtr select = getSelect();
    if (!select || select->explain)
        return true;

    int page = queryExecutor->getPage();
    if (page < 0)
        return true; // no paging requested

    if (select->tokens.size() < 1)
        return true; // shouldn't happen, but if happens, quit gracefully

    quint64 limit = queryExecutor->getResultsPerPage();
    quint64 offset = limit * page;

    // The original query is last, so if it contained any %N strings,
    // they won't be replaced.
    static_qstring(selectTpl, "SELECT * FROM (%1) LIMIT %2 OFFSET %3");
    QString newSelect = selectTpl.arg(select->detokenize(), QString::number(limit), QString::number(offset));

    int begin = select->tokens.first()->start;
    int length = select->tokens.last()->end - select->tokens.first()->start + 1;
    context->processedQuery = context->processedQuery.replace(begin, length, newSelect);
    return true;
}