File: queryexecutorparsequery.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 (48 lines) | stat: -rw-r--r-- 1,188 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "queryexecutorparsequery.h"
#include "db/queryexecutor.h"
#include "parser/parser.h"
#include <QDebug>

QueryExecutorParseQuery::QueryExecutorParseQuery(const QString& name)
    : QueryExecutorStep()
{
    setObjectName(name);
}

QueryExecutorParseQuery::~QueryExecutorParseQuery()
{
    if (parser)
        delete parser;
}

bool QueryExecutorParseQuery::exec()
{
    // Prepare parser
    if (parser)
        delete parser;

    parser = new Parser();

    // Do parsing
    context->parsedQueries.clear();
    parser->parse(context->processedQuery);
    if (parser->getErrors().size() > 0)
    {
        qWarning() << "QueryExecutorParseQuery:" << parser->getErrorString() << "\n"
                   << "Query parsed:" << context->processedQuery;
        return false;
    }

    if (parser->getQueries().size() == 0)
    {
        qWarning() <<  "No queries parsed in QueryExecutorParseQuery step.";
        return false;
    }

    context->parsedQueries = parser->getQueries();

    // We never want the semicolon in last query, because the query could be wrapped with a SELECT
    context->parsedQueries.last()->tokens.trimRight(Token::OPERATOR, ";");

    return true;
}