diff options
-rw-r--r-- | common/query.h | 22 | ||||
-rw-r--r-- | common/queryrunner.cpp | 6 | ||||
-rw-r--r-- | tests/mailquerybenchmark.cpp | 4 | ||||
-rw-r--r-- | tests/querytest.cpp | 2 |
4 files changed, 20 insertions, 14 deletions
diff --git a/common/query.h b/common/query.h index 57f8a4d..8459850 100644 --- a/common/query.h +++ b/common/query.h | |||
@@ -363,30 +363,24 @@ public: | |||
363 | } | 363 | } |
364 | 364 | ||
365 | 365 | ||
366 | Query(const ApplicationDomain::Entity &value) : limit(0) | 366 | Query(const ApplicationDomain::Entity &value) : mLimit(0) |
367 | { | 367 | { |
368 | filter(value.identifier()); | 368 | filter(value.identifier()); |
369 | resourceFilter(value.resourceInstanceIdentifier()); | 369 | resourceFilter(value.resourceInstanceIdentifier()); |
370 | } | 370 | } |
371 | 371 | ||
372 | Query(Flags flags = Flags()) : limit(0), mFlags(flags) | 372 | Query(Flags flags = Flags()) : mLimit(0), mFlags(flags) |
373 | { | 373 | { |
374 | } | 374 | } |
375 | 375 | ||
376 | QByteArrayList requestedProperties; | 376 | QByteArrayList requestedProperties; |
377 | QByteArray parentProperty; | 377 | QByteArray parentProperty; |
378 | int limit; | ||
379 | 378 | ||
380 | void setFlags(Flags flags) | 379 | void setFlags(Flags flags) |
381 | { | 380 | { |
382 | mFlags = flags; | 381 | mFlags = flags; |
383 | } | 382 | } |
384 | 383 | ||
385 | void setLimit(int l) | ||
386 | { | ||
387 | limit = l; | ||
388 | } | ||
389 | |||
390 | bool liveQuery() const | 384 | bool liveQuery() const |
391 | { | 385 | { |
392 | return mFlags.testFlag(LiveQuery); | 386 | return mFlags.testFlag(LiveQuery); |
@@ -397,6 +391,17 @@ public: | |||
397 | return mFlags.testFlag(SynchronousQuery); | 391 | return mFlags.testFlag(SynchronousQuery); |
398 | } | 392 | } |
399 | 393 | ||
394 | Query &limit(int l) | ||
395 | { | ||
396 | mLimit = l; | ||
397 | return *this; | ||
398 | } | ||
399 | |||
400 | int limit() const | ||
401 | { | ||
402 | return mLimit; | ||
403 | } | ||
404 | |||
400 | Filter getResourceFilter() const | 405 | Filter getResourceFilter() const |
401 | { | 406 | { |
402 | return mResourceFilter; | 407 | return mResourceFilter; |
@@ -434,6 +439,7 @@ public: | |||
434 | } | 439 | } |
435 | 440 | ||
436 | private: | 441 | private: |
442 | int mLimit; | ||
437 | Flags mFlags; | 443 | Flags mFlags; |
438 | Filter mResourceFilter; | 444 | Filter mResourceFilter; |
439 | }; | 445 | }; |
diff --git a/common/queryrunner.cpp b/common/queryrunner.cpp index 99f9c2d..b6c9aee 100644 --- a/common/queryrunner.cpp +++ b/common/queryrunner.cpp | |||
@@ -60,10 +60,10 @@ private: | |||
60 | 60 | ||
61 | template <class DomainType> | 61 | template <class DomainType> |
62 | QueryRunner<DomainType>::QueryRunner(const Sink::Query &query, const Sink::ResourceContext &context, const QByteArray &bufferType) | 62 | QueryRunner<DomainType>::QueryRunner(const Sink::Query &query, const Sink::ResourceContext &context, const QByteArray &bufferType) |
63 | : QueryRunnerBase(), mResourceContext(context), mResourceAccess(mResourceContext.resourceAccess()), mResultProvider(new ResultProvider<typename DomainType::Ptr>), mBatchSize(query.limit) | 63 | : QueryRunnerBase(), mResourceContext(context), mResourceAccess(mResourceContext.resourceAccess()), mResultProvider(new ResultProvider<typename DomainType::Ptr>), mBatchSize(query.limit()) |
64 | { | 64 | { |
65 | SinkTrace() << "Starting query. Is live:" << query.liveQuery() << " Limit: " << query.limit; | 65 | SinkTrace() << "Starting query. Is live:" << query.liveQuery() << " Limit: " << query.limit(); |
66 | if (query.limit && query.sortProperty().isEmpty()) { | 66 | if (query.limit() && query.sortProperty().isEmpty()) { |
67 | SinkWarning() << "A limited query without sorting is typically a bad idea."; | 67 | SinkWarning() << "A limited query without sorting is typically a bad idea."; |
68 | } | 68 | } |
69 | auto guardPtr = QPointer<QObject>(&guard); | 69 | auto guardPtr = QPointer<QObject>(&guard); |
diff --git a/tests/mailquerybenchmark.cpp b/tests/mailquerybenchmark.cpp index e2c6864..702239d 100644 --- a/tests/mailquerybenchmark.cpp +++ b/tests/mailquerybenchmark.cpp | |||
@@ -102,7 +102,7 @@ class MailQueryBenchmark : public QObject | |||
102 | emitter->onInitialResultSetComplete([&done](const Mail::Ptr &mail) { done = true; }); | 102 | emitter->onInitialResultSetComplete([&done](const Mail::Ptr &mail) { done = true; }); |
103 | emitter->fetch(Mail::Ptr()); | 103 | emitter->fetch(Mail::Ptr()); |
104 | QTRY_VERIFY(done); | 104 | QTRY_VERIFY(done); |
105 | QCOMPARE(list.size(), query.limit); | 105 | QCOMPARE(list.size(), query.limit()); |
106 | 106 | ||
107 | const auto elapsed = time.elapsed(); | 107 | const auto elapsed = time.elapsed(); |
108 | 108 | ||
@@ -157,7 +157,7 @@ private slots: | |||
157 | .request<Mail::Date>(); | 157 | .request<Mail::Date>(); |
158 | query.sort<Mail::Date>(); | 158 | query.sort<Mail::Date>(); |
159 | query.filter<Mail::Folder>("folder1"); | 159 | query.filter<Mail::Folder>("folder1"); |
160 | query.limit = 1000; | 160 | query.limit(1000); |
161 | 161 | ||
162 | populateDatabase(50000); | 162 | populateDatabase(50000); |
163 | testLoad(query, 50000); | 163 | testLoad(query, 50000); |
diff --git a/tests/querytest.cpp b/tests/querytest.cpp index 594e55c..d823304 100644 --- a/tests/querytest.cpp +++ b/tests/querytest.cpp | |||
@@ -443,7 +443,7 @@ private slots: | |||
443 | query.resourceFilter("sink.dummy.instance1"); | 443 | query.resourceFilter("sink.dummy.instance1"); |
444 | query.filter<Mail::Folder>(*folderEntity); | 444 | query.filter<Mail::Folder>(*folderEntity); |
445 | query.sort<Mail::Date>(); | 445 | query.sort<Mail::Date>(); |
446 | query.limit = 1; | 446 | query.limit(1); |
447 | 447 | ||
448 | // Ensure all local data is processed | 448 | // Ensure all local data is processed |
449 | VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(QByteArrayList() << "sink.dummy.instance1")); | 449 | VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(QByteArrayList() << "sink.dummy.instance1")); |