kDB: Knowledge DataBase
Loading...
Searching...
No Matches
QueryCache_p.h
1#include <QMutex>
2
3#include <knowCore/Messages.h>
4
5#include "DeltaParser/Parser_p.h"
6
7namespace kDB::Repository::VersionControl
8{
9 struct QueryCache
10 {
11 static DeltaParser::Parser::Result get(const QByteArray& _query)
12 {
13
14 QMutexLocker l(&m);
15 auto it = queries.find(_query);
16 if(it != queries.end())
17 {
18 return it.value();
19 }
20 l.unlock();
21
22 knowCore::Messages messages;
23 DeltaParser::Parser::Result r = DeltaParser::Parser::parse(_query, &messages);
24 if(messages.hasErrors())
25 {
26 clog_error("Error in default merge strategy while parsing query {}: {}",
27 QString::fromUtf8(_query), messages.toString());
28 return DeltaParser::Parser::Result{false, {}, {}};
29 }
30
31 l.relock();
32 queries[_query] = r;
33 return r;
34 }
35 static void add(const QByteArray& _query, const QList<knowRDF::Triple>& inserted,
36 const QList<knowRDF::Triple>& deleted)
37 {
38 QMutexLocker l(&m);
39 queries[_query] = {true, inserted, deleted};
40 }
41 private:
43 static QMutex m;
44 };
45
46} // namespace kDB::Repository::VersionControl
Definition Forward.h:10
Definition Revision.h:9
Definition Messages.h:18
QString toString() const
Definition Messages.cpp:77