Refactor search queries: Introduced QSSQuery

Purpose is to seperate certain logic from SQLite and generalize it more.
Even though we only have Sqlite atm, in general the database layers
must be stupid as possible, while QSSQuery should do most of the hard work.

Fixes in Tokenizer logic.
Switched to C++17.
此提交包含在:
2019-08-17 11:06:35 +02:00
父節點 05a5bac22f
當前提交 cff481a57e
共有 14 個檔案被更改,包括 500 行新增618 行删除

查看文件

@@ -3,34 +3,21 @@
#include <QSqlDatabase>
#include <QPair>
#include "searchresult.h"
#include "token.h"
#include "../shared/qssquery.h"
class SqliteSearch
{
class Token
{
public:
QString key;
QString value;
Token(QString key = "", QString value = "")
{
this->key = key;
this->value = value;
}
};
public:
SqliteSearch(QSqlDatabase &db);
QVector<SearchResult> search(const QString &query);
static bool checkParanthesis(QString expression);
QVector<SearchResult> search(const QSSQuery &query);
private:
QSqlDatabase *db;
QVector<Token> tokenize(QString expression);
QSqlQuery makeSqlQuery(const QVector<Token> &tokens);
QString fieldToColumn(QString col);
QSqlQuery makeSqlQuery(const QSSQuery &query);
QString fieldToColumn(QueryField field);
QPair<QString, QVector<QString>> createSql(const Token &token);
QString createSortSql(const SqliteSearch::Token &token);
QString createSortSql(const QVector<SortCondition> sortConditions);
};
#endif // SQLITESEARCH_H