summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-11-06 10:12:24 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-11-06 10:12:24 +0100
commite511841292d241fb9175a712184900ae69ed8685 (patch)
tree0fea577b192a61e64618049a9e7306c7a1d5177e
parentc04755a772cbc6b2cf3a80e9c3c17b718e153c55 (diff)
downloadsink-e511841292d241fb9175a712184900ae69ed8685.tar.gz
sink-e511841292d241fb9175a712184900ae69ed8685.zip
Query serialization.
-rw-r--r--common/query.cpp82
-rw-r--r--common/query.h20
-rw-r--r--tests/querytest.cpp35
3 files changed, 129 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
22using namespace Sink; 25using namespace Sink;
23 26
24QDebug operator<<(QDebug dbg, const Sink::Query::Comparator &c) 27QDebug 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
37Query::Comparator::Comparator() : comparator(Invalid) 40QDataStream & operator<< (QDataStream &stream, const Sink::QueryBase::Comparator &comparator)
41{
42 stream << comparator.comparator;
43 stream << comparator.value;
44 return stream;
45}
46
47QDataStream & 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
56QDataStream & operator<< (QDataStream &stream, const Sink::QueryBase::Filter &filter)
57{
58 stream << filter.ids;
59 stream << filter.propertyFilter;
60 return stream;
61}
62
63QDataStream & operator>> (QDataStream &stream, Sink::QueryBase::Filter &filter)
64{
65 stream >> filter.ids;
66 stream >> filter.propertyFilter;
67 return stream;
68}
69
70QDataStream & 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
78QDataStream & 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
92bool QueryBase::Filter::operator==(const QueryBase::Filter &other) const
93{
94 auto ret = ids == other.ids && propertyFilter == other.propertyFilter;
95 return ret;
96}
97
98bool 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
106QueryBase::Comparator::Comparator() : comparator(Invalid)
38{ 107{
39} 108}
40 109
41Query::Comparator::Comparator(const QVariant &v) : value(v), comparator(Equals) 110QueryBase::Comparator::Comparator(const QVariant &v) : value(v), comparator(Equals)
42{ 111{
43} 112}
44 113
45Query::Comparator::Comparator(const QVariant &v, Comparators c) : value(v), comparator(c) 114QueryBase::Comparator::Comparator(const QVariant &v, Comparators c) : value(v), comparator(c)
46{ 115{
47} 116}
48 117
49bool Query::Comparator::matches(const QVariant &v) const 118bool 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
146bool 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
461QDebug operator<<(QDebug dbg, const Sink::Query::Comparator &c); 470QDebug SINK_EXPORT operator<<(QDebug dbg, const Sink::Query::Comparator &c);
471QDataStream & SINK_EXPORT operator<< (QDataStream &stream, const Sink::QueryBase &query);
472QDataStream & SINK_EXPORT operator>> (QDataStream &stream, Sink::QueryBase &query);
462 473
463Q_DECLARE_OPERATORS_FOR_FLAGS(Sink::Query::Flags) 474Q_DECLARE_OPERATORS_FOR_FLAGS(Sink::Query::Flags)
475Q_DECLARE_METATYPE(Sink::QueryBase);
464Q_DECLARE_METATYPE(Sink::Query); 476Q_DECLARE_METATYPE(Sink::Query);
diff --git a/tests/querytest.cpp b/tests/querytest.cpp
index a5e1caf..06c6ad6 100644
--- a/tests/querytest.cpp
+++ b/tests/querytest.cpp
@@ -45,6 +45,41 @@ private slots:
45 qDebug(); 45 qDebug();
46 } 46 }
47 47
48 void testSerialization()
49 {
50 qRegisterMetaTypeStreamOperators<Sink::QueryBase>();
51
52 auto type = QByteArray("type");
53 auto sort = QByteArray("sort");
54
55 Sink::QueryBase::Filter filter;
56 filter.ids << "id";
57 filter.propertyFilter.insert("foo", QVariant::fromValue(QByteArray("bar")));
58
59 Sink::Query query;
60 query.setFilter(filter);
61 query.setType(type);
62 query.setSortProperty(sort);
63
64 QByteArray data;
65 {
66 QDataStream stream(&data, QIODevice::WriteOnly);
67 stream << query;
68 }
69
70 Sink::Query deserializedQuery;
71 {
72 QDataStream stream(&data, QIODevice::ReadOnly);
73 stream >> deserializedQuery;
74 }
75
76 QCOMPARE(deserializedQuery.type(), type);
77 QCOMPARE(deserializedQuery.sortProperty(), sort);
78 QCOMPARE(deserializedQuery.getFilter().ids, filter.ids);
79 QCOMPARE(deserializedQuery.getFilter().propertyFilter.keys(), filter.propertyFilter.keys());
80 QCOMPARE(deserializedQuery.getFilter().propertyFilter, filter.propertyFilter);
81 }
82
48 void testNoResources() 83 void testNoResources()
49 { 84 {
50 // Test 85 // Test