comparison 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
comparison
equal deleted inserted replaced
431:7c1fe5d6c12c 432:8b7c1c423367
40 uri_.clear(); 40 uri_.clear();
41 ssl_ = false; 41 ssl_ = false;
42 lock_ = true; 42 lock_ = true;
43 maxConnectionRetries_ = 10; 43 maxConnectionRetries_ = 10;
44 connectionRetryInterval_ = 5; 44 connectionRetryInterval_ = 5;
45 readWriteTransactionStatement_ = "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE";
46 readOnlyTransactionStatement_ = "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY";
47 isVerboseEnabled_ = false; 45 isVerboseEnabled_ = false;
48 } 46 }
49 47
50 48
51 PostgreSQLParameters::PostgreSQLParameters() 49 PostgreSQLParameters::PostgreSQLParameters()
100 isVerboseEnabled_ = configuration.GetBooleanValue("EnableVerboseLogs", false); 98 isVerboseEnabled_ = configuration.GetBooleanValue("EnableVerboseLogs", false);
101 99
102 maxConnectionRetries_ = configuration.GetUnsignedIntegerValue("MaximumConnectionRetries", 10); 100 maxConnectionRetries_ = configuration.GetUnsignedIntegerValue("MaximumConnectionRetries", 10);
103 connectionRetryInterval_ = configuration.GetUnsignedIntegerValue("ConnectionRetryInterval", 5); 101 connectionRetryInterval_ = configuration.GetUnsignedIntegerValue("ConnectionRetryInterval", 5);
104 102
105 if (configuration.LookupStringValue(s, "ReadWriteTransactionStatement")) 103 std::string transactionMode = configuration.GetStringValue("TransactionMode", "SERIALIZABLE");
106 { 104 if (transactionMode == "DEFAULT")
107 SetReadWriteTransactionStatement(s); 105 {
108 } 106 SetIsolationMode(IsolationMode_DbDefault);
109 107 }
110 if (configuration.LookupStringValue(s, "ReadOnlyTransactionStatement")) 108 else if (transactionMode == "READ COMMITTED")
111 { 109 {
112 SetReadOnlyTransactionStatement(s); 110 SetIsolationMode(IsolationMode_ReadCommited);
113 } 111 }
114 112 else if (transactionMode == "SERIALIZABLE")
113 {
114 SetIsolationMode(IsolationMode_Serializable);
115 }
116 else
117 {
118 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadParameterType, std::string("Invalid value for 'TransactionMode': ") + transactionMode);
119 }
115 } 120 }
116 121
117 122
118 void PostgreSQLParameters::SetConnectionUri(const std::string& uri) 123 void PostgreSQLParameters::SetConnectionUri(const std::string& uri)
119 { 124 {