Mercurial > hg > orthanc-databases
diff Framework/PostgreSQL/PostgreSQLParameters.cpp @ 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 | 2f3b0688548e |
line wrap: on
line diff
--- a/Framework/PostgreSQL/PostgreSQLParameters.cpp Thu Dec 07 12:13:43 2023 +0100 +++ b/Framework/PostgreSQL/PostgreSQLParameters.cpp Mon Dec 11 14:39:27 2023 +0100 @@ -42,8 +42,6 @@ lock_ = true; maxConnectionRetries_ = 10; connectionRetryInterval_ = 5; - readWriteTransactionStatement_ = "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE"; - readOnlyTransactionStatement_ = "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY"; isVerboseEnabled_ = false; } @@ -102,16 +100,23 @@ maxConnectionRetries_ = configuration.GetUnsignedIntegerValue("MaximumConnectionRetries", 10); connectionRetryInterval_ = configuration.GetUnsignedIntegerValue("ConnectionRetryInterval", 5); - if (configuration.LookupStringValue(s, "ReadWriteTransactionStatement")) + std::string transactionMode = configuration.GetStringValue("TransactionMode", "SERIALIZABLE"); + if (transactionMode == "DEFAULT") { - SetReadWriteTransactionStatement(s); + SetIsolationMode(IsolationMode_DbDefault); + } + else if (transactionMode == "READ COMMITTED") + { + SetIsolationMode(IsolationMode_ReadCommited); } - - if (configuration.LookupStringValue(s, "ReadOnlyTransactionStatement")) + else if (transactionMode == "SERIALIZABLE") { - SetReadOnlyTransactionStatement(s); + SetIsolationMode(IsolationMode_Serializable); } - + else + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadParameterType, std::string("Invalid value for 'TransactionMode': ") + transactionMode); + } }