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.
此提交包含在:
@@ -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
|
||||
|
||||
新增問題並參考
封鎖使用者