Mercurial > hg > orthanc-databases
diff Framework/PostgreSQL/PostgreSQLParameters.h @ 432:8b7c1c423367 pg-transactions
new 'TransactionMode' config + rewrote ResourceDeletedFunc to avoid IF/THEN/ELSE pattern
author | Alain Mazy <am@osimis.io> |
---|---|
date | Mon, 11 Dec 2023 14:39:27 +0100 |
parents | dbf811b1bb43 |
children | f0976163dbe1 |
line wrap: on
line diff
--- a/Framework/PostgreSQL/PostgreSQLParameters.h Thu Dec 07 12:13:43 2023 +0100 +++ b/Framework/PostgreSQL/PostgreSQLParameters.h Mon Dec 11 14:39:27 2023 +0100 @@ -30,6 +30,13 @@ namespace OrthancDatabases { + enum IsolationMode + { + IsolationMode_DbDefault = 0, + IsolationMode_Serializable = 1, + IsolationMode_ReadCommited = 2 + }; + class PostgreSQLParameters { private: @@ -43,10 +50,8 @@ bool lock_; unsigned int maxConnectionRetries_; unsigned int connectionRetryInterval_; - std::string readWriteTransactionStatement_; - std::string readOnlyTransactionStatement_; bool isVerboseEnabled_; - + IsolationMode isolationMode_; void Reset(); public: @@ -128,24 +133,39 @@ return connectionRetryInterval_; } - void SetReadWriteTransactionStatement(const std::string& statement) + void SetIsolationMode(IsolationMode isolationMode) { - readWriteTransactionStatement_ = statement; + isolationMode_ = isolationMode; } - void SetReadOnlyTransactionStatement(const std::string& statement) + const char* GetReadWriteTransactionStatement() const { - readOnlyTransactionStatement_ = statement; + switch (isolationMode_) + { + case IsolationMode_DbDefault: + return ""; + case IsolationMode_ReadCommited: + return "SET TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE"; + case IsolationMode_Serializable: + return "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE"; + default: + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + } } - const std::string& GetReadWriteTransactionStatement() const + const char* GetReadOnlyTransactionStatement() const { - return readWriteTransactionStatement_; - } - - const std::string& GetReadOnlyTransactionStatement() const - { - return readOnlyTransactionStatement_; + switch (isolationMode_) + { + case IsolationMode_DbDefault: + return ""; + case IsolationMode_ReadCommited: + return "SET TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY"; + case IsolationMode_Serializable: + return "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY"; + default: + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); + } } void SetVerboseEnabled(bool enabled)