summaryrefslogtreecommitdiffstats
path: root/common/queryrunner.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-11-28 16:07:15 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-11-28 16:07:15 +0100
commit4926e7f613ea3e03a2865eec66c6a8c1ec0b6516 (patch)
treeda2c7bc3f0243bf065f21b6c272f17b1ea899bce /common/queryrunner.cpp
parent088d8a40c195ce6dcb91556a17f69d26e5586a3e (diff)
downloadsink-4926e7f613ea3e03a2865eec66c6a8c1ec0b6516.tar.gz
sink-4926e7f613ea3e03a2865eec66c6a8c1ec0b6516.zip
Cleanup
Diffstat (limited to 'common/queryrunner.cpp')
-rw-r--r--common/queryrunner.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/common/queryrunner.cpp b/common/queryrunner.cpp
index 4159112..3f62f6a 100644
--- a/common/queryrunner.cpp
+++ b/common/queryrunner.cpp
@@ -21,6 +21,7 @@
21#include <QtConcurrent/QtConcurrentRun> 21#include <QtConcurrent/QtConcurrentRun>
22#include <QFuture> 22#include <QFuture>
23#include <QFutureWatcher> 23#include <QFutureWatcher>
24#include <QTime>
24#include "commands.h" 25#include "commands.h"
25#include "log.h" 26#include "log.h"
26#include "storage.h" 27#include "storage.h"
@@ -45,7 +46,7 @@ static inline ResultSet fullScan(const Akonadi2::Storage::Transaction &transacti
45 qWarning() << "Error during query: " << error.message; 46 qWarning() << "Error during query: " << error.message;
46 }); 47 });
47 48
48 Trace() << "Full scan found " << keys.size() << " results"; 49 Trace() << "Full scan on " << bufferType << " found " << keys.size() << " results";
49 return ResultSet(keys); 50 return ResultSet(keys);
50} 51}
51 52
@@ -97,6 +98,12 @@ QueryRunner<DomainType>::QueryRunner(const Akonadi2::Query &query, const Akonadi
97} 98}
98 99
99template<class DomainType> 100template<class DomainType>
101QueryRunner<DomainType>::~QueryRunner()
102{
103 Trace() << "Stopped query";
104}
105
106template<class DomainType>
100typename Akonadi2::ResultEmitter<typename DomainType::Ptr>::Ptr QueryRunner<DomainType>::emitter() 107typename Akonadi2::ResultEmitter<typename DomainType::Ptr>::Ptr QueryRunner<DomainType>::emitter()
101{ 108{
102 return mResultProvider->emitter(); 109 return mResultProvider->emitter();
@@ -202,7 +209,6 @@ ResultSet QueryRunner<DomainType>::filterSet(const ResultSet &resultSet, const s
202 readEntity(db, resultSetPtr->id(), [this, filter, callback, initialQuery](const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject, Akonadi2::Operation operation) { 209 readEntity(db, resultSetPtr->id(), [this, filter, callback, initialQuery](const Akonadi2::ApplicationDomain::ApplicationDomainType::Ptr &domainObject, Akonadi2::Operation operation) {
203 //Always remove removals, they probably don't match due to non-available properties 210 //Always remove removals, they probably don't match due to non-available properties
204 if (filter(domainObject) || operation == Akonadi2::Operation_Removal) { 211 if (filter(domainObject) || operation == Akonadi2::Operation_Removal) {
205 Trace() << "entity is not filtered" << initialQuery;
206 if (initialQuery) { 212 if (initialQuery) {
207 //We're not interested in removals during the initial query 213 //We're not interested in removals during the initial query
208 if (operation != Akonadi2::Operation_Removal) { 214 if (operation != Akonadi2::Operation_Removal) {
@@ -262,16 +268,24 @@ qint64 QueryRunner<DomainType>::load(const Akonadi2::Query &query, const std::fu
262template<class DomainType> 268template<class DomainType>
263qint64 QueryRunner<DomainType>::executeIncrementalQuery(const Akonadi2::Query &query, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider) 269qint64 QueryRunner<DomainType>::executeIncrementalQuery(const Akonadi2::Query &query, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider)
264{ 270{
271 QTime time;
272 time.start();
273
265 const qint64 baseRevision = resultProvider.revision() + 1; 274 const qint64 baseRevision = resultProvider.revision() + 1;
266 Trace() << "Running incremental query " << baseRevision; 275 Trace() << "Running incremental query " << baseRevision;
267 return load(query, [&](Akonadi2::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) -> ResultSet { 276 auto revision = load(query, [&](Akonadi2::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) -> ResultSet {
268 return loadIncrementalResultSet(baseRevision, query, transaction, remainingFilters); 277 return loadIncrementalResultSet(baseRevision, query, transaction, remainingFilters);
269 }, resultProvider, false); 278 }, resultProvider, false);
279 Trace() << "Incremental query took: " << time.elapsed() << " ms";
280 return revision;
270} 281}
271 282
272template<class DomainType> 283template<class DomainType>
273qint64 QueryRunner<DomainType>::executeInitialQuery(const Akonadi2::Query &query, const typename DomainType::Ptr &parent, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider) 284qint64 QueryRunner<DomainType>::executeInitialQuery(const Akonadi2::Query &query, const typename DomainType::Ptr &parent, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider)
274{ 285{
286 QTime time;
287 time.start();
288
275 auto modifiedQuery = query; 289 auto modifiedQuery = query;
276 if (!query.parentProperty.isEmpty()) { 290 if (!query.parentProperty.isEmpty()) {
277 if (parent) { 291 if (parent) {
@@ -282,9 +296,11 @@ qint64 QueryRunner<DomainType>::executeInitialQuery(const Akonadi2::Query &query
282 modifiedQuery.propertyFilter.insert(query.parentProperty, QVariant()); 296 modifiedQuery.propertyFilter.insert(query.parentProperty, QVariant());
283 } 297 }
284 } 298 }
285 return load(modifiedQuery, [&](Akonadi2::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) -> ResultSet { 299 auto revision = load(modifiedQuery, [&](Akonadi2::Storage::Transaction &transaction, QSet<QByteArray> &remainingFilters) -> ResultSet {
286 return loadInitialResultSet(modifiedQuery, transaction, remainingFilters); 300 return loadInitialResultSet(modifiedQuery, transaction, remainingFilters);
287 }, resultProvider, true); 301 }, resultProvider, true);
302 Trace() << "Initial query took: " << time.elapsed() << " ms";
303 return revision;
288} 304}
289 305
290template class QueryRunner<Akonadi2::ApplicationDomain::Folder>; 306template class QueryRunner<Akonadi2::ApplicationDomain::Folder>;