summaryrefslogtreecommitdiffstats
path: root/common/datastorequery.h
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-02-11 12:02:58 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-02-13 19:42:39 +0100
commit1259b236704e790fa1284a63ec537525bce23841 (patch)
tree85cd0491e56d2f604cc8aa291a49d20f8f73c684 /common/datastorequery.h
parentb4bd3932aa2a8e841ed204b341bcbf65ba59c5b2 (diff)
downloadsink-1259b236704e790fa1284a63ec537525bce23841.tar.gz
sink-1259b236704e790fa1284a63ec537525bce23841.zip
Fixed reduction updates with stateful query.
Some filters need to maintain state between runs in order to be able to emit only what has changed. This now also make reduction work for live queries.
Diffstat (limited to 'common/datastorequery.h')
-rw-r--r--common/datastorequery.h18
1 files changed, 14 insertions, 4 deletions
diff --git a/common/datastorequery.h b/common/datastorequery.h
index 5a47685..a797782 100644
--- a/common/datastorequery.h
+++ b/common/datastorequery.h
@@ -26,6 +26,7 @@
26 26
27class Source; 27class Source;
28class Bloom; 28class Bloom;
29class Reduce;
29class Filter; 30class Filter;
30class FilterBase; 31class FilterBase;
31 32
@@ -33,15 +34,25 @@ class DataStoreQuery {
33 friend class FilterBase; 34 friend class FilterBase;
34 friend class Source; 35 friend class Source;
35 friend class Bloom; 36 friend class Bloom;
37 friend class Reduce;
36 friend class Filter; 38 friend class Filter;
37public: 39public:
38 typedef QSharedPointer<DataStoreQuery> Ptr; 40 typedef QSharedPointer<DataStoreQuery> Ptr;
39 41
42 struct State {
43 typedef QSharedPointer<State> Ptr;
44 QSharedPointer<FilterBase> mCollector;
45 QSharedPointer<Source> mSource;
46 };
47
40 DataStoreQuery(const Sink::QueryBase &query, const QByteArray &type, Sink::Storage::EntityStore &store); 48 DataStoreQuery(const Sink::QueryBase &query, const QByteArray &type, Sink::Storage::EntityStore &store);
49 DataStoreQuery(const DataStoreQuery::State &state, const QByteArray &type, Sink::Storage::EntityStore &store);
41 ~DataStoreQuery(); 50 ~DataStoreQuery();
42 ResultSet execute(); 51 ResultSet execute();
43 ResultSet update(qint64 baseRevision); 52 ResultSet update(qint64 baseRevision);
44 53
54 State::Ptr getState();
55
45private: 56private:
46 57
47 typedef std::function<bool(const Sink::ApplicationDomain::ApplicationDomainType &entity, Sink::Operation)> FilterFunction; 58 typedef std::function<bool(const Sink::ApplicationDomain::ApplicationDomainType &entity, Sink::Operation)> FilterFunction;
@@ -54,12 +65,10 @@ private:
54 ResultSet createFilteredSet(ResultSet &resultSet, const FilterFunction &); 65 ResultSet createFilteredSet(ResultSet &resultSet, const FilterFunction &);
55 QVector<QByteArray> loadIncrementalResultSet(qint64 baseRevision); 66 QVector<QByteArray> loadIncrementalResultSet(qint64 baseRevision);
56 67
57 void setupQuery(); 68 void setupQuery(const Sink::QueryBase &query_);
58 QByteArrayList executeSubquery(const Sink::QueryBase &subquery); 69 QByteArrayList executeSubquery(const Sink::QueryBase &subquery);
59 70
60 Sink::QueryBase mQuery;
61 const QByteArray mType; 71 const QByteArray mType;
62 bool mInitialQuery;
63 QSharedPointer<FilterBase> mCollector; 72 QSharedPointer<FilterBase> mCollector;
64 QSharedPointer<Source> mSource; 73 QSharedPointer<Source> mSource;
65 74
@@ -102,7 +111,8 @@ public:
102 //Returns true for as long as a result is available 111 //Returns true for as long as a result is available
103 virtual bool next(const std::function<void(const ResultSet::Result &)> &callback) = 0; 112 virtual bool next(const std::function<void(const ResultSet::Result &)> &callback) = 0;
104 113
105 QSharedPointer<FilterBase> mSource; 114 FilterBase::Ptr mSource;
106 DataStoreQuery *mDatastore; 115 DataStoreQuery *mDatastore;
116 bool mIncremental = false;
107}; 117};
108 118