From 9040c66f5fb617a057b9c362ac9a937fe9dd0739 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 29 Apr 2016 15:32:12 +0200 Subject: The offset is per parent --- common/queryrunner.cpp | 11 ++++++----- common/queryrunner.h | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'common') diff --git a/common/queryrunner.cpp b/common/queryrunner.cpp index d86d26e..bbaae7b 100644 --- a/common/queryrunner.cpp +++ b/common/queryrunner.cpp @@ -77,7 +77,7 @@ private: template QueryRunner::QueryRunner(const Sink::Query &query, const Sink::ResourceAccessInterface::Ptr &resourceAccess, const QByteArray &instanceIdentifier, const DomainTypeAdaptorFactoryInterface::Ptr &factory, const QByteArray &bufferType) - : QueryRunnerBase(), mResourceAccess(resourceAccess), mResultProvider(new ResultProvider), mOffset(0), mBatchSize(query.limit) + : QueryRunnerBase(), mResourceAccess(resourceAccess), mResultProvider(new ResultProvider), mBatchSize(query.limit) { Trace() << "Starting query"; if (query.limit && query.sortProperty.isEmpty()) { @@ -85,15 +85,16 @@ QueryRunner::QueryRunner(const Sink::Query &query, const Sink::Resou } // We delegate loading of initial data to the result provider, so it can decide for itself what it needs to load. mResultProvider->setFetcher([=](const typename DomainType::Ptr &parent) { - Trace() << "Running fetcher. Offset: " << mOffset << " Batchsize: " << mBatchSize; + const QByteArray parentId = parent ? parent->identifier() : QByteArray(); + Trace() << "Running fetcher. Offset: " << mOffset[parentId] << " Batchsize: " << mBatchSize; auto resultProvider = mResultProvider; async::run >([=]() { QueryWorker worker(query, instanceIdentifier, factory, bufferType, mResultTransformation); - const auto newRevisionAndReplayedEntities = worker.executeInitialQuery(query, parent, *resultProvider, mOffset, mBatchSize); + const auto newRevisionAndReplayedEntities = worker.executeInitialQuery(query, parent, *resultProvider, mOffset[parentId], mBatchSize); return newRevisionAndReplayedEntities; }) - .template then>([query, this](const QPair &newRevisionAndReplayedEntities) { - mOffset += newRevisionAndReplayedEntities.second; + .template then>([=](const QPair &newRevisionAndReplayedEntities) { + mOffset[parentId] += newRevisionAndReplayedEntities.second; // Only send the revision replayed information if we're connected to the resource, there's no need to start the resource otherwise. if (query.liveQuery) { mResourceAccess->sendRevisionReplayedCommand(newRevisionAndReplayedEntities.first); diff --git a/common/queryrunner.h b/common/queryrunner.h index adaf297..e6d5a54 100644 --- a/common/queryrunner.h +++ b/common/queryrunner.h @@ -97,6 +97,6 @@ private: QSharedPointer mResourceAccess; QSharedPointer> mResultProvider; ResultTransformation mResultTransformation; - int mOffset; + QHash mOffset; int mBatchSize; }; -- cgit v1.2.3