diff options
Diffstat (limited to 'common/queryrunner.cpp')
-rw-r--r-- | common/queryrunner.cpp | 24 |
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 | ||
99 | template<class DomainType> | 100 | template<class DomainType> |
101 | QueryRunner<DomainType>::~QueryRunner() | ||
102 | { | ||
103 | Trace() << "Stopped query"; | ||
104 | } | ||
105 | |||
106 | template<class DomainType> | ||
100 | typename Akonadi2::ResultEmitter<typename DomainType::Ptr>::Ptr QueryRunner<DomainType>::emitter() | 107 | typename 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 | |||
262 | template<class DomainType> | 268 | template<class DomainType> |
263 | qint64 QueryRunner<DomainType>::executeIncrementalQuery(const Akonadi2::Query &query, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider) | 269 | qint64 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 | ||
272 | template<class DomainType> | 283 | template<class DomainType> |
273 | qint64 QueryRunner<DomainType>::executeInitialQuery(const Akonadi2::Query &query, const typename DomainType::Ptr &parent, Akonadi2::ResultProviderInterface<typename DomainType::Ptr> &resultProvider) | 284 | qint64 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 | ||
290 | template class QueryRunner<Akonadi2::ApplicationDomain::Folder>; | 306 | template class QueryRunner<Akonadi2::ApplicationDomain::Folder>; |