diff options
Diffstat (limited to 'common/queryrunner.cpp')
-rw-r--r-- | common/queryrunner.cpp | 132 |
1 files changed, 66 insertions, 66 deletions
diff --git a/common/queryrunner.cpp b/common/queryrunner.cpp index 89610e3..25d69b1 100644 --- a/common/queryrunner.cpp +++ b/common/queryrunner.cpp | |||
@@ -26,7 +26,7 @@ | |||
26 | #include "domainadaptor.h" | 26 | #include "domainadaptor.h" |
27 | #include "asyncutils.h" | 27 | #include "asyncutils.h" |
28 | 28 | ||
29 | using namespace Akonadi2; | 29 | using namespace Sink; |
30 | 30 | ||
31 | /* | 31 | /* |
32 | * This class wraps the actual query implementation. | 32 | * This class wraps the actual query implementation. |
@@ -38,34 +38,34 @@ template<typename DomainType> | |||
38 | class QueryWorker : public QObject | 38 | class QueryWorker : public QObject |
39 | { | 39 | { |
40 | public: | 40 | public: |
41 | QueryWorker(const Akonadi2::Query &query, const QByteArray &instanceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &, const QByteArray &bufferType); | 41 | QueryWorker(const Sink::Query &query, const QByteArray &instanceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &, const QByteArray &bufferType); |
42 | virtual ~QueryWorker(); | 42 | virtual ~QueryWorker(); |
43 | 43 | ||
44 | qint64 executeIncrementalQuery(const Akonadi2::Query &query, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider); | 44 | qint64 executeIncrementalQuery(const Sink::Query &query, Sink::ResultProviderInterface<typename DomainType::Ptr> &resultProvider); |
45 | qint64 executeInitialQuery(const Akonadi2::Query &query, const typename DomainType::Ptr &parent, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider); | 45 | qint64 executeInitialQuery(const Sink::Query &query, const typename DomainType::Ptr &parent, Sink::ResultProviderInterface<typename DomainType::Ptr> &resultProvider); |
46 | 46 | ||
47 | private: | 47 | private: |
48 | static void replaySet(ResultSet &resultSet, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider, const QList<QByteArray> &properties); | 48 | static void replaySet(ResultSet &resultSet, Sink::ResultProviderInterface<typename DomainType::Ptr> &resultProvider, const QList<QByteArray> &properties); |
49 | 49 | ||
50 | void readEntity(const Akonadi2::Storage::NamedDatabase &db, const QByteArray &key, const std::function<void(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &, Akonadi2::Operation)> &resultCallback); | 50 | void readEntity(const Sink::Storage::NamedDatabase &db, const QByteArray &key, const std::function<void(const Sink::ApplicationDomain::ApplicationDomainType::Ptr &, Sink::Operation)> &resultCallback); |
51 | 51 | ||
52 | ResultSet loadInitialResultSet(const Akonadi2::Query &query, Akonadi2::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters); | 52 | ResultSet loadInitialResultSet(const Sink::Query &query, Sink::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters); |
53 | ResultSet loadIncrementalResultSet(qint64 baseRevision, const Akonadi2::Query &query, Akonadi2::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters); | 53 | ResultSet loadIncrementalResultSet(qint64 baseRevision, const Sink::Query &query, Sink::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters); |
54 | 54 | ||
55 | ResultSet filterSet(const ResultSet &resultSet, const std::function<bool(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject)> &filter, const Akonadi2::Storage::NamedDatabase &db, bool initialQuery); | 55 | ResultSet filterSet(const ResultSet &resultSet, const std::function<bool(const Sink::ApplicationDomain::ApplicationDomainType::Ptr &domainObject)> &filter, const Sink::Storage::NamedDatabase &db, bool initialQuery); |
56 | std::function<bool(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject)> getFilter(const QSet<QByteArray> remainingFilters, const Akonadi2::Query &query); | 56 | std::function<bool(const Sink::ApplicationDomain::ApplicationDomainType::Ptr &domainObject)> getFilter(const QSet<QByteArray> remainingFilters, const Sink::Query &query); |
57 | qint64 load(const Akonadi2::Query &query, const std::function<ResultSet(Akonadi2::Storage::Transaction &, QSet<QByteArray> &)> &baseSetRetriever, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider, bool initialQuery); | 57 | qint64 load(const Sink::Query &query, const std::function<ResultSet(Sink::Storage::Transaction &, QSet<QByteArray> &)> &baseSetRetriever, Sink::ResultProviderInterface<typename DomainType::Ptr> &resultProvider, bool initialQuery); |
58 | 58 | ||
59 | private: | 59 | private: |
60 | DomainTypeAdaptorFactoryInterface::Ptr mDomainTypeAdaptorFactory; | 60 | DomainTypeAdaptorFactoryInterface::Ptr mDomainTypeAdaptorFactory; |
61 | QByteArray mResourceInstanceIdentifier; | 61 | QByteArray mResourceInstanceIdentifier; |
62 | QByteArray mBufferType; | 62 | QByteArray mBufferType; |
63 | Akonadi2::Query mQuery; | 63 | Sink::Query mQuery; |
64 | }; | 64 | }; |
65 | 65 | ||
66 | 66 | ||
67 | template<class DomainType> | 67 | template<class DomainType> |
68 | QueryRunner<DomainType>::QueryRunner(const Akonadi2::Query &query, const Akonadi2::ResourceAccessInterface::Ptr &resourceAccess, const QByteArray &instanceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &factory, const QByteArray &bufferType) | 68 | QueryRunner<DomainType>::QueryRunner(const Sink::Query &query, const Sink::ResourceAccessInterface::Ptr &resourceAccess, const QByteArray &instanceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &factory, const QByteArray &bufferType) |
69 | : QueryRunnerBase(), | 69 | : QueryRunnerBase(), |
70 | mResourceAccess(resourceAccess), | 70 | mResourceAccess(resourceAccess), |
71 | mResultProvider(new ResultProvider<typename DomainType::Ptr>) | 71 | mResultProvider(new ResultProvider<typename DomainType::Ptr>) |
@@ -107,7 +107,7 @@ QueryRunner<DomainType>::QueryRunner(const Akonadi2::Query &query, const Akonadi | |||
107 | //Ensure the connection is open, if it wasn't already opened | 107 | //Ensure the connection is open, if it wasn't already opened |
108 | //TODO If we are not connected already, we have to check for the latest revision once connected, otherwise we could miss some updates | 108 | //TODO If we are not connected already, we have to check for the latest revision once connected, otherwise we could miss some updates |
109 | mResourceAccess->open(); | 109 | mResourceAccess->open(); |
110 | QObject::connect(mResourceAccess.data(), &Akonadi2::ResourceAccess::revisionChanged, this, &QueryRunner::revisionChanged); | 110 | QObject::connect(mResourceAccess.data(), &Sink::ResourceAccess::revisionChanged, this, &QueryRunner::revisionChanged); |
111 | } | 111 | } |
112 | } | 112 | } |
113 | 113 | ||
@@ -118,26 +118,26 @@ QueryRunner<DomainType>::~QueryRunner() | |||
118 | } | 118 | } |
119 | 119 | ||
120 | template<class DomainType> | 120 | template<class DomainType> |
121 | typename Akonadi2::ResultEmitter<typename DomainType::Ptr>::Ptr QueryRunner<DomainType>::emitter() | 121 | typename Sink::ResultEmitter<typename DomainType::Ptr>::Ptr QueryRunner<DomainType>::emitter() |
122 | { | 122 | { |
123 | return mResultProvider->emitter(); | 123 | return mResultProvider->emitter(); |
124 | } | 124 | } |
125 | 125 | ||
126 | 126 | ||
127 | 127 | ||
128 | static inline ResultSet fullScan(const Akonadi2::Storage::Transaction &transaction, const QByteArray &bufferType) | 128 | static inline ResultSet fullScan(const Sink::Storage::Transaction &transaction, const QByteArray &bufferType) |
129 | { | 129 | { |
130 | //TODO use a result set with an iterator, to read values on demand | 130 | //TODO use a result set with an iterator, to read values on demand |
131 | QVector<QByteArray> keys; | 131 | QVector<QByteArray> keys; |
132 | transaction.openDatabase(bufferType + ".main").scan(QByteArray(), [&](const QByteArray &key, const QByteArray &value) -> bool { | 132 | transaction.openDatabase(bufferType + ".main").scan(QByteArray(), [&](const QByteArray &key, const QByteArray &value) -> bool { |
133 | //Skip internals | 133 | //Skip internals |
134 | if (Akonadi2::Storage::isInternalKey(key)) { | 134 | if (Sink::Storage::isInternalKey(key)) { |
135 | return true; | 135 | return true; |
136 | } | 136 | } |
137 | keys << Akonadi2::Storage::uidFromKey(key); | 137 | keys << Sink::Storage::uidFromKey(key); |
138 | return true; | 138 | return true; |
139 | }, | 139 | }, |
140 | [](const Akonadi2::Storage::Error &error) { | 140 | [](const Sink::Storage::Error &error) { |
141 | qWarning() << "Error during query: " << error.message; | 141 | qWarning() << "Error during query: " << error.message; |
142 | }); | 142 | }); |
143 | 143 | ||
@@ -147,7 +147,7 @@ static inline ResultSet fullScan(const Akonadi2::Storage::Transaction &transacti | |||
147 | 147 | ||
148 | 148 | ||
149 | template<class DomainType> | 149 | template<class DomainType> |
150 | QueryWorker<DomainType>::QueryWorker(const Akonadi2::Query &query, const QByteArray &instanceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &factory, const QByteArray &bufferType) | 150 | QueryWorker<DomainType>::QueryWorker(const Sink::Query &query, const QByteArray &instanceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &factory, const QByteArray &bufferType) |
151 | : QObject(), | 151 | : QObject(), |
152 | mDomainTypeAdaptorFactory(factory), | 152 | mDomainTypeAdaptorFactory(factory), |
153 | mResourceInstanceIdentifier(instanceIdentifier), | 153 | mResourceInstanceIdentifier(instanceIdentifier), |
@@ -164,23 +164,23 @@ QueryWorker<DomainType>::~QueryWorker() | |||
164 | } | 164 | } |
165 | 165 | ||
166 | template<class DomainType> | 166 | template<class DomainType> |
167 | void QueryWorker<DomainType>::replaySet(ResultSet &resultSet, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider, const QList<QByteArray> &properties) | 167 | void QueryWorker<DomainType>::replaySet(ResultSet &resultSet, Sink::ResultProviderInterface<typename DomainType::Ptr> &resultProvider, const QList<QByteArray> &properties) |
168 | { | 168 | { |
169 | int counter = 0; | 169 | int counter = 0; |
170 | while (resultSet.next([&resultProvider, &counter, &properties](const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &value, Akonadi2::Operation operation) -> bool { | 170 | while (resultSet.next([&resultProvider, &counter, &properties](const Sink::ApplicationDomain::ApplicationDomainType::Ptr &value, Sink::Operation operation) -> bool { |
171 | counter++; | 171 | counter++; |
172 | switch (operation) { | 172 | switch (operation) { |
173 | case Akonadi2::Operation_Creation: | 173 | case Sink::Operation_Creation: |
174 | // Trace() << "Got creation"; | 174 | // Trace() << "Got creation"; |
175 | resultProvider.add(Akonadi2::ApplicationDomain::ApplicationDomainType::getInMemoryRepresentation<DomainType>(*value, properties).template staticCast<DomainType>()); | 175 | resultProvider.add(Sink::ApplicationDomain::ApplicationDomainType::getInMemoryRepresentation<DomainType>(*value, properties).template staticCast<DomainType>()); |
176 | break; | 176 | break; |
177 | case Akonadi2::Operation_Modification: | 177 | case Sink::Operation_Modification: |
178 | // Trace() << "Got modification"; | 178 | // Trace() << "Got modification"; |
179 | resultProvider.modify(Akonadi2::ApplicationDomain::ApplicationDomainType::getInMemoryRepresentation<DomainType>(*value, properties).template staticCast<DomainType>()); | 179 | resultProvider.modify(Sink::ApplicationDomain::ApplicationDomainType::getInMemoryRepresentation<DomainType>(*value, properties).template staticCast<DomainType>()); |
180 | break; | 180 | break; |
181 | case Akonadi2::Operation_Removal: | 181 | case Sink::Operation_Removal: |
182 | // Trace() << "Got removal"; | 182 | // Trace() << "Got removal"; |
183 | resultProvider.remove(Akonadi2::ApplicationDomain::ApplicationDomainType::getInMemoryRepresentation<DomainType>(*value, properties).template staticCast<DomainType>()); | 183 | resultProvider.remove(Sink::ApplicationDomain::ApplicationDomainType::getInMemoryRepresentation<DomainType>(*value, properties).template staticCast<DomainType>()); |
184 | break; | 184 | break; |
185 | } | 185 | } |
186 | return true; | 186 | return true; |
@@ -189,35 +189,35 @@ void QueryWorker<DomainType>::replaySet(ResultSet &resultSet, Akonadi2::ResultPr | |||
189 | } | 189 | } |
190 | 190 | ||
191 | template<class DomainType> | 191 | template<class DomainType> |
192 | void QueryWorker<DomainType>::readEntity(const Akonadi2::Storage::NamedDatabase &db, const QByteArray &key, const std::function<void(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &, Akonadi2::Operation)> &resultCallback) | 192 | void QueryWorker<DomainType>::readEntity(const Sink::Storage::NamedDatabase &db, const QByteArray &key, const std::function<void(const Sink::ApplicationDomain::ApplicationDomainType::Ptr &, Sink::Operation)> &resultCallback) |
193 | { | 193 | { |
194 | //This only works for a 1:1 mapping of resource to domain types. | 194 | //This only works for a 1:1 mapping of resource to domain types. |
195 | //Not i.e. for tags that are stored as flags in each entity of an imap store. | 195 | //Not i.e. for tags that are stored as flags in each entity of an imap store. |
196 | //additional properties that don't have a 1:1 mapping (such as separately stored tags), | 196 | //additional properties that don't have a 1:1 mapping (such as separately stored tags), |
197 | //could be added to the adaptor. | 197 | //could be added to the adaptor. |
198 | db.findLatest(key, [=](const QByteArray &key, const QByteArray &value) -> bool { | 198 | db.findLatest(key, [=](const QByteArray &key, const QByteArray &value) -> bool { |
199 | Akonadi2::EntityBuffer buffer(value.data(), value.size()); | 199 | Sink::EntityBuffer buffer(value.data(), value.size()); |
200 | const Akonadi2::Entity &entity = buffer.entity(); | 200 | const Sink::Entity &entity = buffer.entity(); |
201 | const auto metadataBuffer = Akonadi2::EntityBuffer::readBuffer<Akonadi2::Metadata>(entity.metadata()); | 201 | const auto metadataBuffer = Sink::EntityBuffer::readBuffer<Sink::Metadata>(entity.metadata()); |
202 | Q_ASSERT(metadataBuffer); | 202 | Q_ASSERT(metadataBuffer); |
203 | const qint64 revision = metadataBuffer ? metadataBuffer->revision() : -1; | 203 | const qint64 revision = metadataBuffer ? metadataBuffer->revision() : -1; |
204 | const auto operation = metadataBuffer ? metadataBuffer->operation() : Akonadi2::Operation_Creation; | 204 | const auto operation = metadataBuffer ? metadataBuffer->operation() : Sink::Operation_Creation; |
205 | resultCallback(DomainType::Ptr::create(mResourceInstanceIdentifier, Akonadi2::Storage::uidFromKey(key), revision, mDomainTypeAdaptorFactory->createAdaptor(entity)), operation); | 205 | resultCallback(DomainType::Ptr::create(mResourceInstanceIdentifier, Sink::Storage::uidFromKey(key), revision, mDomainTypeAdaptorFactory->createAdaptor(entity)), operation); |
206 | return false; | 206 | return false; |
207 | }, | 207 | }, |
208 | [](const Akonadi2::Storage::Error &error) { | 208 | [](const Sink::Storage::Error &error) { |
209 | qWarning() << "Error during query: " << error.message; | 209 | qWarning() << "Error during query: " << error.message; |
210 | }); | 210 | }); |
211 | } | 211 | } |
212 | 212 | ||
213 | template<class DomainType> | 213 | template<class DomainType> |
214 | ResultSet QueryWorker<DomainType>::loadInitialResultSet(const Akonadi2::Query &query, Akonadi2::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) | 214 | ResultSet QueryWorker<DomainType>::loadInitialResultSet(const Sink::Query &query, Sink::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) |
215 | { | 215 | { |
216 | if (!query.ids.isEmpty()) { | 216 | if (!query.ids.isEmpty()) { |
217 | return ResultSet(query.ids.toVector()); | 217 | return ResultSet(query.ids.toVector()); |
218 | } | 218 | } |
219 | QSet<QByteArray> appliedFilters; | 219 | QSet<QByteArray> appliedFilters; |
220 | auto resultSet = Akonadi2::ApplicationDomain::TypeImplementation<DomainType>::queryIndexes(query, mResourceInstanceIdentifier, appliedFilters, transaction); | 220 | auto resultSet = Sink::ApplicationDomain::TypeImplementation<DomainType>::queryIndexes(query, mResourceInstanceIdentifier, appliedFilters, transaction); |
221 | remainingFilters = query.propertyFilter.keys().toSet() - appliedFilters; | 221 | remainingFilters = query.propertyFilter.keys().toSet() - appliedFilters; |
222 | 222 | ||
223 | //We do a full scan if there were no indexes available to create the initial set. | 223 | //We do a full scan if there were no indexes available to create the initial set. |
@@ -229,24 +229,24 @@ ResultSet QueryWorker<DomainType>::loadInitialResultSet(const Akonadi2::Query &q | |||
229 | } | 229 | } |
230 | 230 | ||
231 | template<class DomainType> | 231 | template<class DomainType> |
232 | ResultSet QueryWorker<DomainType>::loadIncrementalResultSet(qint64 baseRevision, const Akonadi2::Query &query, Akonadi2::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) | 232 | ResultSet QueryWorker<DomainType>::loadIncrementalResultSet(qint64 baseRevision, const Sink::Query &query, Sink::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) |
233 | { | 233 | { |
234 | const auto bufferType = mBufferType; | 234 | const auto bufferType = mBufferType; |
235 | auto revisionCounter = QSharedPointer<qint64>::create(baseRevision); | 235 | auto revisionCounter = QSharedPointer<qint64>::create(baseRevision); |
236 | remainingFilters = query.propertyFilter.keys().toSet(); | 236 | remainingFilters = query.propertyFilter.keys().toSet(); |
237 | return ResultSet([bufferType, revisionCounter, &transaction]() -> QByteArray { | 237 | return ResultSet([bufferType, revisionCounter, &transaction]() -> QByteArray { |
238 | const qint64 topRevision = Akonadi2::Storage::maxRevision(transaction); | 238 | const qint64 topRevision = Sink::Storage::maxRevision(transaction); |
239 | //Spit out the revision keys one by one. | 239 | //Spit out the revision keys one by one. |
240 | while (*revisionCounter <= topRevision) { | 240 | while (*revisionCounter <= topRevision) { |
241 | const auto uid = Akonadi2::Storage::getUidFromRevision(transaction, *revisionCounter); | 241 | const auto uid = Sink::Storage::getUidFromRevision(transaction, *revisionCounter); |
242 | const auto type = Akonadi2::Storage::getTypeFromRevision(transaction, *revisionCounter); | 242 | const auto type = Sink::Storage::getTypeFromRevision(transaction, *revisionCounter); |
243 | // Trace() << "Revision" << *revisionCounter << type << uid; | 243 | // Trace() << "Revision" << *revisionCounter << type << uid; |
244 | if (type != bufferType) { | 244 | if (type != bufferType) { |
245 | //Skip revision | 245 | //Skip revision |
246 | *revisionCounter += 1; | 246 | *revisionCounter += 1; |
247 | continue; | 247 | continue; |
248 | } | 248 | } |
249 | const auto key = Akonadi2::Storage::assembleKey(uid, *revisionCounter); | 249 | const auto key = Sink::Storage::assembleKey(uid, *revisionCounter); |
250 | *revisionCounter += 1; | 250 | *revisionCounter += 1; |
251 | return key; | 251 | return key; |
252 | } | 252 | } |
@@ -257,21 +257,21 @@ ResultSet QueryWorker<DomainType>::loadIncrementalResultSet(qint64 baseRevision, | |||
257 | } | 257 | } |
258 | 258 | ||
259 | template<class DomainType> | 259 | template<class DomainType> |
260 | ResultSet QueryWorker<DomainType>::filterSet(const ResultSet &resultSet, const std::function<bool(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject)> &filter, const Akonadi2::Storage::NamedDatabase &db, bool initialQuery) | 260 | ResultSet QueryWorker<DomainType>::filterSet(const ResultSet &resultSet, const std::function<bool(const Sink::ApplicationDomain::ApplicationDomainType::Ptr &domainObject)> &filter, const Sink::Storage::NamedDatabase &db, bool initialQuery) |
261 | { | 261 | { |
262 | auto resultSetPtr = QSharedPointer<ResultSet>::create(resultSet); | 262 | auto resultSetPtr = QSharedPointer<ResultSet>::create(resultSet); |
263 | 263 | ||
264 | //Read through the source values and return whatever matches the filter | 264 | //Read through the source values and return whatever matches the filter |
265 | std::function<bool(std::function<void(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &, Akonadi2::Operation)>)> generator = [this, resultSetPtr, &db, filter, initialQuery](std::function<void(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &, Akonadi2::Operation)> callback) -> bool { | 265 | std::function<bool(std::function<void(const Sink::ApplicationDomain::ApplicationDomainType::Ptr &, Sink::Operation)>)> generator = [this, resultSetPtr, &db, filter, initialQuery](std::function<void(const Sink::ApplicationDomain::ApplicationDomainType::Ptr &, Sink::Operation)> callback) -> bool { |
266 | if (resultSetPtr->next()) { | 266 | if (resultSetPtr->next()) { |
267 | //readEntity is only necessary if we actually want to filter or know the operation type (but not a big deal if we do it always I guess) | 267 | //readEntity is only necessary if we actually want to filter or know the operation type (but not a big deal if we do it always I guess) |
268 | readEntity(db, resultSetPtr->id(), [this, filter, callback, initialQuery](const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject, Akonadi2::Operation operation) { | 268 | readEntity(db, resultSetPtr->id(), [this, filter, callback, initialQuery](const Sink::ApplicationDomain::ApplicationDomainType::Ptr &domainObject, Sink::Operation operation) { |
269 | //Always remove removals, they probably don't match due to non-available properties | 269 | //Always remove removals, they probably don't match due to non-available properties |
270 | if (filter(domainObject) || operation == Akonadi2::Operation_Removal) { | 270 | if (filter(domainObject) || operation == Sink::Operation_Removal) { |
271 | if (initialQuery) { | 271 | if (initialQuery) { |
272 | //We're not interested in removals during the initial query | 272 | //We're not interested in removals during the initial query |
273 | if (operation != Akonadi2::Operation_Removal) { | 273 | if (operation != Sink::Operation_Removal) { |
274 | callback(domainObject, Akonadi2::Operation_Creation); | 274 | callback(domainObject, Sink::Operation_Creation); |
275 | } | 275 | } |
276 | } else { | 276 | } else { |
277 | callback(domainObject, operation); | 277 | callback(domainObject, operation); |
@@ -287,9 +287,9 @@ ResultSet QueryWorker<DomainType>::filterSet(const ResultSet &resultSet, const s | |||
287 | } | 287 | } |
288 | 288 | ||
289 | template<class DomainType> | 289 | template<class DomainType> |
290 | std::function<bool(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject)> QueryWorker<DomainType>::getFilter(const QSet<QByteArray> remainingFilters, const Akonadi2::Query &query) | 290 | std::function<bool(const Sink::ApplicationDomain::ApplicationDomainType::Ptr &domainObject)> QueryWorker<DomainType>::getFilter(const QSet<QByteArray> remainingFilters, const Sink::Query &query) |
291 | { | 291 | { |
292 | return [remainingFilters, query](const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject) -> bool { | 292 | return [remainingFilters, query](const Sink::ApplicationDomain::ApplicationDomainType::Ptr &domainObject) -> bool { |
293 | if (!query.ids.isEmpty()) { | 293 | if (!query.ids.isEmpty()) { |
294 | if (!query.ids.contains(domainObject->identifier())) { | 294 | if (!query.ids.contains(domainObject->identifier())) { |
295 | return false; | 295 | return false; |
@@ -312,32 +312,32 @@ std::function<bool(const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr | |||
312 | } | 312 | } |
313 | 313 | ||
314 | template<class DomainType> | 314 | template<class DomainType> |
315 | qint64 QueryWorker<DomainType>::load(const Akonadi2::Query &query, const std::function<ResultSet(Akonadi2::Storage::Transaction &, QSet<QByteArray> &)> &baseSetRetriever, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider, bool initialQuery) | 315 | qint64 QueryWorker<DomainType>::load(const Sink::Query &query, const std::function<ResultSet(Sink::Storage::Transaction &, QSet<QByteArray> &)> &baseSetRetriever, Sink::ResultProviderInterface<typename DomainType::Ptr> &resultProvider, bool initialQuery) |
316 | { | 316 | { |
317 | Akonadi2::Storage storage(Akonadi2::storageLocation(), mResourceInstanceIdentifier); | 317 | Sink::Storage storage(Sink::storageLocation(), mResourceInstanceIdentifier); |
318 | storage.setDefaultErrorHandler([](const Akonadi2::Storage::Error &error) { | 318 | storage.setDefaultErrorHandler([](const Sink::Storage::Error &error) { |
319 | Warning() << "Error during query: " << error.store << error.message; | 319 | Warning() << "Error during query: " << error.store << error.message; |
320 | }); | 320 | }); |
321 | auto transaction = storage.createTransaction(Akonadi2::Storage::ReadOnly); | 321 | auto transaction = storage.createTransaction(Sink::Storage::ReadOnly); |
322 | auto db = transaction.openDatabase(mBufferType + ".main"); | 322 | auto db = transaction.openDatabase(mBufferType + ".main"); |
323 | 323 | ||
324 | QSet<QByteArray> remainingFilters; | 324 | QSet<QByteArray> remainingFilters; |
325 | auto resultSet = baseSetRetriever(transaction, remainingFilters); | 325 | auto resultSet = baseSetRetriever(transaction, remainingFilters); |
326 | auto filteredSet = filterSet(resultSet, getFilter(remainingFilters, query), db, initialQuery); | 326 | auto filteredSet = filterSet(resultSet, getFilter(remainingFilters, query), db, initialQuery); |
327 | replaySet(filteredSet, resultProvider, query.requestedProperties); | 327 | replaySet(filteredSet, resultProvider, query.requestedProperties); |
328 | resultProvider.setRevision(Akonadi2::Storage::maxRevision(transaction)); | 328 | resultProvider.setRevision(Sink::Storage::maxRevision(transaction)); |
329 | return Akonadi2::Storage::maxRevision(transaction); | 329 | return Sink::Storage::maxRevision(transaction); |
330 | } | 330 | } |
331 | 331 | ||
332 | template<class DomainType> | 332 | template<class DomainType> |
333 | qint64 QueryWorker<DomainType>::executeIncrementalQuery(const Akonadi2::Query &query, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider) | 333 | qint64 QueryWorker<DomainType>::executeIncrementalQuery(const Sink::Query &query, Sink::ResultProviderInterface<typename DomainType::Ptr> &resultProvider) |
334 | { | 334 | { |
335 | QTime time; | 335 | QTime time; |
336 | time.start(); | 336 | time.start(); |
337 | 337 | ||
338 | const qint64 baseRevision = resultProvider.revision() + 1; | 338 | const qint64 baseRevision = resultProvider.revision() + 1; |
339 | Trace() << "Running incremental query " << baseRevision; | 339 | Trace() << "Running incremental query " << baseRevision; |
340 | auto revision = load(query, [&](Akonadi2::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) -> ResultSet { | 340 | auto revision = load(query, [&](Sink::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) -> ResultSet { |
341 | return loadIncrementalResultSet(baseRevision, query, transaction, remainingFilters); | 341 | return loadIncrementalResultSet(baseRevision, query, transaction, remainingFilters); |
342 | }, resultProvider, false); | 342 | }, resultProvider, false); |
343 | Trace() << "Incremental query took: " << time.elapsed() << " ms"; | 343 | Trace() << "Incremental query took: " << time.elapsed() << " ms"; |
@@ -345,7 +345,7 @@ qint64 QueryWorker<DomainType>::executeIncrementalQuery(const Akonadi2::Query &q | |||
345 | } | 345 | } |
346 | 346 | ||
347 | template<class DomainType> | 347 | template<class DomainType> |
348 | qint64 QueryWorker<DomainType>::executeInitialQuery(const Akonadi2::Query &query, const typename DomainType::Ptr &parent, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider) | 348 | qint64 QueryWorker<DomainType>::executeInitialQuery(const Sink::Query &query, const typename DomainType::Ptr &parent, Sink::ResultProviderInterface<typename DomainType::Ptr> &resultProvider) |
349 | { | 349 | { |
350 | QTime time; | 350 | QTime time; |
351 | time.start(); | 351 | time.start(); |
@@ -360,7 +360,7 @@ qint64 QueryWorker<DomainType>::executeInitialQuery(const Akonadi2::Query &query | |||
360 | modifiedQuery.propertyFilter.insert(query.parentProperty, QVariant()); | 360 | modifiedQuery.propertyFilter.insert(query.parentProperty, QVariant()); |
361 | } | 361 | } |
362 | } | 362 | } |
363 | auto revision = load(modifiedQuery, [&](Akonadi2::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) -> ResultSet { | 363 | auto revision = load(modifiedQuery, [&](Sink::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) -> ResultSet { |
364 | return loadInitialResultSet(modifiedQuery, transaction, remainingFilters); | 364 | return loadInitialResultSet(modifiedQuery, transaction, remainingFilters); |
365 | }, resultProvider, true); | 365 | }, resultProvider, true); |
366 | Trace() << "Initial query took: " << time.elapsed() << " ms"; | 366 | Trace() << "Initial query took: " << time.elapsed() << " ms"; |
@@ -368,9 +368,9 @@ qint64 QueryWorker<DomainType>::executeInitialQuery(const Akonadi2::Query &query | |||
368 | return revision; | 368 | return revision; |
369 | } | 369 | } |
370 | 370 | ||
371 | template class QueryRunner<Akonadi2::ApplicationDomain::Folder>; | 371 | template class QueryRunner<Sink::ApplicationDomain::Folder>; |
372 | template class QueryRunner<Akonadi2::ApplicationDomain::Mail>; | 372 | template class QueryRunner<Sink::ApplicationDomain::Mail>; |
373 | template class QueryRunner<Akonadi2::ApplicationDomain::Event>; | 373 | template class QueryRunner<Sink::ApplicationDomain::Event>; |
374 | template class QueryWorker<Akonadi2::ApplicationDomain::Folder>; | 374 | template class QueryWorker<Sink::ApplicationDomain::Folder>; |
375 | template class QueryWorker<Akonadi2::ApplicationDomain::Mail>; | 375 | template class QueryWorker<Sink::ApplicationDomain::Mail>; |
376 | template class QueryWorker<Akonadi2::ApplicationDomain::Event>; | 376 | template class QueryWorker<Sink::ApplicationDomain::Event>; |