Mercurial > hg > orthanc
diff OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp @ 4570:648defffc8cc db-changes
new enum: TransactionType
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 08 Mar 2021 16:04:56 +0100 |
parents | 2a0f8031fb93 |
children | 9224e107d613 |
line wrap: on
line diff
--- a/OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp Mon Mar 08 15:13:25 2021 +0100 +++ b/OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp Mon Mar 08 16:04:56 2021 +0100 @@ -596,7 +596,7 @@ } - class SQLiteDatabaseWrapper::Transaction : public IDatabaseWrapper::ITransaction + class SQLiteDatabaseWrapper::ReadWriteTransaction : public IDatabaseWrapper::ITransaction { private: SQLiteDatabaseWrapper& that_; @@ -604,7 +604,7 @@ int64_t initialDiskSize_; public: - Transaction(SQLiteDatabaseWrapper& that) : + ReadWriteTransaction(SQLiteDatabaseWrapper& that) : that_(that), transaction_(new SQLite::Transaction(that_.db_)) { @@ -637,11 +637,41 @@ }; - IDatabaseWrapper::ITransaction* SQLiteDatabaseWrapper::StartTransaction() + class SQLiteDatabaseWrapper::ReadOnlyTransaction : public IDatabaseWrapper::ITransaction { - std::unique_ptr<Transaction> transaction(new Transaction(*this)); - transaction->Begin(); - return transaction.release(); + public: + virtual void Rollback() ORTHANC_OVERRIDE + { + } + + virtual void Commit(int64_t fileSizeDelta /* only used in debug */) ORTHANC_OVERRIDE + { + if (fileSizeDelta != 0) + { + throw OrthancException(ErrorCode_InternalError); + } + } + }; + + + IDatabaseWrapper::ITransaction* SQLiteDatabaseWrapper::StartTransaction(TransactionType type) + { + switch (type) + { + case TransactionType_ReadOnly: + return new ReadOnlyTransaction; // This is a no-op transaction in SQLite (thanks to mutex) + + case TransactionType_ReadWrite: + { + std::unique_ptr<ReadWriteTransaction> transaction; + transaction.reset(new ReadWriteTransaction(*this)); + transaction->Begin(); + return transaction.release(); + } + + default: + throw OrthancException(ErrorCode_InternalError); + } }