diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-06-19 11:00:39 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-06-19 12:27:01 +0200 |
commit | 49b83e87e4da54cdd18ec04b10fdb4624389bd80 (patch) | |
tree | d87a11bcb14e6ef3811df53c06aeb1726616a26c /common/typeindex.h | |
parent | b940489ed6afe413339a1c602d05f3b4f3133463 (diff) | |
download | sink-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.h | 24 |
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 | |||
36 | public: | 36 | public: |
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 | ||
122 | private: | 134 | private: |
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 | }; |