Changeset View
Changeset View
Standalone View
Standalone View
common/query.h
Show All 31 Lines | |||||
32 | public: | 32 | public: | ||
33 | struct SINK_EXPORT Comparator { | 33 | struct SINK_EXPORT Comparator { | ||
34 | enum Comparators { | 34 | enum Comparators { | ||
35 | Invalid, | 35 | Invalid, | ||
36 | Equals, | 36 | Equals, | ||
37 | Contains, | 37 | Contains, | ||
38 | In, | 38 | In, | ||
39 | Within, | 39 | Within, | ||
40 | Overlap, | ||||
40 | Fulltext | 41 | Fulltext | ||
41 | }; | 42 | }; | ||
42 | 43 | | |||
43 | Comparator(); | 44 | Comparator(); | ||
44 | Comparator(const QVariant &v); | 45 | Comparator(const QVariant &v); | ||
45 | Comparator(const QVariant &v, Comparators c); | 46 | Comparator(const QVariant &v, Comparators c); | ||
46 | bool matches(const QVariant &v) const; | 47 | bool matches(const QVariant &v) const; | ||
47 | bool operator==(const Comparator &other) const; | 48 | bool operator==(const Comparator &other) const; | ||
48 | 49 | | |||
49 | QVariant value; | 50 | QVariant value; | ||
50 | Comparators comparator; | 51 | Comparators comparator; | ||
51 | }; | 52 | }; | ||
52 | 53 | | |||
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 | | |||
60 | QueryBase() = default; | 61 | QueryBase() = default; | ||
61 | QueryBase(const QByteArray &type) : mType(type) {} | 62 | QueryBase(const QByteArray &type) : mType(type) {} | ||
62 | 63 | | |||
63 | bool operator==(const QueryBase &other) const; | 64 | bool operator==(const QueryBase &other) const; | ||
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> | ||
71 | Comparator getFilter() const | 77 | Comparator getFilter() const | ||
72 | { | 78 | { | ||
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> | ||
82 | bool hasFilter() const | 94 | bool hasFilter() const | ||
83 | { | 95 | { | ||
84 | return hasFilter(T::name); | 96 | return hasFilter(T::name); | ||
85 | } | 97 | } | ||
86 | 98 | | |||
87 | void setId(const QByteArray &id) | 99 | void setId(const QByteArray &id) | ||
88 | { | 100 | { | ||
89 | mId = id; | 101 | mId = id; | ||
90 | } | 102 | } | ||
91 | 103 | | |||
92 | QByteArray id() const | 104 | QByteArray id() const | ||
93 | { | 105 | { | ||
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 | } | ||
101 | 113 | | |||
102 | void setFilter(const Filter &filter) | 114 | void setFilter(const Filter &filter) | ||
103 | { | 115 | { | ||
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 | } | ||
111 | 123 | | |||
112 | Filter getFilter() const | 124 | Filter getFilter() const | ||
113 | { | 125 | { | ||
114 | return mBaseFilterStage; | 126 | return mBaseFilterStage; | ||
115 | } | 127 | } | ||
Show All 10 Lines | |||||
126 | 138 | | |||
127 | void filter(const QByteArrayList &ids) | 139 | void filter(const QByteArrayList &ids) | ||
128 | { | 140 | { | ||
129 | mBaseFilterStage.ids << ids; | 141 | mBaseFilterStage.ids << ids; | ||
130 | } | 142 | } | ||
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) | ||
138 | { | 155 | { | ||
139 | mType = type; | 156 | mType = type; | ||
140 | } | 157 | } | ||
141 | 158 | | |||
142 | template<typename T> | 159 | template<typename T> | ||
▲ Show 20 Lines • Show All 225 Lines • ▼ Show 20 Line(s) | 326 | public: | |||
368 | 385 | | |||
369 | template <typename T> | 386 | template <typename T> | ||
370 | Query &filter(const QueryBase::Comparator &comparator) | 387 | Query &filter(const QueryBase::Comparator &comparator) | ||
371 | { | 388 | { | ||
372 | QueryBase::filter(T::name, comparator); | 389 | QueryBase::filter(T::name, comparator); | ||
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); | ||
379 | return *this; | 403 | return *this; | ||
380 | } | 404 | } | ||
381 | 405 | | |||
382 | Query &filter(const QByteArrayList &ids) | 406 | Query &filter(const QByteArrayList &ids) | ||
383 | { | 407 | { | ||
▲ Show 20 Lines • Show All 76 Lines • ▼ Show 20 Line(s) | |||||
460 | { | 484 | { | ||
461 | mResourceFilter.ids << id; | 485 | mResourceFilter.ids << id; | ||
462 | return *this; | 486 | return *this; | ||
463 | } | 487 | } | ||
464 | 488 | | |||
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 | | |||
478 | template <typename T> | 502 | template <typename T> | ||
479 | Query &resourceContainsFilter(const QVariant &value) | 503 | Query &resourceContainsFilter(const QVariant &value) | ||
480 | { | 504 | { | ||
481 | return resourceFilter(T::name, Comparator(value, Comparator::Contains)); | 505 | return resourceFilter(T::name, Comparator(value, Comparator::Contains)); | ||
482 | } | 506 | } | ||
▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Line(s) | 523 | public: | |||
526 | { | 550 | { | ||
527 | mResourceFilter.ids << id; | 551 | mResourceFilter.ids << id; | ||
528 | return *this; | 552 | return *this; | ||
529 | } | 553 | } | ||
530 | 554 | | |||
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 | | |||
544 | template <typename T> | 568 | template <typename T> | ||
545 | SyncScope &resourceContainsFilter(const QVariant &value) | 569 | SyncScope &resourceContainsFilter(const QVariant &value) | ||
546 | { | 570 | { | ||
547 | return resourceFilter(T::name, Comparator(value, Comparator::Contains)); | 571 | return resourceFilter(T::name, Comparator(value, Comparator::Contains)); | ||
548 | } | 572 | } | ||
▲ Show 20 Lines • Show All 46 Lines • Show Last 20 Lines |