summaryrefslogtreecommitdiffstats
path: root/common/typeindex.h
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2018-06-19 11:00:39 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-06-19 12:27:01 +0200
commit49b83e87e4da54cdd18ec04b10fdb4624389bd80 (patch)
treed87a11bcb14e6ef3811df53c06aeb1726616a26c /common/typeindex.h
parentb940489ed6afe413339a1c602d05f3b4f3133463 (diff)
downloadsink-49b83e87e4da54cdd18ec04b10fdb4624389bd80.tar.gz
sink-49b83e87e4da54cdd18ec04b10fdb4624389bd80.zip
Fixed the thread index.
* Modifications could result in index changes because we lost the threadId due to remove + add. A modify was necessary (although we can ignore it for the email case). * The ThreadIndexer would try to lookup and potentially index threads for empty parent ids, which is clearly wrong.
Diffstat (limited to 'common/typeindex.h')
-rw-r--r--common/typeindex.h24
1 files changed, 18 insertions, 6 deletions
diff --git a/common/typeindex.h b/common/typeindex.h
index a8c0e10..4e5a555 100644
--- a/common/typeindex.h
+++ b/common/typeindex.h
@@ -36,8 +36,15 @@ class TypeIndex
36public: 36public:
37 TypeIndex(const QByteArray &type, const Sink::Log::Context &); 37 TypeIndex(const QByteArray &type, const Sink::Log::Context &);
38 38
39 template <typename T>
40 void addProperty(const QByteArray &property); 39 void addProperty(const QByteArray &property);
40
41 //FIXME We currently simply serialize based on the QVariant we get and ignore the index type
42 template <typename T>
43 void addProperty(const QByteArray &property)
44 {
45 addProperty(property);
46 }
47
41 template <typename T> 48 template <typename T>
42 void addSortedProperty(const QByteArray &property); 49 void addSortedProperty(const QByteArray &property);
43 template <typename T, typename S> 50 template <typename T, typename S>
@@ -83,6 +90,7 @@ public:
83 } 90 }
84 91
85 void add(const QByteArray &identifier, const Sink::ApplicationDomain::ApplicationDomainType &entity, Sink::Storage::DataStore::Transaction &transaction, const QByteArray &resourceInstanceId); 92 void add(const QByteArray &identifier, const Sink::ApplicationDomain::ApplicationDomainType &entity, Sink::Storage::DataStore::Transaction &transaction, const QByteArray &resourceInstanceId);
93 void modify(const QByteArray &identifier, const Sink::ApplicationDomain::ApplicationDomainType &oldEntity, const Sink::ApplicationDomain::ApplicationDomainType &newEntity, Sink::Storage::DataStore::Transaction &transaction, const QByteArray &resourceInstanceId);
86 void remove(const QByteArray &identifier, const Sink::ApplicationDomain::ApplicationDomainType &entity, Sink::Storage::DataStore::Transaction &transaction, const QByteArray &resourceInstanceId); 94 void remove(const QByteArray &identifier, const Sink::ApplicationDomain::ApplicationDomainType &entity, Sink::Storage::DataStore::Transaction &transaction, const QByteArray &resourceInstanceId);
87 95
88 QVector<QByteArray> query(const Sink::QueryBase &query, QSet<QByteArrayList> &appliedFilters, QByteArray &appliedSorting, Sink::Storage::DataStore::Transaction &transaction, const QByteArray &resourceInstanceId); 96 QVector<QByteArray> query(const Sink::QueryBase &query, QSet<QByteArrayList> &appliedFilters, QByteArray &appliedSorting, Sink::Storage::DataStore::Transaction &transaction, const QByteArray &resourceInstanceId);
@@ -118,10 +126,14 @@ public:
118 void commitTransaction(); 126 void commitTransaction();
119 void abortTransaction(); 127 void abortTransaction();
120 128
129 enum Action {
130 Add,
131 Remove
132 };
121 133
122private: 134private:
123 friend class Sink::Storage::EntityStore; 135 friend class Sink::Storage::EntityStore;
124 void updateIndex(bool add, const QByteArray &identifier, const Sink::ApplicationDomain::ApplicationDomainType &entity, Sink::Storage::DataStore::Transaction &transaction, const QByteArray &resourceInstanceId); 136 void updateIndex(Action action, const QByteArray &identifier, const Sink::ApplicationDomain::ApplicationDomainType &entity, Sink::Storage::DataStore::Transaction &transaction, const QByteArray &resourceInstanceId);
125 QByteArray indexName(const QByteArray &property, const QByteArray &sortProperty = QByteArray()) const; 137 QByteArray indexName(const QByteArray &property, const QByteArray &sortProperty = QByteArray()) const;
126 QByteArray sortedIndexName(const QByteArray &property) const; 138 QByteArray sortedIndexName(const QByteArray &property) const;
127 QByteArray sampledPeriodIndexName(const QByteArray &rangeBeginProperty, const QByteArray &rangeEndProperty) const; 139 QByteArray sampledPeriodIndexName(const QByteArray &rangeBeginProperty, const QByteArray &rangeEndProperty) const;
@@ -135,8 +147,8 @@ private:
135 QSet<QPair<QByteArray, QByteArray>> mSampledPeriodProperties; 147 QSet<QPair<QByteArray, QByteArray>> mSampledPeriodProperties;
136 QList<Sink::Indexer::Ptr> mCustomIndexer; 148 QList<Sink::Indexer::Ptr> mCustomIndexer;
137 Sink::Storage::DataStore::Transaction *mTransaction; 149 Sink::Storage::DataStore::Transaction *mTransaction;
138 QHash<QByteArray, std::function<void(bool, const QByteArray &identifier, const QVariant &value, Sink::Storage::DataStore::Transaction &transaction)>> mIndexer; 150 QHash<QByteArray, std::function<void(Action, const QByteArray &identifier, const QVariant &value, Sink::Storage::DataStore::Transaction &transaction)>> mIndexer;
139 QHash<QByteArray, std::function<void(bool, const QByteArray &identifier, const QVariant &value, Sink::Storage::DataStore::Transaction &transaction)>> mSortIndexer; 151 QHash<QByteArray, std::function<void(Action, const QByteArray &identifier, const QVariant &value, Sink::Storage::DataStore::Transaction &transaction)>> mSortIndexer;
140 QHash<QByteArray, std::function<void(bool, const QByteArray &identifier, const QVariant &value, const QVariant &sortValue, Sink::Storage::DataStore::Transaction &transaction)>> mGroupedSortIndexer; 152 QHash<QByteArray, std::function<void(Action, const QByteArray &identifier, const QVariant &value, const QVariant &sortValue, Sink::Storage::DataStore::Transaction &transaction)>> mGroupedSortIndexer;
141 QHash<QPair<QByteArray, QByteArray>, std::function<void(bool, const QByteArray &identifier, const QVariant &begin, const QVariant &end, Sink::Storage::DataStore::Transaction &transaction)>> mSampledPeriodIndexer; 153 QHash<QPair<QByteArray, QByteArray>, std::function<void(Action, const QByteArray &identifier, const QVariant &begin, const QVariant &end, Sink::Storage::DataStore::Transaction &transaction)>> mSampledPeriodIndexer;
142}; 154};