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 }