Mercurial > hg > orthanc-databases
diff 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 |
line wrap: on
line diff
--- a/Framework/PostgreSQL/PostgreSQLDatabase.cpp Wed Jul 11 14:39:59 2018 +0200 +++ b/Framework/PostgreSQL/PostgreSQLDatabase.cpp Thu Jul 12 10:44:17 2018 +0200 @@ -24,6 +24,7 @@ #include "PostgreSQLResult.h" #include "PostgreSQLStatement.h" #include "PostgreSQLTransaction.h" +#include "../Common/ImplicitTransaction.h" #include <Core/Logging.h> #include <Core/OrthancException.h> @@ -192,8 +193,44 @@ } - ITransaction* PostgreSQLDatabase::CreateTransaction() + namespace { - return new PostgreSQLTransaction(*this); + class PostgreSQLImplicitTransaction : public ImplicitTransaction + { + private: + PostgreSQLDatabase& db_; + + protected: + virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, + const Dictionary& parameters) + { + return dynamic_cast<PostgreSQLStatement&>(statement).Execute(*this, parameters); + } + + virtual void ExecuteWithoutResultInternal(IPrecompiledStatement& statement, + const Dictionary& parameters) + { + dynamic_cast<PostgreSQLStatement&>(statement).ExecuteWithoutResult(*this, parameters); + } + + public: + PostgreSQLImplicitTransaction(PostgreSQLDatabase& db) : + db_(db) + { + } + }; + } + + + ITransaction* PostgreSQLDatabase::CreateTransaction(bool isImplicit) + { + if (isImplicit) + { + return new PostgreSQLImplicitTransaction(*this); + } + else + { + return new PostgreSQLTransaction(*this); + } } }