Mercurial > hg > orthanc-databases
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 { |