diff options
Diffstat (limited to 'common/datastorequery.h')
-rw-r--r-- | common/datastorequery.h | 74 |
1 files changed, 69 insertions, 5 deletions
diff --git a/common/datastorequery.h b/common/datastorequery.h index 7712ac7..c9f6a3a 100644 --- a/common/datastorequery.h +++ b/common/datastorequery.h | |||
@@ -25,7 +25,12 @@ | |||
25 | #include "query.h" | 25 | #include "query.h" |
26 | #include "entitybuffer.h" | 26 | #include "entitybuffer.h" |
27 | 27 | ||
28 | |||
29 | class Source; | ||
30 | class FilterBase; | ||
31 | |||
28 | class DataStoreQuery { | 32 | class DataStoreQuery { |
33 | friend class FilterBase; | ||
29 | public: | 34 | public: |
30 | typedef QSharedPointer<DataStoreQuery> Ptr; | 35 | typedef QSharedPointer<DataStoreQuery> Ptr; |
31 | 36 | ||
@@ -42,14 +47,17 @@ protected: | |||
42 | 47 | ||
43 | virtual void readEntity(const QByteArray &key, const BufferCallback &resultCallback); | 48 | virtual void readEntity(const QByteArray &key, const BufferCallback &resultCallback); |
44 | 49 | ||
45 | virtual ResultSet loadInitialResultSet(QSet<QByteArray> &remainingFilters, QByteArray &remainingSorting); | 50 | /* virtual ResultSet loadInitialResultSet(QSet<QByteArray> &remainingFilters, QByteArray &remainingSorting); */ |
46 | virtual ResultSet loadIncrementalResultSet(qint64 baseRevision, QSet<QByteArray> &remainingFilters); | 51 | /* virtual ResultSet loadIncrementalResultSet(qint64 baseRevision, QSet<QByteArray> &remainingFilters); */ |
47 | 52 | ||
48 | virtual ResultSet filterAndSortSet(ResultSet &resultSet, const FilterFunction &filter, const QByteArray &sortProperty); | 53 | /* virtual ResultSet filterAndSortSet(ResultSet &resultSet, const FilterFunction &filter, const QByteArray &sortProperty); */ |
49 | virtual ResultSet postSortFilter(ResultSet &resultSet); | 54 | /* virtual ResultSet postSortFilter(ResultSet &resultSet); */ |
50 | virtual FilterFunction getFilter(const QSet<QByteArray> &remainingFilters); | 55 | /* virtual FilterFunction getFilter(const QSet<QByteArray> &remainingFilters); */ |
51 | 56 | ||
52 | ResultSet createFilteredSet(ResultSet &resultSet, const std::function<bool(const QByteArray &, const Sink::EntityBuffer &buffer)> &); | 57 | ResultSet createFilteredSet(ResultSet &resultSet, const std::function<bool(const QByteArray &, const Sink::EntityBuffer &buffer)> &); |
58 | QVector<QByteArray> loadIncrementalResultSet(qint64 baseRevision); | ||
59 | |||
60 | void setupQuery(); | ||
53 | 61 | ||
54 | Sink::Query mQuery; | 62 | Sink::Query mQuery; |
55 | Sink::Storage::Transaction &mTransaction; | 63 | Sink::Storage::Transaction &mTransaction; |
@@ -58,8 +66,64 @@ protected: | |||
58 | Sink::Storage::NamedDatabase mDb; | 66 | Sink::Storage::NamedDatabase mDb; |
59 | std::function<QVariant(const Sink::Entity &entity, const QByteArray &property)> mGetProperty; | 67 | std::function<QVariant(const Sink::Entity &entity, const QByteArray &property)> mGetProperty; |
60 | bool mInitialQuery; | 68 | bool mInitialQuery; |
69 | QSharedPointer<FilterBase> mCollector; | ||
70 | QSharedPointer<Source> mSource; | ||
71 | }; | ||
72 | |||
73 | |||
74 | class FilterBase { | ||
75 | public: | ||
76 | typedef QSharedPointer<FilterBase> Ptr; | ||
77 | FilterBase(DataStoreQuery *store) | ||
78 | : mDatastore(store) | ||
79 | { | ||
80 | |||
81 | } | ||
82 | |||
83 | FilterBase(FilterBase::Ptr source, DataStoreQuery *store) | ||
84 | : mSource(source), | ||
85 | mDatastore(store) | ||
86 | { | ||
87 | } | ||
88 | |||
89 | virtual ~FilterBase(){} | ||
90 | |||
91 | void readEntity(const QByteArray &key, const std::function<void(const QByteArray &, const Sink::EntityBuffer &buffer)> &callback) | ||
92 | { | ||
93 | Q_ASSERT(mDatastore); | ||
94 | mDatastore->readEntity(key, callback); | ||
95 | } | ||
96 | |||
97 | QVariant getProperty(const Sink::Entity &entity, const QByteArray &property) | ||
98 | { | ||
99 | Q_ASSERT(mDatastore); | ||
100 | return mDatastore->getProperty(entity, property); | ||
101 | } | ||
102 | |||
103 | virtual void skip() { mSource->skip(); }; | ||
104 | |||
105 | //Returns true for as long as a result is available | ||
106 | virtual bool next(const std::function<void(Sink::Operation operation, const QByteArray &uid, const Sink::EntityBuffer &entityBuffer)> &callback) = 0; | ||
107 | |||
108 | QSharedPointer<FilterBase> mSource; | ||
109 | DataStoreQuery *mDatastore; | ||
61 | }; | 110 | }; |
62 | 111 | ||
112 | /* class Reduce { */ | ||
113 | /* QByteArray property; */ | ||
114 | |||
115 | /* //Property - value, reduction result */ | ||
116 | /* QHash<QVariant, QVariant> mReducedValue; */ | ||
117 | /* }; */ | ||
118 | |||
119 | /* class Bloom { */ | ||
120 | /* QByteArray property; */ | ||
121 | |||
122 | /* //Property - value, reduction result */ | ||
123 | /* QSet<QVariant> mPropertyValues; */ | ||
124 | |||
125 | /* }; */ | ||
126 | |||
63 | 127 | ||
64 | 128 | ||
65 | 129 | ||