From 577c2c344079c1a87d3d93be5f957e5f2d935bff Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 27 Sep 2016 11:25:49 +0200 Subject: Don't access the propertyFilter list directly. --- common/query.h | 28 +++++++++++++++++++++++----- common/queryrunner.cpp | 4 ++-- common/resourcefacade.cpp | 4 ++-- common/synchronizer.cpp | 4 +++- common/typeindex.cpp | 8 ++++---- 5 files changed, 34 insertions(+), 14 deletions(-) (limited to 'common') diff --git a/common/query.h b/common/query.h index 3021fe2..0c6260b 100644 --- a/common/query.h +++ b/common/query.h @@ -235,22 +235,40 @@ public: template Query &filter(const QVariant &value) { - propertyFilter.insert(T::name, value); - return *this; + return filter(T::name, value); } template Query &filter(const Comparator &comparator) { - propertyFilter.insert(T::name, comparator); + return filter(T::name, comparator); + } + + Query &filter(const QByteArray &property, const Comparator &comparator) + { + propertyFilter.insert(property, comparator); return *this; } + Comparator getFilter(const QByteArray &property) const + { + return propertyFilter.value(property); + } + + bool hasFilter(const QByteArray &property) const + { + return propertyFilter.contains(property); + } + + QHash getBaseFilters() const + { + return propertyFilter; + } + template Query &filter(const ApplicationDomain::Entity &value) { - propertyFilter.insert(T::name, QVariant::fromValue(value.identifier())); - return *this; + return filter(T::name, QVariant::fromValue(value.identifier())); } Query &filter(const ApplicationDomain::SinkResource &resource) diff --git a/common/queryrunner.cpp b/common/queryrunner.cpp index 11459f1..d3f8f66 100644 --- a/common/queryrunner.cpp +++ b/common/queryrunner.cpp @@ -248,10 +248,10 @@ QPair QueryWorker::executeInitialQuery( if (!query.parentProperty.isEmpty()) { if (parent) { SinkTrace() << "Running initial query for parent:" << parent->identifier(); - modifiedQuery.propertyFilter.insert(query.parentProperty, Query::Comparator(parent->identifier())); + modifiedQuery.filter(query.parentProperty, Query::Comparator(parent->identifier())); } else { SinkTrace() << "Running initial query for toplevel"; - modifiedQuery.propertyFilter.insert(query.parentProperty, Query::Comparator(QVariant())); + modifiedQuery.filter(query.parentProperty, Query::Comparator(QVariant())); } } diff --git a/common/resourcefacade.cpp b/common/resourcefacade.cpp index 1c56fe5..391b1d1 100644 --- a/common/resourcefacade.cpp +++ b/common/resourcefacade.cpp @@ -68,7 +68,7 @@ LocalStorageQueryRunner::LocalStorageQueryRunner(const Query &query, for (const auto &res : entries.keys()) { const auto type = entries.value(res); - if (query.propertyFilter.contains("type") && query.propertyFilter.value("type").value.toByteArray() != type) { + if (query.hasFilter("type") && query.getFilter("type").value.toByteArray() != type) { SinkTrace() << "Skipping due to type."; continue; } @@ -76,7 +76,7 @@ LocalStorageQueryRunner::LocalStorageQueryRunner(const Query &query, continue; } const auto configurationValues = mConfigStore.get(res); - if (!matchesFilter(query.propertyFilter, configurationValues)){ + if (!matchesFilter(query.getBaseFilters(), configurationValues)){ SinkTrace() << "Skipping due to filter."; continue; } diff --git a/common/synchronizer.cpp b/common/synchronizer.cpp index 8de45a9..53db82f 100644 --- a/common/synchronizer.cpp +++ b/common/synchronizer.cpp @@ -197,7 +197,9 @@ void Synchronizer::createOrModify(const QByteArray &bufferType, const QByteArray if (!found) { if (!mergeCriteria.isEmpty()) { Sink::Query query; - query.propertyFilter = mergeCriteria; + for (auto it = mergeCriteria.constBegin(); it != mergeCriteria.constEnd(); it++) { + query.filter(it.key(), it.value()); + } bool merge = false; Sink::EntityReader reader(mResourceType, mResourceInstanceIdentifier, transaction()); reader.query(query, diff --git a/common/typeindex.cpp b/common/typeindex.cpp index f537493..272237c 100644 --- a/common/typeindex.cpp +++ b/common/typeindex.cpp @@ -142,9 +142,9 @@ QVector TypeIndex::query(const Sink::Query &query, QSet { QVector keys; for (auto it = mSortedProperties.constBegin(); it != mSortedProperties.constEnd(); it++) { - if (query.propertyFilter.contains(it.key()) && query.sortProperty == it.value()) { + if (query.hasFilter(it.key()) && query.sortProperty == it.value()) { Index index(indexName(it.key(), it.value()), transaction); - const auto lookupKey = getByteArray(query.propertyFilter.value(it.key()).value); + const auto lookupKey = getByteArray(query.getFilter(it.key()).value); SinkTrace() << "looking for " << lookupKey; index.lookup(lookupKey, [&](const QByteArray &value) { keys << value; }, [it](const Index::Error &error) { SinkWarning() << "Error in index: " << error.message << it.key() << it.value(); }, true); @@ -155,9 +155,9 @@ QVector TypeIndex::query(const Sink::Query &query, QSet } } for (const auto &property : mProperties) { - if (query.propertyFilter.contains(property)) { + if (query.hasFilter(property)) { Index index(indexName(property), transaction); - const auto lookupKey = getByteArray(query.propertyFilter.value(property).value); + const auto lookupKey = getByteArray(query.getFilter(property).value); index.lookup( lookupKey, [&](const QByteArray &value) { keys << value; }, [property](const Index::Error &error) { SinkWarning() << "Error in index: " << error.message << property; }); appliedFilters << property; -- cgit v1.2.3