summaryrefslogtreecommitdiffstats
path: root/common/datastorequery.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-06-10 09:37:08 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-06-10 09:37:08 +0200
commite382924f1a90b5a27eba2e8c5981f6a4fe7892c9 (patch)
tree315780c4699be92d20121351bca4154c4fff8994 /common/datastorequery.cpp
parentf254153ac1571d5ab31a4f17fba2db9256bc24d3 (diff)
downloadsink-e382924f1a90b5a27eba2e8c5981f6a4fe7892c9.tar.gz
sink-e382924f1a90b5a27eba2e8c5981f6a4fe7892c9.zip
Fixed incremental queries
The incremental querying broke as soon as a revision update came in since it would nuke the base-set. This fixes it, but it's definitely not pretty.
Diffstat (limited to 'common/datastorequery.cpp')
-rw-r--r--common/datastorequery.cpp41
1 files changed, 31 insertions, 10 deletions
diff --git a/common/datastorequery.cpp b/common/datastorequery.cpp
index 2e0c348..4c95606 100644
--- a/common/datastorequery.cpp
+++ b/common/datastorequery.cpp
@@ -43,6 +43,8 @@ class Source : public FilterBase {
43 43
44 QVector<QByteArray> mIds; 44 QVector<QByteArray> mIds;
45 QVector<QByteArray>::ConstIterator mIt; 45 QVector<QByteArray>::ConstIterator mIt;
46 QVector<QByteArray> mIncrementalIds;
47 QVector<QByteArray>::ConstIterator mIncrementalIt;
46 48
47 Source (const QVector<QByteArray> &ids, DataStoreQuery *store) 49 Source (const QVector<QByteArray> &ids, DataStoreQuery *store)
48 : FilterBase(store), 50 : FilterBase(store),
@@ -63,21 +65,36 @@ class Source : public FilterBase {
63 65
64 void add(const QVector<QByteArray> &ids) 66 void add(const QVector<QByteArray> &ids)
65 { 67 {
66 mIds = ids; 68 mIncrementalIds = ids;
67 mIt = mIds.constBegin(); 69 mIncrementalIt = mIncrementalIds.constBegin();
68 } 70 }
69 71
70 bool next(const std::function<void(const ResultSet::Result &result)> &callback) Q_DECL_OVERRIDE 72 bool next(const std::function<void(const ResultSet::Result &result)> &callback) Q_DECL_OVERRIDE
71 { 73 {
72 if (mIt == mIds.constEnd()) { 74 if (!mIncrementalIds.isEmpty()) {
73 return false; 75 if (mIncrementalIt == mIncrementalIds.constEnd()) {
76 return false;
77 }
78 readEntity(*mIncrementalIt, [this, callback](const Sink::ApplicationDomain::ApplicationDomainType &entity, Sink::Operation operation) {
79 SinkTraceCtx(mDatastore->mLogCtx) << "Source: Read entity: " << entity.identifier() << operationName(operation);
80 callback({entity, operation});
81 });
82 mIncrementalIt++;
83 if (mIncrementalIt == mIncrementalIds.constEnd()) {
84 return false;
85 }
86 return true;
87 } else {
88 if (mIt == mIds.constEnd()) {
89 return false;
90 }
91 readEntity(*mIt, [this, callback](const Sink::ApplicationDomain::ApplicationDomainType &entity, Sink::Operation operation) {
92 SinkTraceCtx(mDatastore->mLogCtx) << "Source: Read entity: " << entity.identifier() << operationName(operation);
93 callback({entity, operation});
94 });
95 mIt++;
96 return mIt != mIds.constEnd();
74 } 97 }
75 readEntity(*mIt, [this, callback](const Sink::ApplicationDomain::ApplicationDomainType &entity, Sink::Operation operation) {
76 SinkTraceCtx(mDatastore->mLogCtx) << "Source: Read entity: " << entity.identifier() << operationName(operation);
77 callback({entity, operation});
78 });
79 mIt++;
80 return mIt != mIds.constEnd();
81 } 98 }
82}; 99};
83 100
@@ -599,6 +616,10 @@ ResultSet DataStoreQuery::update(qint64 baseRevision)
599 return ResultSet(generator, [this]() { mCollector->skip(); }); 616 return ResultSet(generator, [this]() { mCollector->skip(); });
600} 617}
601 618
619void DataStoreQuery::updateComplete()
620{
621 mSource->mIncrementalIds.clear();
622}
602 623
603ResultSet DataStoreQuery::execute() 624ResultSet DataStoreQuery::execute()
604{ 625{