diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-10-05 00:09:30 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-10-05 00:09:30 +0200 |
commit | e470f65cad943f8a3065c6f5f6287adcc704627e (patch) | |
tree | 3bc3531b0f32b67d09cdc281f5f53bdf1d819bd7 /common/datastorequery.cpp | |
parent | 3ae3ef9676bd7fdcb45064f9a1b397c90478b4b7 (diff) | |
download | sink-e470f65cad943f8a3065c6f5f6287adcc704627e.tar.gz sink-e470f65cad943f8a3065c6f5f6287adcc704627e.zip |
Specify base set as part of the filter stages in the query.
Diffstat (limited to 'common/datastorequery.cpp')
-rw-r--r-- | common/datastorequery.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/common/datastorequery.cpp b/common/datastorequery.cpp index dac171c..0cc30e5 100644 --- a/common/datastorequery.cpp +++ b/common/datastorequery.cpp | |||
@@ -407,23 +407,25 @@ QByteArrayList DataStoreQuery::executeSubquery(const Query &subquery) | |||
407 | 407 | ||
408 | void DataStoreQuery::setupQuery() | 408 | void DataStoreQuery::setupQuery() |
409 | { | 409 | { |
410 | for (const auto &k : mQuery.propertyFilter.keys()) { | 410 | auto baseFilters = mQuery.getBaseFilters(); |
411 | for (const auto &k : baseFilters.keys()) { | ||
411 | if (k == ApplicationDomain::Entity::Resource::name) { | 412 | if (k == ApplicationDomain::Entity::Resource::name) { |
412 | continue; | 413 | continue; |
413 | } | 414 | } |
414 | const auto comparator = mQuery.propertyFilter.value(k); | 415 | const auto comparator = baseFilters.value(k); |
415 | if (comparator.value.canConvert<Query>()) { | 416 | if (comparator.value.canConvert<Query>()) { |
416 | SinkTrace() << "Executing subquery for property: " << k; | 417 | SinkTrace() << "Executing subquery for property: " << k; |
417 | const auto result = executeSubquery(comparator.value.value<Query>()); | 418 | const auto result = executeSubquery(comparator.value.value<Query>()); |
418 | mQuery.propertyFilter.insert(k, Query::Comparator(QVariant::fromValue(result), Query::Comparator::In)); | 419 | baseFilters.insert(k, Query::Comparator(QVariant::fromValue(result), Query::Comparator::In)); |
419 | } | 420 | } |
420 | } | 421 | } |
422 | mQuery.setBaseFilters(baseFilters); | ||
421 | 423 | ||
422 | FilterBase::Ptr baseSet; | 424 | FilterBase::Ptr baseSet; |
423 | QSet<QByteArray> remainingFilters = mQuery.getBaseFilters().keys().toSet(); | 425 | QSet<QByteArray> remainingFilters = mQuery.getBaseFilters().keys().toSet(); |
424 | QByteArray appliedSorting; | 426 | QByteArray appliedSorting; |
425 | if (!mQuery.ids.isEmpty()) { | 427 | if (!mQuery.ids().isEmpty()) { |
426 | mSource = Source::Ptr::create(mQuery.ids.toVector(), this); | 428 | mSource = Source::Ptr::create(mQuery.ids().toVector(), this); |
427 | baseSet = mSource; | 429 | baseSet = mSource; |
428 | } else { | 430 | } else { |
429 | QSet<QByteArray> appliedFilters; | 431 | QSet<QByteArray> appliedFilters; |
@@ -457,7 +459,7 @@ void DataStoreQuery::setupQuery() | |||
457 | /* } */ | 459 | /* } */ |
458 | 460 | ||
459 | //Setup the rest of the filter stages on top of the base set | 461 | //Setup the rest of the filter stages on top of the base set |
460 | for (const auto &stage : mQuery.filterStages) { | 462 | for (const auto &stage : mQuery.filterStages.mid(1)) { |
461 | if (auto filter = stage.dynamicCast<Query::Filter>()) { | 463 | if (auto filter = stage.dynamicCast<Query::Filter>()) { |
462 | auto f = Filter::Ptr::create(baseSet, this); | 464 | auto f = Filter::Ptr::create(baseSet, this); |
463 | f->propertyFilter = filter->propertyFilter; | 465 | f->propertyFilter = filter->propertyFilter; |