From 3356db6f1fe75f39a5f6038e94e5af4b5e99f138 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 23 Jan 2017 11:17:35 +0100 Subject: Ensure we don't accidentally spawn more transactions than necessary. --- common/storage/entitystore.cpp | 7 +++++++ common/storage/entitystore.h | 1 + 2 files changed, 8 insertions(+) (limited to 'common/storage') diff --git a/common/storage/entitystore.cpp b/common/storage/entitystore.cpp index 6c341e2..51e5da7 100644 --- a/common/storage/entitystore.cpp +++ b/common/storage/entitystore.cpp @@ -111,6 +111,7 @@ EntityStore::EntityStore(const ResourceContext &context, const Log::Context &ctx void EntityStore::startTransaction(Sink::Storage::DataStore::AccessMode accessMode) { SinkTraceCtx(d->logCtx) << "Starting transaction: " << accessMode; + Q_ASSERT(!d->transaction); Sink::Storage::DataStore store(Sink::storageLocation(), d->resourceContext.instanceId(), accessMode); d->transaction = store.createTransaction(accessMode); Q_ASSERT(d->transaction.validateNamedDatabases()); @@ -119,6 +120,7 @@ void EntityStore::startTransaction(Sink::Storage::DataStore::AccessMode accessMo void EntityStore::commitTransaction() { SinkTraceCtx(d->logCtx) << "Committing transaction"; + Q_ASSERT(d->transaction); d->transaction.commit(); d->transaction = Storage::DataStore::Transaction(); } @@ -130,6 +132,11 @@ void EntityStore::abortTransaction() d->transaction = Storage::DataStore::Transaction(); } +bool EntityStore::hasTransaction() const +{ + return d->transaction; +} + void EntityStore::copyBlobs(ApplicationDomain::ApplicationDomainType &entity, qint64 newRevision) { const auto directory = d->entityBlobStoragePath(entity.identifier()); diff --git a/common/storage/entitystore.h b/common/storage/entitystore.h index fe75a02..46410cd 100644 --- a/common/storage/entitystore.h +++ b/common/storage/entitystore.h @@ -51,6 +51,7 @@ public: void startTransaction(Sink::Storage::DataStore::AccessMode); void commitTransaction(); void abortTransaction(); + bool hasTransaction() const; QVector fullScan(const QByteArray &type); QVector indexLookup(const QByteArray &type, const QueryBase &query, QSet &appliedFilters, QByteArray &appliedSorting); -- cgit v1.2.3