diff options
author | Minijackson <minijackson@riseup.net> | 2018-06-11 11:08:12 +0200 |
---|---|---|
committer | Minijackson <minijackson@riseup.net> | 2018-06-11 11:08:12 +0200 |
commit | a520527c8983bf1cba50fd3d86d406e7e68ddb88 (patch) | |
tree | a2b4a104e00c6a14c11651a2112b6b45ce93babd /common/query.h | |
parent | bdf8ada25760ca9f4054d9ac719c703ce8abc300 (diff) | |
download | sink-a520527c8983bf1cba50fd3d86d406e7e68ddb88.tar.gz sink-a520527c8983bf1cba50fd3d86d406e7e68ddb88.zip |
Add overlap query
Diffstat (limited to 'common/query.h')
-rw-r--r-- | common/query.h | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/common/query.h b/common/query.h index 7130116..cb9c8ca 100644 --- a/common/query.h +++ b/common/query.h | |||
@@ -37,6 +37,7 @@ public: | |||
37 | Contains, | 37 | Contains, |
38 | In, | 38 | In, |
39 | Within, | 39 | Within, |
40 | Overlap, | ||
40 | Fulltext | 41 | Fulltext |
41 | }; | 42 | }; |
42 | 43 | ||
@@ -53,7 +54,7 @@ public: | |||
53 | class SINK_EXPORT Filter { | 54 | class SINK_EXPORT Filter { |
54 | public: | 55 | public: |
55 | QByteArrayList ids; | 56 | QByteArrayList ids; |
56 | QHash<QByteArray, Comparator> propertyFilter; | 57 | QHash<QByteArrayList, Comparator> propertyFilter; |
57 | bool operator==(const Filter &other) const; | 58 | bool operator==(const Filter &other) const; |
58 | }; | 59 | }; |
59 | 60 | ||
@@ -64,7 +65,12 @@ public: | |||
64 | 65 | ||
65 | Comparator getFilter(const QByteArray &property) const | 66 | Comparator getFilter(const QByteArray &property) const |
66 | { | 67 | { |
67 | return mBaseFilterStage.propertyFilter.value(property); | 68 | return mBaseFilterStage.propertyFilter.value({property}); |
69 | } | ||
70 | |||
71 | Comparator getFilter(const QByteArrayList &properties) const | ||
72 | { | ||
73 | return mBaseFilterStage.propertyFilter.value(properties); | ||
68 | } | 74 | } |
69 | 75 | ||
70 | template <class T> | 76 | template <class T> |
@@ -73,9 +79,15 @@ public: | |||
73 | return getFilter(T::name); | 79 | return getFilter(T::name); |
74 | } | 80 | } |
75 | 81 | ||
82 | template <class T1, class T2, class... Rest> | ||
83 | Comparator getFilter() const | ||
84 | { | ||
85 | return getFilter({T1::name, T2::name, Rest::name...}); | ||
86 | } | ||
87 | |||
76 | bool hasFilter(const QByteArray &property) const | 88 | bool hasFilter(const QByteArray &property) const |
77 | { | 89 | { |
78 | return mBaseFilterStage.propertyFilter.contains(property); | 90 | return mBaseFilterStage.propertyFilter.contains({property}); |
79 | } | 91 | } |
80 | 92 | ||
81 | template <class T> | 93 | template <class T> |
@@ -94,7 +106,7 @@ public: | |||
94 | return mId; | 106 | return mId; |
95 | } | 107 | } |
96 | 108 | ||
97 | void setBaseFilters(const QHash<QByteArray, Comparator> &filter) | 109 | void setBaseFilters(const QHash<QByteArrayList, Comparator> &filter) |
98 | { | 110 | { |
99 | mBaseFilterStage.propertyFilter = filter; | 111 | mBaseFilterStage.propertyFilter = filter; |
100 | } | 112 | } |
@@ -104,7 +116,7 @@ public: | |||
104 | mBaseFilterStage = filter; | 116 | mBaseFilterStage = filter; |
105 | } | 117 | } |
106 | 118 | ||
107 | QHash<QByteArray, Comparator> getBaseFilters() const | 119 | QHash<QByteArrayList, Comparator> getBaseFilters() const |
108 | { | 120 | { |
109 | return mBaseFilterStage.propertyFilter; | 121 | return mBaseFilterStage.propertyFilter; |
110 | } | 122 | } |
@@ -131,7 +143,12 @@ public: | |||
131 | 143 | ||
132 | void filter(const QByteArray &property, const QueryBase::Comparator &comparator) | 144 | void filter(const QByteArray &property, const QueryBase::Comparator &comparator) |
133 | { | 145 | { |
134 | mBaseFilterStage.propertyFilter.insert(property, comparator); | 146 | mBaseFilterStage.propertyFilter.insert({property}, comparator); |
147 | } | ||
148 | |||
149 | void filter(const QByteArrayList &properties, const QueryBase::Comparator &comparator) | ||
150 | { | ||
151 | mBaseFilterStage.propertyFilter.insert(properties, comparator); | ||
135 | } | 152 | } |
136 | 153 | ||
137 | void setType(const QByteArray &type) | 154 | void setType(const QByteArray &type) |
@@ -373,6 +390,13 @@ public: | |||
373 | return *this; | 390 | return *this; |
374 | } | 391 | } |
375 | 392 | ||
393 | template <typename T1, typename T2, typename... Rest> | ||
394 | Query &filter(const QueryBase::Comparator &comparator) | ||
395 | { | ||
396 | QueryBase::filter({T1::name, T2::name, Rest::name...}, comparator); | ||
397 | return *this; | ||
398 | } | ||
399 | |||
376 | Query &filter(const QByteArray &id) | 400 | Query &filter(const QByteArray &id) |
377 | { | 401 | { |
378 | QueryBase::filter(id); | 402 | QueryBase::filter(id); |
@@ -465,13 +489,13 @@ public: | |||
465 | template <typename T> | 489 | template <typename T> |
466 | Query &resourceFilter(const ApplicationDomain::ApplicationDomainType &entity) | 490 | Query &resourceFilter(const ApplicationDomain::ApplicationDomainType &entity) |
467 | { | 491 | { |
468 | mResourceFilter.propertyFilter.insert(T::name, Comparator(entity.identifier())); | 492 | mResourceFilter.propertyFilter.insert({T::name}, Comparator(entity.identifier())); |
469 | return *this; | 493 | return *this; |
470 | } | 494 | } |
471 | 495 | ||
472 | Query &resourceFilter(const QByteArray &name, const Comparator &comparator) | 496 | Query &resourceFilter(const QByteArray &name, const Comparator &comparator) |
473 | { | 497 | { |
474 | mResourceFilter.propertyFilter.insert(name, comparator); | 498 | mResourceFilter.propertyFilter.insert({name}, comparator); |
475 | return *this; | 499 | return *this; |
476 | } | 500 | } |
477 | 501 | ||
@@ -531,13 +555,13 @@ public: | |||
531 | template <typename T> | 555 | template <typename T> |
532 | SyncScope &resourceFilter(const ApplicationDomain::ApplicationDomainType &entity) | 556 | SyncScope &resourceFilter(const ApplicationDomain::ApplicationDomainType &entity) |
533 | { | 557 | { |
534 | mResourceFilter.propertyFilter.insert(T::name, Comparator(entity.identifier())); | 558 | mResourceFilter.propertyFilter.insert({T::name}, Comparator(entity.identifier())); |
535 | return *this; | 559 | return *this; |
536 | } | 560 | } |
537 | 561 | ||
538 | SyncScope &resourceFilter(const QByteArray &name, const Comparator &comparator) | 562 | SyncScope &resourceFilter(const QByteArray &name, const Comparator &comparator) |
539 | { | 563 | { |
540 | mResourceFilter.propertyFilter.insert(name, comparator); | 564 | mResourceFilter.propertyFilter.insert({name}, comparator); |
541 | return *this; | 565 | return *this; |
542 | } | 566 | } |
543 | 567 | ||