summaryrefslogtreecommitdiffstats
path: root/common/store.cpp
diff options
context:
space:
mode:
authorRémi Nicole <nicole@kolabsystems.com>2018-06-19 11:04:17 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-06-19 11:10:47 +0200
commit077e3cb30ace5f6ee20ee15e0d32d2bfb197fde0 (patch)
tree3cfdaf0912ef22dba71755b4332354d579f6e7cf /common/store.cpp
parent1ff4456e5dc2b9a9dfa80047f9e5a4a9e1395cdf (diff)
downloadsink-077e3cb30ace5f6ee20ee15e0d32d2bfb197fde0.tar.gz
sink-077e3cb30ace5f6ee20ee15e0d32d2bfb197fde0.zip
Implement Overlap queries
Summary: Notes: - Introduces the concept of queries on multiple properties (which meant changing query's internals a bit) - Dates are stored as well as the "reference" in the index to allow quick filtering without fetching the whole entity - Buckets are weeks starting on Monday (guaranteed by the use of the Julian calendar) - Some size improvements are definitely possible (dates are padded numbers again, not using integer databases, Julian calendar starts at a very old date, etc.) Test Plan: Tested in querytest Reviewers: cmollekopf Reviewed By: cmollekopf Tags: #sink Differential Revision: https://phabricator.kde.org/D13477
Diffstat (limited to 'common/store.cpp')
-rw-r--r--common/store.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/common/store.cpp b/common/store.cpp
index be2488a..0328c7f 100644
--- a/common/store.cpp
+++ b/common/store.cpp
@@ -117,11 +117,13 @@ QPair<typename AggregatingResultEmitter<typename DomainType::Ptr>::Ptr, typenam
117 117
118 //Filter resources by available content types (unless the query already specifies a capability filter) 118 //Filter resources by available content types (unless the query already specifies a capability filter)
119 auto resourceFilter = query.getResourceFilter(); 119 auto resourceFilter = query.getResourceFilter();
120 if (!resourceFilter.propertyFilter.contains(ApplicationDomain::SinkResource::Capabilities::name)) { 120 if (!resourceFilter.propertyFilter.contains({ApplicationDomain::SinkResource::Capabilities::name})) {
121 resourceFilter.propertyFilter.insert(ApplicationDomain::SinkResource::Capabilities::name, Query::Comparator{ApplicationDomain::getTypeName<DomainType>(), Query::Comparator::Contains}); 121 resourceFilter.propertyFilter.insert({ApplicationDomain::SinkResource::Capabilities::name}, Query::Comparator{ApplicationDomain::getTypeName<DomainType>(), Query::Comparator::Contains});
122 } 122 }
123 resourceQuery.setFilter(resourceFilter); 123 resourceQuery.setFilter(resourceFilter);
124 resourceQuery.requestedProperties << resourceFilter.propertyFilter.keys(); 124 for (auto const &properties : resourceFilter.propertyFilter.keys()) {
125 resourceQuery.requestedProperties << properties;
126 }
125 127
126 auto result = facade->load(resourceQuery, resourceCtx); 128 auto result = facade->load(resourceQuery, resourceCtx);
127 auto emitter = result.second; 129 auto emitter = result.second;
@@ -403,8 +405,8 @@ KAsync::Job<void> Store::synchronize(const Sink::SyncScope &scope)
403{ 405{
404 auto resourceFilter = scope.getResourceFilter(); 406 auto resourceFilter = scope.getResourceFilter();
405 //Filter resources by type by default 407 //Filter resources by type by default
406 if (!resourceFilter.propertyFilter.contains(ApplicationDomain::SinkResource::Capabilities::name) && !scope.type().isEmpty()) { 408 if (!resourceFilter.propertyFilter.contains({ApplicationDomain::SinkResource::Capabilities::name}) && !scope.type().isEmpty()) {
407 resourceFilter.propertyFilter.insert(ApplicationDomain::SinkResource::Capabilities::name, Query::Comparator{scope.type(), Query::Comparator::Contains}); 409 resourceFilter.propertyFilter.insert({ApplicationDomain::SinkResource::Capabilities::name}, Query::Comparator{scope.type(), Query::Comparator::Contains});
408 } 410 }
409 Sink::Query query; 411 Sink::Query query;
410 query.setFilter(resourceFilter); 412 query.setFilter(resourceFilter);