diff Framework/Common/DatabaseManager.h @ 12:41543239072d

transactions for storage area
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 09 Jul 2018 18:34:56 +0200
parents 7cea966b6829
children 9774802fd05f
line wrap: on
line diff
--- a/Framework/Common/DatabaseManager.h	Mon Jul 09 11:45:52 2018 +0200
+++ b/Framework/Common/DatabaseManager.h	Mon Jul 09 18:34:56 2018 +0200
@@ -80,18 +80,57 @@
     
     void RollbackTransaction();
 
+
+    class Transaction : public boost::noncopyable
+    {
+    private:
+      boost::recursive_mutex::scoped_lock  lock_;
+      DatabaseManager&                     manager_;
+      IDatabase&                           database_;
+
+    public:
+      Transaction(DatabaseManager& manager) :
+      lock_(manager.mutex_),
+      manager_(manager),
+      database_(manager.GetDatabase())
+      {
+      }
+
+      void Commit()
+      {
+        manager_.CommitTransaction();
+      }
+    
+      void Rollback()
+      {
+        manager_.RollbackTransaction();
+      }
+
+      DatabaseManager& GetManager()
+      {
+        return manager_;
+      }
+
+      IDatabase& GetDatabase()
+      {
+        return database_;
+      }
+    };
+
+
     class CachedStatement : public boost::noncopyable
     {
     private:
       boost::recursive_mutex::scoped_lock  lock_;
       DatabaseManager&                     manager_;
       StatementLocation                    location_;
-      IDatabase&                           database_;
       ITransaction&                        transaction_;
       IPrecompiledStatement*               statement_;
       std::auto_ptr<Query>                 query_;
       std::auto_ptr<IResult>               result_;
 
+      void Setup(const char* sql);
+
       IResult& GetResult() const;
 
     public:
@@ -99,6 +138,10 @@
                       DatabaseManager& manager,
                       const char* sql);
 
+      CachedStatement(const StatementLocation& location,
+                      Transaction& transaction,
+                      const char* sql);
+
       void SetReadOnly(bool readOnly);
 
       void SetParameterType(const std::string& parameter,
@@ -108,11 +151,6 @@
 
       void Execute(const Dictionary& parameters);
 
-      IDatabase& GetDatabase()
-      {
-        return database_;
-      }
-      
       bool IsDone() const;
       
       void Next();