summaryrefslogtreecommitdiffstats
path: root/common/datastorequery.h
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-09-23 01:35:13 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-09-23 01:35:13 +0200
commit52ad48c8bd755a2fde249296d6017853538f478f (patch)
treed3adbee13e49d2525720069cb7d9ca6b5876dbd8 /common/datastorequery.h
parent6fc76bc690e5a2e7748936fa835338d820c7e7de (diff)
downloadsink-52ad48c8bd755a2fde249296d6017853538f478f.tar.gz
sink-52ad48c8bd755a2fde249296d6017853538f478f.zip
A new query system
Diffstat (limited to 'common/datastorequery.h')
-rw-r--r--common/datastorequery.h74
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
29class Source;
30class FilterBase;
31
28class DataStoreQuery { 32class DataStoreQuery {
33 friend class FilterBase;
29public: 34public:
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
74class FilterBase {
75public:
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