diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-10-16 14:55:20 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-10-21 09:02:21 +0200 |
commit | 237b9ae4113e7a9f489632296941becb71afdb45 (patch) | |
tree | 01cde58f495944f01cad9d282391d4efd2897141 /common/domain | |
parent | 95d11bf0be98a4e3c08502fe23417b800233ce14 (diff) | |
download | sink-237b9ae4113e7a9f489632296941becb71afdb45.tar.gz sink-237b9ae4113e7a9f489632296941becb71afdb45.zip |
Refactor how the storage is used.
This is the initial refactoring to improve how we deal with the storage.
It does a couple of things:
* Rename Sink::Storage to Sink::Storage::DataStore to free up the
Sink::Storage namespace
* Introduce a Sink::ResourceContext to have a single object that can be
passed around containing everything that is necessary to operate on a
resource. This is a lot better than the multiple separate parameters
that we used to pass around all over the place, while still allowing
for dependency injection for tests.
* Tie storage access together using the new EntityStore that directly
works with ApplicationDomainTypes. This gives us a central place where
main storage, indexes and buffer adaptors are tied together, which
will also give us a place to implement external indexes, such as a
fulltextindex using xapian.
* Use ApplicationDomainTypes as the default way to pass around entities.
Instead of using various ways to pass around entities (buffers,
buffer adaptors, ApplicationDomainTypes), only use a single way.
The old approach was confusing, and was only done as:
* optimization; really shouldn't be necessary and otherwise I'm sure
we can find better ways to optimize ApplicationDomainType itself.
* a way to account for entities that have multiple buffers, a concept
that I no longer deem relevant.
While this commit does the bulk of the work to get there, the following
commits will refactor more stuff to get things back to normal.
Diffstat (limited to 'common/domain')
-rw-r--r-- | common/domain/applicationdomaintype.cpp | 2 | ||||
-rw-r--r-- | common/domain/applicationdomaintype.h | 2 | ||||
-rw-r--r-- | common/domain/event.cpp | 15 | ||||
-rw-r--r-- | common/domain/event.h | 11 | ||||
-rw-r--r-- | common/domain/folder.cpp | 17 | ||||
-rw-r--r-- | common/domain/folder.h | 10 | ||||
-rw-r--r-- | common/domain/mail.cpp | 52 | ||||
-rw-r--r-- | common/domain/mail.h | 11 |
8 files changed, 77 insertions, 43 deletions
diff --git a/common/domain/applicationdomaintype.cpp b/common/domain/applicationdomaintype.cpp index 2a0d977..3109966 100644 --- a/common/domain/applicationdomaintype.cpp +++ b/common/domain/applicationdomaintype.cpp | |||
@@ -73,7 +73,7 @@ ApplicationDomainType::~ApplicationDomainType() | |||
73 | 73 | ||
74 | QByteArray ApplicationDomainType::generateUid() | 74 | QByteArray ApplicationDomainType::generateUid() |
75 | { | 75 | { |
76 | return Sink::Storage::generateUid(); | 76 | return Sink::Storage::DataStore::generateUid(); |
77 | } | 77 | } |
78 | 78 | ||
79 | bool ApplicationDomainType::hasProperty(const QByteArray &key) const | 79 | bool ApplicationDomainType::hasProperty(const QByteArray &key) const |
diff --git a/common/domain/applicationdomaintype.h b/common/domain/applicationdomaintype.h index e581e07..39ce2b9 100644 --- a/common/domain/applicationdomaintype.h +++ b/common/domain/applicationdomaintype.h | |||
@@ -241,6 +241,8 @@ struct SINK_EXPORT SinkResource : public ApplicationDomainType { | |||
241 | struct SINK_EXPORT Entity : public ApplicationDomainType { | 241 | struct SINK_EXPORT Entity : public ApplicationDomainType { |
242 | typedef QSharedPointer<Entity> Ptr; | 242 | typedef QSharedPointer<Entity> Ptr; |
243 | using ApplicationDomainType::ApplicationDomainType; | 243 | using ApplicationDomainType::ApplicationDomainType; |
244 | Entity() = default; | ||
245 | Entity(const ApplicationDomainType &other) : ApplicationDomainType(other) {} | ||
244 | virtual ~Entity(); | 246 | virtual ~Entity(); |
245 | }; | 247 | }; |
246 | 248 | ||
diff --git a/common/domain/event.cpp b/common/domain/event.cpp index f3abd62..d801592 100644 --- a/common/domain/event.cpp +++ b/common/domain/event.cpp | |||
@@ -42,23 +42,28 @@ static QMutex sMutex; | |||
42 | 42 | ||
43 | using namespace Sink::ApplicationDomain; | 43 | using namespace Sink::ApplicationDomain; |
44 | 44 | ||
45 | void TypeImplementation<Event>::configureIndex(TypeIndex &index) | ||
46 | { | ||
47 | index.addProperty<QByteArray>(Event::Uid::name); | ||
48 | } | ||
49 | |||
45 | static TypeIndex &getIndex() | 50 | static TypeIndex &getIndex() |
46 | { | 51 | { |
47 | QMutexLocker locker(&sMutex); | 52 | QMutexLocker locker(&sMutex); |
48 | static TypeIndex *index = 0; | 53 | static TypeIndex *index = 0; |
49 | if (!index) { | 54 | if (!index) { |
50 | index = new TypeIndex("event"); | 55 | index = new TypeIndex("event"); |
51 | index->addProperty<QByteArray>("uid"); | 56 | TypeImplementation<Event>::configureIndex(*index); |
52 | } | 57 | } |
53 | return *index; | 58 | return *index; |
54 | } | 59 | } |
55 | 60 | ||
56 | void TypeImplementation<Event>::index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) | 61 | void TypeImplementation<Event>::index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction) |
57 | { | 62 | { |
58 | return getIndex().add(identifier, bufferAdaptor, transaction); | 63 | return getIndex().add(identifier, bufferAdaptor, transaction); |
59 | } | 64 | } |
60 | 65 | ||
61 | void TypeImplementation<Event>::removeIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) | 66 | void TypeImplementation<Event>::removeIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction) |
62 | { | 67 | { |
63 | return getIndex().remove(identifier, bufferAdaptor, transaction); | 68 | return getIndex().remove(identifier, bufferAdaptor, transaction); |
64 | } | 69 | } |
@@ -83,10 +88,10 @@ QSharedPointer<WritePropertyMapper<TypeImplementation<Event>::BufferBuilder> > T | |||
83 | return propertyMapper; | 88 | return propertyMapper; |
84 | } | 89 | } |
85 | 90 | ||
86 | DataStoreQuery::Ptr TypeImplementation<Event>::prepareQuery(const Sink::Query &query, Sink::Storage::Transaction &transaction) | 91 | DataStoreQuery::Ptr TypeImplementation<Event>::prepareQuery(const Sink::Query &query, Sink::Storage::EntityStore::Ptr store) |
87 | { | 92 | { |
88 | auto mapper = initializeReadPropertyMapper(); | 93 | auto mapper = initializeReadPropertyMapper(); |
89 | return DataStoreQuery::Ptr::create(query, ApplicationDomain::getTypeName<Event>(), transaction, getIndex(), [mapper](const Sink::Entity &entity, const QByteArray &property) { | 94 | return DataStoreQuery::Ptr::create(query, ApplicationDomain::getTypeName<Event>(), store, getIndex(), [mapper](const Sink::Entity &entity, const QByteArray &property) { |
90 | 95 | ||
91 | const auto localBuffer = Sink::EntityBuffer::readBuffer<Buffer>(entity.local()); | 96 | const auto localBuffer = Sink::EntityBuffer::readBuffer<Buffer>(entity.local()); |
92 | return mapper->getProperty(property, localBuffer); | 97 | return mapper->getProperty(property, localBuffer); |
diff --git a/common/domain/event.h b/common/domain/event.h index 684b58e..ce9691d 100644 --- a/common/domain/event.h +++ b/common/domain/event.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #include "applicationdomaintype.h" | 21 | #include "applicationdomaintype.h" |
22 | 22 | ||
23 | #include "storage.h" | 23 | #include "storage.h" |
24 | #include "storage/entitystore.h" | ||
24 | 25 | ||
25 | class ResultSet; | 26 | class ResultSet; |
26 | class QByteArray; | 27 | class QByteArray; |
@@ -32,6 +33,8 @@ class WritePropertyMapper; | |||
32 | 33 | ||
33 | class DataStoreQuery; | 34 | class DataStoreQuery; |
34 | 35 | ||
36 | class TypeIndex; | ||
37 | |||
35 | namespace Sink { | 38 | namespace Sink { |
36 | class Query; | 39 | class Query; |
37 | 40 | ||
@@ -51,10 +54,12 @@ class TypeImplementation<Sink::ApplicationDomain::Event> { | |||
51 | public: | 54 | public: |
52 | typedef Sink::ApplicationDomain::Buffer::Event Buffer; | 55 | typedef Sink::ApplicationDomain::Buffer::Event Buffer; |
53 | typedef Sink::ApplicationDomain::Buffer::EventBuilder BufferBuilder; | 56 | typedef Sink::ApplicationDomain::Buffer::EventBuilder BufferBuilder; |
57 | static void configureIndex(TypeIndex &index); | ||
54 | static QSet<QByteArray> indexedProperties(); | 58 | static QSet<QByteArray> indexedProperties(); |
55 | static QSharedPointer<DataStoreQuery> prepareQuery(const Sink::Query &query, Sink::Storage::Transaction &transaction); | 59 | static QSharedPointer<DataStoreQuery> prepareQuery(const Sink::Query &query, Sink::Storage::EntityStore::Ptr store); |
56 | static void index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction); | 60 | |
57 | static void removeIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction); | 61 | static void index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction); |
62 | static void removeIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction); | ||
58 | static QSharedPointer<ReadPropertyMapper<Buffer> > initializeReadPropertyMapper(); | 63 | static QSharedPointer<ReadPropertyMapper<Buffer> > initializeReadPropertyMapper(); |
59 | static QSharedPointer<WritePropertyMapper<BufferBuilder> > initializeWritePropertyMapper(); | 64 | static QSharedPointer<WritePropertyMapper<BufferBuilder> > initializeWritePropertyMapper(); |
60 | }; | 65 | }; |
diff --git a/common/domain/folder.cpp b/common/domain/folder.cpp index 824fa0b..f04a3e7 100644 --- a/common/domain/folder.cpp +++ b/common/domain/folder.cpp | |||
@@ -44,25 +44,30 @@ static QMutex sMutex; | |||
44 | 44 | ||
45 | using namespace Sink::ApplicationDomain; | 45 | using namespace Sink::ApplicationDomain; |
46 | 46 | ||
47 | void TypeImplementation<Folder>::configureIndex(TypeIndex &index) | ||
48 | { | ||
49 | index.addProperty<QByteArray>(Folder::Parent::name); | ||
50 | index.addProperty<QString>(Folder::Name::name); | ||
51 | } | ||
52 | |||
47 | static TypeIndex &getIndex() | 53 | static TypeIndex &getIndex() |
48 | { | 54 | { |
49 | QMutexLocker locker(&sMutex); | 55 | QMutexLocker locker(&sMutex); |
50 | static TypeIndex *index = 0; | 56 | static TypeIndex *index = 0; |
51 | if (!index) { | 57 | if (!index) { |
52 | index = new TypeIndex("folder"); | 58 | index = new TypeIndex("folder"); |
53 | index->addProperty<QByteArray>("parent"); | 59 | TypeImplementation<Folder>::configureIndex(*index); |
54 | index->addProperty<QString>("name"); | ||
55 | } | 60 | } |
56 | return *index; | 61 | return *index; |
57 | } | 62 | } |
58 | 63 | ||
59 | void TypeImplementation<Folder>::index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) | 64 | void TypeImplementation<Folder>::index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction) |
60 | { | 65 | { |
61 | SinkTrace() << "Indexing " << identifier; | 66 | SinkTrace() << "Indexing " << identifier; |
62 | getIndex().add(identifier, bufferAdaptor, transaction); | 67 | getIndex().add(identifier, bufferAdaptor, transaction); |
63 | } | 68 | } |
64 | 69 | ||
65 | void TypeImplementation<Folder>::removeIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) | 70 | void TypeImplementation<Folder>::removeIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction) |
66 | { | 71 | { |
67 | getIndex().remove(identifier, bufferAdaptor, transaction); | 72 | getIndex().remove(identifier, bufferAdaptor, transaction); |
68 | } | 73 | } |
@@ -87,10 +92,10 @@ QSharedPointer<WritePropertyMapper<TypeImplementation<Folder>::BufferBuilder> > | |||
87 | return propertyMapper; | 92 | return propertyMapper; |
88 | } | 93 | } |
89 | 94 | ||
90 | DataStoreQuery::Ptr TypeImplementation<Folder>::prepareQuery(const Sink::Query &query, Sink::Storage::Transaction &transaction) | 95 | DataStoreQuery::Ptr TypeImplementation<Folder>::prepareQuery(const Sink::Query &query, Sink::Storage::EntityStore::Ptr store) |
91 | { | 96 | { |
92 | auto mapper = initializeReadPropertyMapper(); | 97 | auto mapper = initializeReadPropertyMapper(); |
93 | return DataStoreQuery::Ptr::create(query, ApplicationDomain::getTypeName<Folder>(), transaction, getIndex(), [mapper](const Sink::Entity &entity, const QByteArray &property) { | 98 | return DataStoreQuery::Ptr::create(query, ApplicationDomain::getTypeName<Folder>(), store, getIndex(), [mapper](const Sink::Entity &entity, const QByteArray &property) { |
94 | const auto localBuffer = Sink::EntityBuffer::readBuffer<Buffer>(entity.local()); | 99 | const auto localBuffer = Sink::EntityBuffer::readBuffer<Buffer>(entity.local()); |
95 | return mapper->getProperty(property, localBuffer); | 100 | return mapper->getProperty(property, localBuffer); |
96 | }); | 101 | }); |
diff --git a/common/domain/folder.h b/common/domain/folder.h index e4631de..0a52b01 100644 --- a/common/domain/folder.h +++ b/common/domain/folder.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #include "applicationdomaintype.h" | 21 | #include "applicationdomaintype.h" |
22 | 22 | ||
23 | #include "storage.h" | 23 | #include "storage.h" |
24 | #include "storage/entitystore.h" | ||
24 | 25 | ||
25 | class ResultSet; | 26 | class ResultSet; |
26 | class QByteArray; | 27 | class QByteArray; |
@@ -31,6 +32,8 @@ class ReadPropertyMapper; | |||
31 | template<typename T> | 32 | template<typename T> |
32 | class WritePropertyMapper; | 33 | class WritePropertyMapper; |
33 | 34 | ||
35 | class TypeIndex; | ||
36 | |||
34 | namespace Sink { | 37 | namespace Sink { |
35 | class Query; | 38 | class Query; |
36 | 39 | ||
@@ -45,10 +48,11 @@ class TypeImplementation<Sink::ApplicationDomain::Folder> { | |||
45 | public: | 48 | public: |
46 | typedef Sink::ApplicationDomain::Buffer::Folder Buffer; | 49 | typedef Sink::ApplicationDomain::Buffer::Folder Buffer; |
47 | typedef Sink::ApplicationDomain::Buffer::FolderBuilder BufferBuilder; | 50 | typedef Sink::ApplicationDomain::Buffer::FolderBuilder BufferBuilder; |
48 | static QSharedPointer<DataStoreQuery> prepareQuery(const Sink::Query &query, Sink::Storage::Transaction &transaction); | 51 | static void configureIndex(TypeIndex &index); |
52 | static QSharedPointer<DataStoreQuery> prepareQuery(const Sink::Query &query, Sink::Storage::EntityStore::Ptr store); | ||
49 | static QSet<QByteArray> indexedProperties(); | 53 | static QSet<QByteArray> indexedProperties(); |
50 | static void index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction); | 54 | static void index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction); |
51 | static void removeIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction); | 55 | static void removeIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction); |
52 | static QSharedPointer<ReadPropertyMapper<Buffer> > initializeReadPropertyMapper(); | 56 | static QSharedPointer<ReadPropertyMapper<Buffer> > initializeReadPropertyMapper(); |
53 | static QSharedPointer<WritePropertyMapper<BufferBuilder> > initializeWritePropertyMapper(); | 57 | static QSharedPointer<WritePropertyMapper<BufferBuilder> > initializeWritePropertyMapper(); |
54 | }; | 58 | }; |
diff --git a/common/domain/mail.cpp b/common/domain/mail.cpp index 2b6eb84..1b46e28 100644 --- a/common/domain/mail.cpp +++ b/common/domain/mail.cpp | |||
@@ -45,25 +45,31 @@ static QMutex sMutex; | |||
45 | using namespace Sink; | 45 | using namespace Sink; |
46 | using namespace Sink::ApplicationDomain; | 46 | using namespace Sink::ApplicationDomain; |
47 | 47 | ||
48 | void TypeImplementation<Mail>::configureIndex(TypeIndex &index) | ||
49 | { | ||
50 | index.addProperty<QByteArray>(Mail::Uid::name); | ||
51 | index.addProperty<QByteArray>(Mail::Sender::name); | ||
52 | index.addProperty<QByteArray>(Mail::SenderName::name); | ||
53 | /* index->addProperty<QString>(Mail::Subject::name); */ | ||
54 | /* index->addFulltextProperty<QString>(Mail::Subject::name); */ | ||
55 | index.addProperty<QDateTime>(Mail::Date::name); | ||
56 | index.addProperty<QByteArray>(Mail::Folder::name); | ||
57 | index.addPropertyWithSorting<QByteArray, QDateTime>(Mail::Folder::name, Mail::Date::name); | ||
58 | index.addProperty<QByteArray>(Mail::MessageId::name); | ||
59 | index.addProperty<QByteArray>(Mail::ParentMessageId::name); | ||
60 | |||
61 | index.addProperty<Mail::MessageId>(); | ||
62 | index.addSecondaryProperty<Mail::MessageId, Mail::ThreadId>(); | ||
63 | index.addSecondaryProperty<Mail::ThreadId, Mail::MessageId>(); | ||
64 | } | ||
65 | |||
48 | static TypeIndex &getIndex() | 66 | static TypeIndex &getIndex() |
49 | { | 67 | { |
50 | QMutexLocker locker(&sMutex); | 68 | QMutexLocker locker(&sMutex); |
51 | static TypeIndex *index = 0; | 69 | static TypeIndex *index = 0; |
52 | if (!index) { | 70 | if (!index) { |
53 | index = new TypeIndex("mail"); | 71 | index = new TypeIndex("mail"); |
54 | index->addProperty<QByteArray>(Mail::Uid::name); | 72 | TypeImplementation<Mail>::configureIndex(*index); |
55 | index->addProperty<QByteArray>(Mail::Sender::name); | ||
56 | index->addProperty<QByteArray>(Mail::SenderName::name); | ||
57 | index->addProperty<QString>(Mail::Subject::name); | ||
58 | index->addProperty<QDateTime>(Mail::Date::name); | ||
59 | index->addProperty<QByteArray>(Mail::Folder::name); | ||
60 | index->addPropertyWithSorting<QByteArray, QDateTime>(Mail::Folder::name, Mail::Date::name); | ||
61 | index->addProperty<QByteArray>(Mail::MessageId::name); | ||
62 | index->addProperty<QByteArray>(Mail::ParentMessageId::name); | ||
63 | |||
64 | index->addProperty<Mail::MessageId>(); | ||
65 | index->addSecondaryProperty<Mail::MessageId, Mail::ThreadId>(); | ||
66 | index->addSecondaryProperty<Mail::ThreadId, Mail::MessageId>(); | ||
67 | } | 73 | } |
68 | return *index; | 74 | return *index; |
69 | } | 75 | } |
@@ -122,7 +128,7 @@ static QString stripOffPrefixes(const QString &subject) | |||
122 | } | 128 | } |
123 | 129 | ||
124 | 130 | ||
125 | static void updateThreadingIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) | 131 | static void updateThreadingIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction) |
126 | { | 132 | { |
127 | auto messageId = bufferAdaptor.getProperty(Mail::MessageId::name); | 133 | auto messageId = bufferAdaptor.getProperty(Mail::MessageId::name); |
128 | auto parentMessageId = bufferAdaptor.getProperty(Mail::ParentMessageId::name); | 134 | auto parentMessageId = bufferAdaptor.getProperty(Mail::ParentMessageId::name); |
@@ -164,16 +170,17 @@ static void updateThreadingIndex(const QByteArray &identifier, const BufferAdapt | |||
164 | } | 170 | } |
165 | } | 171 | } |
166 | 172 | ||
167 | void TypeImplementation<Mail>::index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) | 173 | void TypeImplementation<Mail>::index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction) |
168 | { | 174 | { |
169 | SinkTrace() << "Indexing " << identifier; | 175 | SinkTrace() << "Indexing " << identifier; |
170 | getIndex().add(identifier, bufferAdaptor, transaction); | 176 | getIndex().add(identifier, bufferAdaptor, transaction); |
171 | updateThreadingIndex(identifier, bufferAdaptor, transaction); | 177 | updateThreadingIndex(identifier, bufferAdaptor, transaction); |
172 | } | 178 | } |
173 | 179 | ||
174 | void TypeImplementation<Mail>::removeIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction) | 180 | void TypeImplementation<Mail>::removeIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction) |
175 | { | 181 | { |
176 | getIndex().remove(identifier, bufferAdaptor, transaction); | 182 | getIndex().remove(identifier, bufferAdaptor, transaction); |
183 | //TODO cleanup threading index | ||
177 | } | 184 | } |
178 | 185 | ||
179 | QSharedPointer<ReadPropertyMapper<TypeImplementation<Mail>::Buffer> > TypeImplementation<Mail>::initializeReadPropertyMapper() | 186 | QSharedPointer<ReadPropertyMapper<TypeImplementation<Mail>::Buffer> > TypeImplementation<Mail>::initializeReadPropertyMapper() |
@@ -218,18 +225,21 @@ QSharedPointer<WritePropertyMapper<TypeImplementation<Mail>::BufferBuilder> > Ty | |||
218 | } | 225 | } |
219 | 226 | ||
220 | 227 | ||
221 | DataStoreQuery::Ptr TypeImplementation<Mail>::prepareQuery(const Sink::Query &query, Sink::Storage::Transaction &transaction) | 228 | DataStoreQuery::Ptr TypeImplementation<Mail>::prepareQuery(const Sink::Query &query, Sink::Storage::EntityStore::Ptr store) |
222 | { | 229 | { |
223 | auto mapper = initializeReadPropertyMapper(); | 230 | auto mapper = initializeReadPropertyMapper(); |
224 | return DataStoreQuery::Ptr::create(query, ApplicationDomain::getTypeName<Mail>(), transaction, getIndex(), [mapper, &transaction](const Sink::Entity &entity, const QByteArray &property) -> QVariant { | 231 | return DataStoreQuery::Ptr::create(query, ApplicationDomain::getTypeName<Mail>(), store, getIndex(), [mapper, store](const Sink::Entity &entity, const QByteArray &property) -> QVariant { |
225 | if (property == Mail::ThreadId::name) { | 232 | if (property == Mail::ThreadId::name) { |
226 | const auto localBuffer = Sink::EntityBuffer::readBuffer<Buffer>(entity.local()); | 233 | const auto localBuffer = Sink::EntityBuffer::readBuffer<Buffer>(entity.local()); |
227 | Q_ASSERT(localBuffer); | 234 | Q_ASSERT(localBuffer); |
228 | auto messageId = mapper->getProperty(Mail::MessageId::name, localBuffer); | 235 | auto messageId = mapper->getProperty(Mail::MessageId::name, localBuffer); |
236 | //FIXME | ||
229 | //This is an index property that we have too lookup | 237 | //This is an index property that we have too lookup |
230 | auto thread = getIndex().secondaryLookup<Mail::MessageId, Mail::ThreadId>(messageId, transaction); | 238 | /* auto thread = getIndex().secondaryLookup<Mail::MessageId, Mail::ThreadId>(messageId); */ |
231 | Q_ASSERT(!thread.isEmpty()); | 239 | /* auto thread = store->secondaryLookup<Mail::MessageId, Mail::ThreadId>(messageId); */ |
232 | return thread.first(); | 240 | /* Q_ASSERT(!thread.isEmpty()); */ |
241 | /* return thread.first(); */ | ||
242 | return QVariant(); | ||
233 | } else { | 243 | } else { |
234 | const auto localBuffer = Sink::EntityBuffer::readBuffer<Buffer>(entity.local()); | 244 | const auto localBuffer = Sink::EntityBuffer::readBuffer<Buffer>(entity.local()); |
235 | Q_ASSERT(localBuffer); | 245 | Q_ASSERT(localBuffer); |
diff --git a/common/domain/mail.h b/common/domain/mail.h index ea3ef9e..6c1f670 100644 --- a/common/domain/mail.h +++ b/common/domain/mail.h | |||
@@ -21,7 +21,7 @@ | |||
21 | #include "applicationdomaintype.h" | 21 | #include "applicationdomaintype.h" |
22 | 22 | ||
23 | #include "storage.h" | 23 | #include "storage.h" |
24 | #include "datastorequery.h" | 24 | #include "storage/entitystore.h" |
25 | 25 | ||
26 | class ResultSet; | 26 | class ResultSet; |
27 | class QByteArray; | 27 | class QByteArray; |
@@ -32,6 +32,8 @@ class ReadPropertyMapper; | |||
32 | template<typename T> | 32 | template<typename T> |
33 | class WritePropertyMapper; | 33 | class WritePropertyMapper; |
34 | 34 | ||
35 | class TypeIndex; | ||
36 | |||
35 | namespace Sink { | 37 | namespace Sink { |
36 | class Query; | 38 | class Query; |
37 | 39 | ||
@@ -46,10 +48,11 @@ class TypeImplementation<Sink::ApplicationDomain::Mail> { | |||
46 | public: | 48 | public: |
47 | typedef Sink::ApplicationDomain::Buffer::Mail Buffer; | 49 | typedef Sink::ApplicationDomain::Buffer::Mail Buffer; |
48 | typedef Sink::ApplicationDomain::Buffer::MailBuilder BufferBuilder; | 50 | typedef Sink::ApplicationDomain::Buffer::MailBuilder BufferBuilder; |
49 | static QSharedPointer<DataStoreQuery> prepareQuery(const Sink::Query &query, Sink::Storage::Transaction &transaction); | 51 | static void configureIndex(TypeIndex &index); |
52 | static QSharedPointer<DataStoreQuery> prepareQuery(const Sink::Query &query, Sink::Storage::EntityStore::Ptr storage); | ||
50 | static QSet<QByteArray> indexedProperties(); | 53 | static QSet<QByteArray> indexedProperties(); |
51 | static void index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction); | 54 | static void index(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction); |
52 | static void removeIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::Transaction &transaction); | 55 | static void removeIndex(const QByteArray &identifier, const BufferAdaptor &bufferAdaptor, Sink::Storage::DataStore::Transaction &transaction); |
53 | static QSharedPointer<ReadPropertyMapper<Buffer> > initializeReadPropertyMapper(); | 56 | static QSharedPointer<ReadPropertyMapper<Buffer> > initializeReadPropertyMapper(); |
54 | static QSharedPointer<WritePropertyMapper<BufferBuilder> > initializeWritePropertyMapper(); | 57 | static QSharedPointer<WritePropertyMapper<BufferBuilder> > initializeWritePropertyMapper(); |
55 | }; | 58 | }; |