Mercurial > hg > orthanc-databases
diff Framework/SQLite/SQLiteDatabase.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 | 7cea966b6829 |
children | 714c5d2bee76 |
line wrap: on
line diff
--- a/Framework/SQLite/SQLiteDatabase.cpp Wed Jul 11 14:39:59 2018 +0200 +++ b/Framework/SQLite/SQLiteDatabase.cpp Thu Jul 12 10:44:17 2018 +0200 @@ -23,6 +23,7 @@ #include "SQLiteStatement.h" #include "SQLiteTransaction.h" +#include "../Common/ImplicitTransaction.h" #include <Core/OrthancException.h> @@ -41,10 +42,45 @@ { return new SQLiteStatement(*this, query); } + + namespace + { + class SQLiteImplicitTransaction : public ImplicitTransaction + { + private: + SQLiteDatabase& db_; + + protected: + virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, + const Dictionary& parameters) + { + return dynamic_cast<SQLiteStatement&>(statement).Execute(*this, parameters); + } - ITransaction* SQLiteDatabase::CreateTransaction() + virtual void ExecuteWithoutResultInternal(IPrecompiledStatement& statement, + const Dictionary& parameters) + { + dynamic_cast<SQLiteStatement&>(statement).ExecuteWithoutResult(*this, parameters); + } + + public: + SQLiteImplicitTransaction(SQLiteDatabase& db) : + db_(db) + { + } + }; + } + + ITransaction* SQLiteDatabase::CreateTransaction(bool isImplicit) { - return new SQLiteTransaction(*this); + if (isImplicit) + { + return new SQLiteImplicitTransaction(*this); + } + else + { + return new SQLiteTransaction(*this); + } } }