From 9809045a2a71cf509857a762fac62e81c25de856 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 1 Feb 2016 15:18:13 +0100 Subject: Centralized main database name --- common/genericresource.cpp | 4 ++-- common/pipeline.cpp | 18 +++++++++--------- common/queryrunner.cpp | 4 ++-- common/storage.h | 2 ++ common/storage_common.cpp | 5 +++++ 5 files changed, 20 insertions(+), 13 deletions(-) (limited to 'common') 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: const auto uid = Storage::getUidFromRevision(mainStoreTransaction, revision); const auto type = Storage::getTypeFromRevision(mainStoreTransaction, revision); const auto key = Storage::assembleKey(uid, revision); - mainStoreTransaction.openDatabase(type + ".main").scan(key, [&lastReplayedRevision, type, this](const QByteArray &key, const QByteArray &value) -> bool { + Storage::mainDatabase(mainStoreTransaction, type).scan(key, [&lastReplayedRevision, type, this](const QByteArray &key, const QByteArray &value) -> bool { mReplayFunction(type, key, value).exec(); //TODO make for loop async, and pass to async replay function together with type Trace() << "Replaying " << key; @@ -632,7 +632,7 @@ static QSharedPointer getLatest(const Si void GenericResource::createOrModify(Sink::Storage::Transaction &transaction, Sink::Storage::Transaction &synchronizationTransaction, DomainTypeAdaptorFactoryInterface &adaptorFactory, const QByteArray &bufferType, const QByteArray &remoteId, const Sink::ApplicationDomain::ApplicationDomainType &entity) { - auto mainDatabase = transaction.openDatabase(bufferType + ".main"); + auto mainDatabase = Storage::mainDatabase(transaction, bufferType); const auto sinkId = resolveRemoteId(bufferType, remoteId, synchronizationTransaction); const auto found = mainDatabase.contains(sinkId); 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 void Pipeline::storeNewRevision(qint64 newRevision, const flatbuffers::FlatBufferBuilder &fbb, const QByteArray &bufferType, const QByteArray &uid) { - d->transaction.openDatabase(bufferType + ".main").write(Sink::Storage::assembleKey(uid, newRevision), BufferUtils::extractBuffer(fbb), + Storage::mainDatabase(d->transaction, bufferType).write(Sink::Storage::assembleKey(uid, newRevision), BufferUtils::extractBuffer(fbb), [](const Sink::Storage::Error &error) { Warning() << "Failed to write entity"; } @@ -161,7 +161,7 @@ KAsync::Job Pipeline::newEntity(void const *command, size_t size) QByteArray key; if (createEntity->entityId()) { key = QByteArray(reinterpret_cast(createEntity->entityId()->Data()), createEntity->entityId()->size()); - if (d->transaction.openDatabase(bufferType + ".main").contains(key)) { + if (Storage::mainDatabase(d->transaction, bufferType).contains(key)) { ErrorMsg() << "An entity with this id already exists: " << key; return KAsync::error(0); } @@ -194,7 +194,7 @@ KAsync::Job Pipeline::newEntity(void const *command, size_t size) } Log() << "Pipeline: wrote entity: " << key << newRevision << bufferType; - d->transaction.openDatabase(bufferType + ".main").scan(Sink::Storage::assembleKey(key, newRevision), [this, bufferType, newRevision, adaptorFactory, key](const QByteArray &, const QByteArray &value) -> bool { + Storage::mainDatabase(d->transaction, bufferType).scan(Sink::Storage::assembleKey(key, newRevision), [this, bufferType, newRevision, adaptorFactory, key](const QByteArray &, const QByteArray &value) -> bool { auto entity = Sink::GetEntity(value); auto adaptor = adaptorFactory->createAdaptor(*entity); for (auto processor : d->processors[bufferType]) { @@ -254,7 +254,7 @@ KAsync::Job Pipeline::modifiedEntity(void const *command, size_t size) auto diff = adaptorFactory->createAdaptor(*diffEntity); QSharedPointer current; - d->transaction.openDatabase(bufferType + ".main").findLatest(key, [¤t, adaptorFactory](const QByteArray &key, const QByteArray &data) -> bool { + Storage::mainDatabase(d->transaction, bufferType).findLatest(key, [¤t, adaptorFactory](const QByteArray &key, const QByteArray &data) -> bool { Sink::EntityBuffer buffer(const_cast(data.data()), data.size()); if (!buffer.isValid()) { Warning() << "Read invalid buffer from disk"; @@ -311,7 +311,7 @@ KAsync::Job Pipeline::modifiedEntity(void const *command, size_t size) storeNewRevision(newRevision, fbb, bufferType, key); Log() << "Pipeline: modified entity: " << key << newRevision << bufferType; - d->transaction.openDatabase(bufferType + ".main").scan(Sink::Storage::assembleKey(key, newRevision), [this, bufferType, newRevision, adaptorFactory, current, key](const QByteArray &k, const QByteArray &value) -> bool { + Storage::mainDatabase(d->transaction, bufferType).scan(Sink::Storage::assembleKey(key, newRevision), [this, bufferType, newRevision, adaptorFactory, current, key](const QByteArray &k, const QByteArray &value) -> bool { if (value.isEmpty()) { ErrorMsg() << "Read buffer is empty."; } @@ -348,7 +348,7 @@ KAsync::Job Pipeline::deletedEntity(void const *command, size_t size) bool found = false; bool alreadyRemoved = false; - d->transaction.openDatabase(bufferType + ".main").findLatest(key, [&found, &alreadyRemoved](const QByteArray &key, const QByteArray &data) -> bool { + Storage::mainDatabase(d->transaction, bufferType).findLatest(key, [&found, &alreadyRemoved](const QByteArray &key, const QByteArray &data) -> bool { auto entity = Sink::GetEntity(data.data()); if (entity && entity->metadata()) { auto metadata = Sink::GetMetadata(entity->metadata()->Data()); @@ -394,7 +394,7 @@ KAsync::Job Pipeline::deletedEntity(void const *command, size_t size) } QSharedPointer current; - d->transaction.openDatabase(bufferType + ".main").findLatest(key, [this, bufferType, newRevision, adaptorFactory, key, ¤t](const QByteArray &, const QByteArray &data) -> bool { + Storage::mainDatabase(d->transaction, bufferType).findLatest(key, [this, bufferType, newRevision, adaptorFactory, key, ¤t](const QByteArray &, const QByteArray &data) -> bool { Sink::EntityBuffer buffer(const_cast(data.data()), data.size()); if (!buffer.isValid()) { Warning() << "Read invalid buffer from disk"; @@ -423,7 +423,7 @@ void Pipeline::cleanupRevision(qint64 revision) const auto uid = Sink::Storage::getUidFromRevision(d->transaction, revision); const auto bufferType = Sink::Storage::getTypeFromRevision(d->transaction, revision); Trace() << "Cleaning up revision " << revision << uid << bufferType; - d->transaction.openDatabase(bufferType + ".main").scan(uid, [&](const QByteArray &key, const QByteArray &data) -> bool { + Storage::mainDatabase(d->transaction, bufferType).scan(uid, [&](const QByteArray &key, const QByteArray &data) -> bool { Sink::EntityBuffer buffer(const_cast(data.data()), data.size()); if (!buffer.isValid()) { Warning() << "Read invalid buffer from disk"; @@ -433,7 +433,7 @@ void Pipeline::cleanupRevision(qint64 revision) //Remove old revisions, and the current if the entity has already been removed if (rev < revision || metadata->operation() == Sink::Operation_Removal) { Sink::Storage::removeRevision(d->transaction, rev); - d->transaction.openDatabase(bufferType + ".main").remove(key); + Storage::mainDatabase(d->transaction, bufferType).remove(key); } } 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, { //TODO use a result set with an iterator, to read values on demand QVector keys; - transaction.openDatabase(bufferType + ".main").scan(QByteArray(), [&](const QByteArray &key, const QByteArray &value) -> bool { + Storage::mainDatabase(transaction, bufferType).scan(QByteArray(), [&](const QByteArray &key, const QByteArray &value) -> bool { //Skip internals if (Sink::Storage::isInternalKey(key)) { return true; @@ -319,7 +319,7 @@ qint64 QueryWorker::load(const Sink::Query &query, const std::functi Warning() << "Error during query: " << error.store << error.message; }); auto transaction = storage.createTransaction(Sink::Storage::ReadOnly); - auto db = transaction.openDatabase(mBufferType + ".main"); + auto db = Storage::mainDatabase(transaction, mBufferType); QSet remainingFilters; 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: static QByteArray assembleKey(const QByteArray &key, qint64 revision); static QByteArray uidFromKey(const QByteArray &key); + static NamedDatabase mainDatabase(const Sink::Storage::Transaction &, const QByteArray &type); + private: std::function mErrorHandler; 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) return key.mid(0, 38); } +Storage::NamedDatabase Storage::mainDatabase(const Sink::Storage::Transaction &t, const QByteArray &type) +{ + return t.openDatabase(type + ".main"); +} + bool Storage::NamedDatabase::contains(const QByteArray &uid) { bool found = false; -- cgit v1.2.3