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 ++++---- tests/dummyresourcebenchmark.cpp | 2 +- tests/resourceconfigtest.cpp | 6 +++--- 7 files changed, 38 insertions(+), 18 deletions(-) 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; diff --git a/tests/dummyresourcebenchmark.cpp b/tests/dummyresourcebenchmark.cpp index 8636bf6..ffaa8f6 100644 --- a/tests/dummyresourcebenchmark.cpp +++ b/tests/dummyresourcebenchmark.cpp @@ -129,7 +129,7 @@ private slots: Sink::Query query; query.resources << "sink.dummy.instance1"; - query.propertyFilter.insert("uid", Sink::Query::Comparator("testuid")); + query.filter("uid", Sink::Query::Comparator("testuid")); auto model = Sink::Store::loadModel(query); QTRY_COMPARE(model->rowCount(QModelIndex()), num); } diff --git a/tests/resourceconfigtest.cpp b/tests/resourceconfigtest.cpp index 021d042..70a37f0 100644 --- a/tests/resourceconfigtest.cpp +++ b/tests/resourceconfigtest.cpp @@ -38,7 +38,7 @@ private slots: Sink::Store::create(res).exec().waitForFinished(); { Sink::Query query; - query.propertyFilter.insert("type", Sink::Query::Comparator("dummyresource")); + query.filter("type", Sink::Query::Comparator("dummyresource")); auto model = Sink::Store::loadModel(query); QTRY_COMPARE(model->rowCount(QModelIndex()), 1); } @@ -46,7 +46,7 @@ private slots: Sink::Store::remove(res).exec().waitForFinished(); { Sink::Query query; - query.propertyFilter.insert("type", Sink::Query::Comparator("dummyresource")); + query.filter("type", Sink::Query::Comparator("dummyresource")); auto model = Sink::Store::loadModel(query); QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); QCOMPARE(model->rowCount(QModelIndex()), 0); @@ -66,7 +66,7 @@ private slots: Sink::Store::create(res).exec().waitForFinished(); { Sink::Query query; - query.propertyFilter.insert("type", Sink::Query::Comparator("dummyresource")); + query.filter("type", Sink::Query::Comparator("dummyresource")); auto model = Sink::Store::loadModel(Sink::Query::CapabilityFilter("foo")); QTRY_COMPARE(model->rowCount(QModelIndex()), 1); } -- cgit v1.2.3