Mercurial > hg > orthanc-databases
comparison Framework/PostgreSQL/PostgreSQLDatabase.cpp @ 23:b2ff1cd2907a
handling of implicit transactions in DatabaseManager
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 12 Jul 2018 10:44:17 +0200 |
parents | 41543239072d |
children | 2fb9cd42af14 |
comparison
equal
deleted
inserted
replaced
22:1e9bad493475 | 23:b2ff1cd2907a |
---|---|
22 #include "PostgreSQLDatabase.h" | 22 #include "PostgreSQLDatabase.h" |
23 | 23 |
24 #include "PostgreSQLResult.h" | 24 #include "PostgreSQLResult.h" |
25 #include "PostgreSQLStatement.h" | 25 #include "PostgreSQLStatement.h" |
26 #include "PostgreSQLTransaction.h" | 26 #include "PostgreSQLTransaction.h" |
27 #include "../Common/ImplicitTransaction.h" | |
27 | 28 |
28 #include <Core/Logging.h> | 29 #include <Core/Logging.h> |
29 #include <Core/OrthancException.h> | 30 #include <Core/OrthancException.h> |
30 | 31 |
31 #include <boost/lexical_cast.hpp> | 32 #include <boost/lexical_cast.hpp> |
190 { | 191 { |
191 return new PostgreSQLStatement(*this, query); | 192 return new PostgreSQLStatement(*this, query); |
192 } | 193 } |
193 | 194 |
194 | 195 |
195 ITransaction* PostgreSQLDatabase::CreateTransaction() | 196 namespace |
196 { | 197 { |
197 return new PostgreSQLTransaction(*this); | 198 class PostgreSQLImplicitTransaction : public ImplicitTransaction |
199 { | |
200 private: | |
201 PostgreSQLDatabase& db_; | |
202 | |
203 protected: | |
204 virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, | |
205 const Dictionary& parameters) | |
206 { | |
207 return dynamic_cast<PostgreSQLStatement&>(statement).Execute(*this, parameters); | |
208 } | |
209 | |
210 virtual void ExecuteWithoutResultInternal(IPrecompiledStatement& statement, | |
211 const Dictionary& parameters) | |
212 { | |
213 dynamic_cast<PostgreSQLStatement&>(statement).ExecuteWithoutResult(*this, parameters); | |
214 } | |
215 | |
216 public: | |
217 PostgreSQLImplicitTransaction(PostgreSQLDatabase& db) : | |
218 db_(db) | |
219 { | |
220 } | |
221 }; | |
222 } | |
223 | |
224 | |
225 ITransaction* PostgreSQLDatabase::CreateTransaction(bool isImplicit) | |
226 { | |
227 if (isImplicit) | |
228 { | |
229 return new PostgreSQLImplicitTransaction(*this); | |
230 } | |
231 else | |
232 { | |
233 return new PostgreSQLTransaction(*this); | |
234 } | |
198 } | 235 } |
199 } | 236 } |