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