Mercurial > hg > orthanc-databases
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();