summaryrefslogtreecommitdiffstats
path: root/common/datastorequery.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/datastorequery.cpp')
-rw-r--r--common/datastorequery.cpp14
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
408void DataStoreQuery::setupQuery() 408void 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;