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);
+    }
   }
 }