diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/query.cpp | 82 | ||||
-rw-r--r-- | common/query.h | 20 |
2 files changed, 94 insertions, 8 deletions
diff --git a/common/query.cpp b/common/query.cpp index a43ef6c..67b74cc 100644 --- a/common/query.cpp +++ b/common/query.cpp | |||
@@ -19,6 +19,9 @@ | |||
19 | */ | 19 | */ |
20 | #include "query.h" | 20 | #include "query.h" |
21 | 21 | ||
22 | #include <QList> | ||
23 | #include <QDataStream> | ||
24 | |||
22 | using namespace Sink; | 25 | using namespace Sink; |
23 | 26 | ||
24 | QDebug operator<<(QDebug dbg, const Sink::Query::Comparator &c) | 27 | QDebug operator<<(QDebug dbg, const Sink::Query::Comparator &c) |
@@ -34,19 +37,85 @@ QDebug operator<<(QDebug dbg, const Sink::Query::Comparator &c) | |||
34 | return dbg.space(); | 37 | return dbg.space(); |
35 | } | 38 | } |
36 | 39 | ||
37 | Query::Comparator::Comparator() : comparator(Invalid) | 40 | QDataStream & operator<< (QDataStream &stream, const Sink::QueryBase::Comparator &comparator) |
41 | { | ||
42 | stream << comparator.comparator; | ||
43 | stream << comparator.value; | ||
44 | return stream; | ||
45 | } | ||
46 | |||
47 | QDataStream & operator>> (QDataStream &stream, Sink::QueryBase::Comparator &comparator) | ||
48 | { | ||
49 | int c; | ||
50 | stream >> c; | ||
51 | comparator.comparator = static_cast<Sink::QueryBase::Comparator::Comparators>(c); | ||
52 | stream >> comparator.value; | ||
53 | return stream; | ||
54 | } | ||
55 | |||
56 | QDataStream & operator<< (QDataStream &stream, const Sink::QueryBase::Filter &filter) | ||
57 | { | ||
58 | stream << filter.ids; | ||
59 | stream << filter.propertyFilter; | ||
60 | return stream; | ||
61 | } | ||
62 | |||
63 | QDataStream & operator>> (QDataStream &stream, Sink::QueryBase::Filter &filter) | ||
64 | { | ||
65 | stream >> filter.ids; | ||
66 | stream >> filter.propertyFilter; | ||
67 | return stream; | ||
68 | } | ||
69 | |||
70 | QDataStream & operator<< (QDataStream &stream, const Sink::QueryBase &query) | ||
71 | { | ||
72 | stream << query.type(); | ||
73 | stream << query.sortProperty(); | ||
74 | stream << query.getFilter(); | ||
75 | return stream; | ||
76 | } | ||
77 | |||
78 | QDataStream & operator>> (QDataStream &stream, Sink::QueryBase &query) | ||
79 | { | ||
80 | QByteArray type; | ||
81 | stream >> type; | ||
82 | query.setType(type); | ||
83 | QByteArray sortProperty; | ||
84 | stream >> sortProperty; | ||
85 | query.setSortProperty(sortProperty); | ||
86 | Sink::QueryBase::Filter filter; | ||
87 | stream >> filter; | ||
88 | query.setFilter(filter); | ||
89 | return stream; | ||
90 | } | ||
91 | |||
92 | bool QueryBase::Filter::operator==(const QueryBase::Filter &other) const | ||
93 | { | ||
94 | auto ret = ids == other.ids && propertyFilter == other.propertyFilter; | ||
95 | return ret; | ||
96 | } | ||
97 | |||
98 | bool QueryBase::operator==(const QueryBase &other) const | ||
99 | { | ||
100 | auto ret = mType == other.mType | ||
101 | && mSortProperty == other.mSortProperty | ||
102 | && mBaseFilterStage == other.mBaseFilterStage; | ||
103 | return ret; | ||
104 | } | ||
105 | |||
106 | QueryBase::Comparator::Comparator() : comparator(Invalid) | ||
38 | { | 107 | { |
39 | } | 108 | } |
40 | 109 | ||
41 | Query::Comparator::Comparator(const QVariant &v) : value(v), comparator(Equals) | 110 | QueryBase::Comparator::Comparator(const QVariant &v) : value(v), comparator(Equals) |
42 | { | 111 | { |
43 | } | 112 | } |
44 | 113 | ||
45 | Query::Comparator::Comparator(const QVariant &v, Comparators c) : value(v), comparator(c) | 114 | QueryBase::Comparator::Comparator(const QVariant &v, Comparators c) : value(v), comparator(c) |
46 | { | 115 | { |
47 | } | 116 | } |
48 | 117 | ||
49 | bool Query::Comparator::matches(const QVariant &v) const | 118 | bool QueryBase::Comparator::matches(const QVariant &v) const |
50 | { | 119 | { |
51 | switch(comparator) { | 120 | switch(comparator) { |
52 | case Equals: | 121 | case Equals: |
@@ -73,3 +142,8 @@ bool Query::Comparator::matches(const QVariant &v) const | |||
73 | } | 142 | } |
74 | return false; | 143 | return false; |
75 | } | 144 | } |
145 | |||
146 | bool Query::Comparator::operator==(const Query::Comparator &other) const | ||
147 | { | ||
148 | return value == other.value && comparator == other.comparator; | ||
149 | } | ||
diff --git a/common/query.h b/common/query.h index b858610..70b6d63 100644 --- a/common/query.h +++ b/common/query.h | |||
@@ -42,6 +42,7 @@ public: | |||
42 | Comparator(const QVariant &v); | 42 | Comparator(const QVariant &v); |
43 | Comparator(const QVariant &v, Comparators c); | 43 | Comparator(const QVariant &v, Comparators c); |
44 | bool matches(const QVariant &v) const; | 44 | bool matches(const QVariant &v) const; |
45 | bool operator==(const Comparator &other) const; | ||
45 | 46 | ||
46 | QVariant value; | 47 | QVariant value; |
47 | Comparators comparator; | 48 | Comparators comparator; |
@@ -51,8 +52,11 @@ public: | |||
51 | public: | 52 | public: |
52 | QByteArrayList ids; | 53 | QByteArrayList ids; |
53 | QHash<QByteArray, Comparator> propertyFilter; | 54 | QHash<QByteArray, Comparator> propertyFilter; |
55 | bool operator==(const Filter &other) const; | ||
54 | }; | 56 | }; |
55 | 57 | ||
58 | bool operator==(const QueryBase &other) const; | ||
59 | |||
56 | Comparator getFilter(const QByteArray &property) const | 60 | Comparator getFilter(const QByteArray &property) const |
57 | { | 61 | { |
58 | return mBaseFilterStage.propertyFilter.value(property); | 62 | return mBaseFilterStage.propertyFilter.value(property); |
@@ -68,6 +72,11 @@ public: | |||
68 | mBaseFilterStage.propertyFilter = filter; | 72 | mBaseFilterStage.propertyFilter = filter; |
69 | } | 73 | } |
70 | 74 | ||
75 | void setFilter(const Filter &filter) | ||
76 | { | ||
77 | mBaseFilterStage = filter; | ||
78 | } | ||
79 | |||
71 | QHash<QByteArray, Comparator> getBaseFilters() const | 80 | QHash<QByteArray, Comparator> getBaseFilters() const |
72 | { | 81 | { |
73 | return mBaseFilterStage.propertyFilter; | 82 | return mBaseFilterStage.propertyFilter; |
@@ -110,12 +119,12 @@ public: | |||
110 | 119 | ||
111 | void setSortProperty(const QByteArray &property) | 120 | void setSortProperty(const QByteArray &property) |
112 | { | 121 | { |
113 | mSortPorperty = property; | 122 | mSortProperty = property; |
114 | } | 123 | } |
115 | 124 | ||
116 | QByteArray sortProperty() const | 125 | QByteArray sortProperty() const |
117 | { | 126 | { |
118 | return mSortPorperty; | 127 | return mSortProperty; |
119 | } | 128 | } |
120 | 129 | ||
121 | class FilterStage { | 130 | class FilterStage { |
@@ -244,7 +253,7 @@ private: | |||
244 | Filter mBaseFilterStage; | 253 | Filter mBaseFilterStage; |
245 | QList<QSharedPointer<FilterStage>> mFilterStages; | 254 | QList<QSharedPointer<FilterStage>> mFilterStages; |
246 | QByteArray mType; | 255 | QByteArray mType; |
247 | QByteArray mSortPorperty; | 256 | QByteArray mSortProperty; |
248 | }; | 257 | }; |
249 | 258 | ||
250 | /** | 259 | /** |
@@ -458,7 +467,10 @@ private: | |||
458 | 467 | ||
459 | } | 468 | } |
460 | 469 | ||
461 | QDebug operator<<(QDebug dbg, const Sink::Query::Comparator &c); | 470 | QDebug SINK_EXPORT operator<<(QDebug dbg, const Sink::Query::Comparator &c); |
471 | QDataStream & SINK_EXPORT operator<< (QDataStream &stream, const Sink::QueryBase &query); | ||
472 | QDataStream & SINK_EXPORT operator>> (QDataStream &stream, Sink::QueryBase &query); | ||
462 | 473 | ||
463 | Q_DECLARE_OPERATORS_FOR_FLAGS(Sink::Query::Flags) | 474 | Q_DECLARE_OPERATORS_FOR_FLAGS(Sink::Query::Flags) |
475 | Q_DECLARE_METATYPE(Sink::QueryBase); | ||
464 | Q_DECLARE_METATYPE(Sink::Query); | 476 | Q_DECLARE_METATYPE(Sink::Query); |