diff Framework/Common/DatabaseManager.h @ 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 c7c54993a92e
children 2fb9cd42af14
line wrap: on
line diff
--- a/Framework/Common/DatabaseManager.h	Wed Jul 11 14:39:59 2018 +0200
+++ b/Framework/Common/DatabaseManager.h	Thu Jul 12 10:44:17 2018 +0200
@@ -54,6 +54,8 @@
 
     ITransaction& GetTransaction();
 
+    void ReleaseImplicitTransaction();
+
   public:
     DatabaseManager(IDatabaseFactory* factory);  // Takes ownership
     
@@ -81,30 +83,21 @@
     void RollbackTransaction();
 
 
+    // This class is only used in the "StorageBackend"
     class Transaction : public boost::noncopyable
     {
     private:
       boost::recursive_mutex::scoped_lock  lock_;
       DatabaseManager&                     manager_;
       IDatabase&                           database_;
+      bool                                 committed_;
 
     public:
-      Transaction(DatabaseManager& manager) :
-      lock_(manager.mutex_),
-      manager_(manager),
-      database_(manager.GetDatabase())
-      {
-      }
+      Transaction(DatabaseManager& manager);
 
-      void Commit()
-      {
-        manager_.CommitTransaction();
-      }
-    
-      void Rollback()
-      {
-        manager_.RollbackTransaction();
-      }
+      ~Transaction();
+
+      void Commit();
 
       DatabaseManager& GetManager()
       {
@@ -143,6 +136,8 @@
                       Transaction& transaction,
                       const char* sql);
 
+      ~CachedStatement();
+
       IDatabase& GetDatabase()
       {
         return database_;