summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/genericresource.cpp4
-rw-r--r--common/pipeline.cpp18
-rw-r--r--common/queryrunner.cpp4
-rw-r--r--common/storage.h2
-rw-r--r--common/storage_common.cpp5
-rw-r--r--examples/maildirresource/maildirresource.cpp2
-rw-r--r--tests/databasepopulationandfacadequerybenchmark.cpp2
7 files changed, 22 insertions, 15 deletions
diff --git a/common/genericresource.cpp b/common/genericresource.cpp
index 1e45243..a9eab36 100644
--- a/common/genericresource.cpp
+++ b/common/genericresource.cpp
@@ -87,7 +87,7 @@ public Q_SLOTS:
87 const auto uid = Storage::getUidFromRevision(mainStoreTransaction, revision); 87 const auto uid = Storage::getUidFromRevision(mainStoreTransaction, revision);
88 const auto type = Storage::getTypeFromRevision(mainStoreTransaction, revision); 88 const auto type = Storage::getTypeFromRevision(mainStoreTransaction, revision);
89 const auto key = Storage::assembleKey(uid, revision); 89 const auto key = Storage::assembleKey(uid, revision);
90 mainStoreTransaction.openDatabase(type + ".main").scan(key, [&lastReplayedRevision, type, this](const QByteArray &key, const QByteArray &value) -> bool { 90 Storage::mainDatabase(mainStoreTransaction, type).scan(key, [&lastReplayedRevision, type, this](const QByteArray &key, const QByteArray &value) -> bool {
91 mReplayFunction(type, key, value).exec(); 91 mReplayFunction(type, key, value).exec();
92 //TODO make for loop async, and pass to async replay function together with type 92 //TODO make for loop async, and pass to async replay function together with type
93 Trace() << "Replaying " << key; 93 Trace() << "Replaying " << key;
@@ -632,7 +632,7 @@ static QSharedPointer<Sink::ApplicationDomain::BufferAdaptor> getLatest(const Si
632 632
633void GenericResource::createOrModify(Sink::Storage::Transaction &transaction, Sink::Storage::Transaction &synchronizationTransaction, DomainTypeAdaptorFactoryInterface &adaptorFactory, const QByteArray &bufferType, const QByteArray &remoteId, const Sink::ApplicationDomain::ApplicationDomainType &entity) 633void GenericResource::createOrModify(Sink::Storage::Transaction &transaction, Sink::Storage::Transaction &synchronizationTransaction, DomainTypeAdaptorFactoryInterface &adaptorFactory, const QByteArray &bufferType, const QByteArray &remoteId, const Sink::ApplicationDomain::ApplicationDomainType &entity)
634{ 634{
635 auto mainDatabase = transaction.openDatabase(bufferType + ".main"); 635 auto mainDatabase = Storage::mainDatabase(transaction, bufferType);
636 const auto sinkId = resolveRemoteId(bufferType, remoteId, synchronizationTransaction); 636 const auto sinkId = resolveRemoteId(bufferType, remoteId, synchronizationTransaction);
637 const auto found = mainDatabase.contains(sinkId); 637 const auto found = mainDatabase.contains(sinkId);
638 if (!found) { 638 if (!found) {
diff --git a/common/pipeline.cpp b/common/pipeline.cpp
index b7ca638..f861ab6 100644
--- a/common/pipeline.cpp
+++ b/common/pipeline.cpp
@@ -120,7 +120,7 @@ Storage &Pipeline::storage() const
120 120
121void Pipeline::storeNewRevision(qint64 newRevision, const flatbuffers::FlatBufferBuilder &fbb, const QByteArray &bufferType, const QByteArray &uid) 121void Pipeline::storeNewRevision(qint64 newRevision, const flatbuffers::FlatBufferBuilder &fbb, const QByteArray &bufferType, const QByteArray &uid)
122{ 122{
123 d->transaction.openDatabase(bufferType + ".main").write(Sink::Storage::assembleKey(uid, newRevision), BufferUtils::extractBuffer(fbb), 123 Storage::mainDatabase(d->transaction, bufferType).write(Sink::Storage::assembleKey(uid, newRevision), BufferUtils::extractBuffer(fbb),
124 [](const Sink::Storage::Error &error) { 124 [](const Sink::Storage::Error &error) {
125 Warning() << "Failed to write entity"; 125 Warning() << "Failed to write entity";
126 } 126 }
@@ -161,7 +161,7 @@ KAsync::Job<qint64> Pipeline::newEntity(void const *command, size_t size)
161 QByteArray key; 161 QByteArray key;
162 if (createEntity->entityId()) { 162 if (createEntity->entityId()) {
163 key = QByteArray(reinterpret_cast<char const*>(createEntity->entityId()->Data()), createEntity->entityId()->size()); 163 key = QByteArray(reinterpret_cast<char const*>(createEntity->entityId()->Data()), createEntity->entityId()->size());
164 if (d->transaction.openDatabase(bufferType + ".main").contains(key)) { 164 if (Storage::mainDatabase(d->transaction, bufferType).contains(key)) {
165 ErrorMsg() << "An entity with this id already exists: " << key; 165 ErrorMsg() << "An entity with this id already exists: " << key;
166 return KAsync::error<qint64>(0); 166 return KAsync::error<qint64>(0);
167 } 167 }
@@ -194,7 +194,7 @@ KAsync::Job<qint64> Pipeline::newEntity(void const *command, size_t size)
194 } 194 }
195 195
196 Log() << "Pipeline: wrote entity: " << key << newRevision << bufferType; 196 Log() << "Pipeline: wrote entity: " << key << newRevision << bufferType;
197 d->transaction.openDatabase(bufferType + ".main").scan(Sink::Storage::assembleKey(key, newRevision), [this, bufferType, newRevision, adaptorFactory, key](const QByteArray &, const QByteArray &value) -> bool { 197 Storage::mainDatabase(d->transaction, bufferType).scan(Sink::Storage::assembleKey(key, newRevision), [this, bufferType, newRevision, adaptorFactory, key](const QByteArray &, const QByteArray &value) -> bool {
198 auto entity = Sink::GetEntity(value); 198 auto entity = Sink::GetEntity(value);
199 auto adaptor = adaptorFactory->createAdaptor(*entity); 199 auto adaptor = adaptorFactory->createAdaptor(*entity);
200 for (auto processor : d->processors[bufferType]) { 200 for (auto processor : d->processors[bufferType]) {
@@ -254,7 +254,7 @@ KAsync::Job<qint64> Pipeline::modifiedEntity(void const *command, size_t size)
254 auto diff = adaptorFactory->createAdaptor(*diffEntity); 254 auto diff = adaptorFactory->createAdaptor(*diffEntity);
255 255
256 QSharedPointer<Sink::ApplicationDomain::BufferAdaptor> current; 256 QSharedPointer<Sink::ApplicationDomain::BufferAdaptor> current;
257 d->transaction.openDatabase(bufferType + ".main").findLatest(key, [&current, adaptorFactory](const QByteArray &key, const QByteArray &data) -> bool { 257 Storage::mainDatabase(d->transaction, bufferType).findLatest(key, [&current, adaptorFactory](const QByteArray &key, const QByteArray &data) -> bool {
258 Sink::EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); 258 Sink::EntityBuffer buffer(const_cast<const char *>(data.data()), data.size());
259 if (!buffer.isValid()) { 259 if (!buffer.isValid()) {
260 Warning() << "Read invalid buffer from disk"; 260 Warning() << "Read invalid buffer from disk";
@@ -311,7 +311,7 @@ KAsync::Job<qint64> Pipeline::modifiedEntity(void const *command, size_t size)
311 311
312 storeNewRevision(newRevision, fbb, bufferType, key); 312 storeNewRevision(newRevision, fbb, bufferType, key);
313 Log() << "Pipeline: modified entity: " << key << newRevision << bufferType; 313 Log() << "Pipeline: modified entity: " << key << newRevision << bufferType;
314 d->transaction.openDatabase(bufferType + ".main").scan(Sink::Storage::assembleKey(key, newRevision), [this, bufferType, newRevision, adaptorFactory, current, key](const QByteArray &k, const QByteArray &value) -> bool { 314 Storage::mainDatabase(d->transaction, bufferType).scan(Sink::Storage::assembleKey(key, newRevision), [this, bufferType, newRevision, adaptorFactory, current, key](const QByteArray &k, const QByteArray &value) -> bool {
315 if (value.isEmpty()) { 315 if (value.isEmpty()) {
316 ErrorMsg() << "Read buffer is empty."; 316 ErrorMsg() << "Read buffer is empty.";
317 } 317 }
@@ -348,7 +348,7 @@ KAsync::Job<qint64> Pipeline::deletedEntity(void const *command, size_t size)
348 348
349 bool found = false; 349 bool found = false;
350 bool alreadyRemoved = false; 350 bool alreadyRemoved = false;
351 d->transaction.openDatabase(bufferType + ".main").findLatest(key, [&found, &alreadyRemoved](const QByteArray &key, const QByteArray &data) -> bool { 351 Storage::mainDatabase(d->transaction, bufferType).findLatest(key, [&found, &alreadyRemoved](const QByteArray &key, const QByteArray &data) -> bool {
352 auto entity = Sink::GetEntity(data.data()); 352 auto entity = Sink::GetEntity(data.data());
353 if (entity && entity->metadata()) { 353 if (entity && entity->metadata()) {
354 auto metadata = Sink::GetMetadata(entity->metadata()->Data()); 354 auto metadata = Sink::GetMetadata(entity->metadata()->Data());
@@ -394,7 +394,7 @@ KAsync::Job<qint64> Pipeline::deletedEntity(void const *command, size_t size)
394 } 394 }
395 395
396 QSharedPointer<Sink::ApplicationDomain::BufferAdaptor> current; 396 QSharedPointer<Sink::ApplicationDomain::BufferAdaptor> current;
397 d->transaction.openDatabase(bufferType + ".main").findLatest(key, [this, bufferType, newRevision, adaptorFactory, key, &current](const QByteArray &, const QByteArray &data) -> bool { 397 Storage::mainDatabase(d->transaction, bufferType).findLatest(key, [this, bufferType, newRevision, adaptorFactory, key, &current](const QByteArray &, const QByteArray &data) -> bool {
398 Sink::EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); 398 Sink::EntityBuffer buffer(const_cast<const char *>(data.data()), data.size());
399 if (!buffer.isValid()) { 399 if (!buffer.isValid()) {
400 Warning() << "Read invalid buffer from disk"; 400 Warning() << "Read invalid buffer from disk";
@@ -423,7 +423,7 @@ void Pipeline::cleanupRevision(qint64 revision)
423 const auto uid = Sink::Storage::getUidFromRevision(d->transaction, revision); 423 const auto uid = Sink::Storage::getUidFromRevision(d->transaction, revision);
424 const auto bufferType = Sink::Storage::getTypeFromRevision(d->transaction, revision); 424 const auto bufferType = Sink::Storage::getTypeFromRevision(d->transaction, revision);
425 Trace() << "Cleaning up revision " << revision << uid << bufferType; 425 Trace() << "Cleaning up revision " << revision << uid << bufferType;
426 d->transaction.openDatabase(bufferType + ".main").scan(uid, [&](const QByteArray &key, const QByteArray &data) -> bool { 426 Storage::mainDatabase(d->transaction, bufferType).scan(uid, [&](const QByteArray &key, const QByteArray &data) -> bool {
427 Sink::EntityBuffer buffer(const_cast<const char *>(data.data()), data.size()); 427 Sink::EntityBuffer buffer(const_cast<const char *>(data.data()), data.size());
428 if (!buffer.isValid()) { 428 if (!buffer.isValid()) {
429 Warning() << "Read invalid buffer from disk"; 429 Warning() << "Read invalid buffer from disk";
@@ -433,7 +433,7 @@ void Pipeline::cleanupRevision(qint64 revision)
433 //Remove old revisions, and the current if the entity has already been removed 433 //Remove old revisions, and the current if the entity has already been removed
434 if (rev < revision || metadata->operation() == Sink::Operation_Removal) { 434 if (rev < revision || metadata->operation() == Sink::Operation_Removal) {
435 Sink::Storage::removeRevision(d->transaction, rev); 435 Sink::Storage::removeRevision(d->transaction, rev);
436 d->transaction.openDatabase(bufferType + ".main").remove(key); 436 Storage::mainDatabase(d->transaction, bufferType).remove(key);
437 } 437 }
438 } 438 }
439 439
diff --git a/common/queryrunner.cpp b/common/queryrunner.cpp
index 25d69b1..b49a3e0 100644
--- a/common/queryrunner.cpp
+++ b/common/queryrunner.cpp
@@ -129,7 +129,7 @@ static inline ResultSet fullScan(const Sink::Storage::Transaction &transaction,
129{ 129{
130 //TODO use a result set with an iterator, to read values on demand 130 //TODO use a result set with an iterator, to read values on demand
131 QVector<QByteArray> keys; 131 QVector<QByteArray> keys;
132 transaction.openDatabase(bufferType + ".main").scan(QByteArray(), [&](const QByteArray &key, const QByteArray &value) -> bool { 132 Storage::mainDatabase(transaction, bufferType).scan(QByteArray(), [&](const QByteArray &key, const QByteArray &value) -> bool {
133 //Skip internals 133 //Skip internals
134 if (Sink::Storage::isInternalKey(key)) { 134 if (Sink::Storage::isInternalKey(key)) {
135 return true; 135 return true;
@@ -319,7 +319,7 @@ qint64 QueryWorker<DomainType>::load(const Sink::Query &query, const std::functi
319 Warning() << "Error during query: " << error.store << error.message; 319 Warning() << "Error during query: " << error.store << error.message;
320 }); 320 });
321 auto transaction = storage.createTransaction(Sink::Storage::ReadOnly); 321 auto transaction = storage.createTransaction(Sink::Storage::ReadOnly);
322 auto db = transaction.openDatabase(mBufferType + ".main"); 322 auto db = Storage::mainDatabase(transaction, mBufferType);
323 323
324 QSet<QByteArray> remainingFilters; 324 QSet<QByteArray> remainingFilters;
325 auto resultSet = baseSetRetriever(transaction, remainingFilters); 325 auto resultSet = baseSetRetriever(transaction, remainingFilters);
diff --git a/common/storage.h b/common/storage.h
index 1634e8b..84175b3 100644
--- a/common/storage.h
+++ b/common/storage.h
@@ -200,6 +200,8 @@ public:
200 static QByteArray assembleKey(const QByteArray &key, qint64 revision); 200 static QByteArray assembleKey(const QByteArray &key, qint64 revision);
201 static QByteArray uidFromKey(const QByteArray &key); 201 static QByteArray uidFromKey(const QByteArray &key);
202 202
203 static NamedDatabase mainDatabase(const Sink::Storage::Transaction &, const QByteArray &type);
204
203private: 205private:
204 std::function<void(const Storage::Error &error)> mErrorHandler; 206 std::function<void(const Storage::Error &error)> mErrorHandler;
205 207
diff --git a/common/storage_common.cpp b/common/storage_common.cpp
index ea97ac2..0b842d1 100644
--- a/common/storage_common.cpp
+++ b/common/storage_common.cpp
@@ -156,6 +156,11 @@ QByteArray Storage::uidFromKey(const QByteArray &key)
156 return key.mid(0, 38); 156 return key.mid(0, 38);
157} 157}
158 158
159Storage::NamedDatabase Storage::mainDatabase(const Sink::Storage::Transaction &t, const QByteArray &type)
160{
161 return t.openDatabase(type + ".main");
162}
163
159bool Storage::NamedDatabase::contains(const QByteArray &uid) 164bool Storage::NamedDatabase::contains(const QByteArray &uid)
160{ 165{
161 bool found = false; 166 bool found = false;
diff --git a/examples/maildirresource/maildirresource.cpp b/examples/maildirresource/maildirresource.cpp
index 922eb5a..6d1ec02 100644
--- a/examples/maildirresource/maildirresource.cpp
+++ b/examples/maildirresource/maildirresource.cpp
@@ -103,7 +103,7 @@ void MaildirResource::synchronizeFolders(Sink::Storage::Transaction &transaction
103 //we should rather iterate over an index that contains every uid exactly once. The remoteId index would be such an index, 103 //we should rather iterate over an index that contains every uid exactly once. The remoteId index would be such an index,
104 //but we currently fail to iterate over all entries in an index it seems. 104 //but we currently fail to iterate over all entries in an index it seems.
105 // auto remoteIds = synchronizationTransaction.openDatabase("rid.mapping." + bufferType, std::function<void(const Sink::Storage::Error &)>(), true); 105 // auto remoteIds = synchronizationTransaction.openDatabase("rid.mapping." + bufferType, std::function<void(const Sink::Storage::Error &)>(), true);
106 auto mainDatabase = transaction.openDatabase(bufferType + ".main"); 106 auto mainDatabase = Sink::Storage::mainDatabase(transaction, bufferType);
107 mainDatabase.scan("", [&](const QByteArray &key, const QByteArray &) { 107 mainDatabase.scan("", [&](const QByteArray &key, const QByteArray &) {
108 callback(key); 108 callback(key);
109 return true; 109 return true;
diff --git a/tests/databasepopulationandfacadequerybenchmark.cpp b/tests/databasepopulationandfacadequerybenchmark.cpp
index 8581c49..77573a0 100644
--- a/tests/databasepopulationandfacadequerybenchmark.cpp
+++ b/tests/databasepopulationandfacadequerybenchmark.cpp
@@ -40,7 +40,7 @@ class DatabasePopulationAndFacadeQueryBenchmark : public QObject
40 { 40 {
41 Sink::Storage storage(Sink::storageLocation(), identifier, Sink::Storage::ReadWrite); 41 Sink::Storage storage(Sink::storageLocation(), identifier, Sink::Storage::ReadWrite);
42 auto transaction = storage.createTransaction(Sink::Storage::ReadWrite); 42 auto transaction = storage.createTransaction(Sink::Storage::ReadWrite);
43 auto db = transaction.openDatabase("event.main"); 43 auto db = Sink::Storage::mainDatabase(transaction, "event");
44 44
45 int bufferSizeTotal = 0; 45 int bufferSizeTotal = 0;
46 int keysSizeTotal = 0; 46 int keysSizeTotal = 0;