diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-02-11 12:02:58 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-02-13 19:42:39 +0100 |
commit | 1259b236704e790fa1284a63ec537525bce23841 (patch) | |
tree | 85cd0491e56d2f604cc8aa291a49d20f8f73c684 /common/datastorequery.h | |
parent | b4bd3932aa2a8e841ed204b341bcbf65ba59c5b2 (diff) | |
download | sink-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.h | 18 |
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 | ||
27 | class Source; | 27 | class Source; |
28 | class Bloom; | 28 | class Bloom; |
29 | class Reduce; | ||
29 | class Filter; | 30 | class Filter; |
30 | class FilterBase; | 31 | class 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; |
37 | public: | 39 | public: |
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 | |||
45 | private: | 56 | private: |
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 | ||