comparison 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
comparison
equal deleted inserted replaced
431:7c1fe5d6c12c 432:8b7c1c423367
28 28
29 #include "../../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h" 29 #include "../../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h"
30 30
31 namespace OrthancDatabases 31 namespace OrthancDatabases
32 { 32 {
33 enum IsolationMode
34 {
35 IsolationMode_DbDefault = 0,
36 IsolationMode_Serializable = 1,
37 IsolationMode_ReadCommited = 2
38 };
39
33 class PostgreSQLParameters 40 class PostgreSQLParameters
34 { 41 {
35 private: 42 private:
36 std::string host_; 43 std::string host_;
37 uint16_t port_; 44 uint16_t port_;
41 std::string uri_; 48 std::string uri_;
42 bool ssl_; 49 bool ssl_;
43 bool lock_; 50 bool lock_;
44 unsigned int maxConnectionRetries_; 51 unsigned int maxConnectionRetries_;
45 unsigned int connectionRetryInterval_; 52 unsigned int connectionRetryInterval_;
46 std::string readWriteTransactionStatement_;
47 std::string readOnlyTransactionStatement_;
48 bool isVerboseEnabled_; 53 bool isVerboseEnabled_;
49 54 IsolationMode isolationMode_;
50 void Reset(); 55 void Reset();
51 56
52 public: 57 public:
53 PostgreSQLParameters(); 58 PostgreSQLParameters();
54 59
126 unsigned int GetConnectionRetryInterval() const 131 unsigned int GetConnectionRetryInterval() const
127 { 132 {
128 return connectionRetryInterval_; 133 return connectionRetryInterval_;
129 } 134 }
130 135
131 void SetReadWriteTransactionStatement(const std::string& statement) 136 void SetIsolationMode(IsolationMode isolationMode)
132 { 137 {
133 readWriteTransactionStatement_ = statement; 138 isolationMode_ = isolationMode;
134 } 139 }
135 140
136 void SetReadOnlyTransactionStatement(const std::string& statement) 141 const char* GetReadWriteTransactionStatement() const
137 { 142 {
138 readOnlyTransactionStatement_ = statement; 143 switch (isolationMode_)
144 {
145 case IsolationMode_DbDefault:
146 return "";
147 case IsolationMode_ReadCommited:
148 return "SET TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE";
149 case IsolationMode_Serializable:
150 return "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE";
151 default:
152 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
153 }
139 } 154 }
140 155
141 const std::string& GetReadWriteTransactionStatement() const 156 const char* GetReadOnlyTransactionStatement() const
142 { 157 {
143 return readWriteTransactionStatement_; 158 switch (isolationMode_)
144 } 159 {
145 160 case IsolationMode_DbDefault:
146 const std::string& GetReadOnlyTransactionStatement() const 161 return "";
147 { 162 case IsolationMode_ReadCommited:
148 return readOnlyTransactionStatement_; 163 return "SET TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY";
164 case IsolationMode_Serializable:
165 return "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY";
166 default:
167 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
168 }
149 } 169 }
150 170
151 void SetVerboseEnabled(bool enabled) 171 void SetVerboseEnabled(bool enabled)
152 { 172 {
153 isVerboseEnabled_ = enabled; 173 isVerboseEnabled_ = enabled;