comparison 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
comparison
equal deleted inserted replaced
22:1e9bad493475 23:b2ff1cd2907a
52 IPrecompiledStatement& CacheStatement(const StatementLocation& location, 52 IPrecompiledStatement& CacheStatement(const StatementLocation& location,
53 const Query& query); 53 const Query& query);
54 54
55 ITransaction& GetTransaction(); 55 ITransaction& GetTransaction();
56 56
57 void ReleaseImplicitTransaction();
58
57 public: 59 public:
58 DatabaseManager(IDatabaseFactory* factory); // Takes ownership 60 DatabaseManager(IDatabaseFactory* factory); // Takes ownership
59 61
60 ~DatabaseManager() 62 ~DatabaseManager()
61 { 63 {
79 void CommitTransaction(); 81 void CommitTransaction();
80 82
81 void RollbackTransaction(); 83 void RollbackTransaction();
82 84
83 85
86 // This class is only used in the "StorageBackend"
84 class Transaction : public boost::noncopyable 87 class Transaction : public boost::noncopyable
85 { 88 {
86 private: 89 private:
87 boost::recursive_mutex::scoped_lock lock_; 90 boost::recursive_mutex::scoped_lock lock_;
88 DatabaseManager& manager_; 91 DatabaseManager& manager_;
89 IDatabase& database_; 92 IDatabase& database_;
93 bool committed_;
90 94
91 public: 95 public:
92 Transaction(DatabaseManager& manager) : 96 Transaction(DatabaseManager& manager);
93 lock_(manager.mutex_),
94 manager_(manager),
95 database_(manager.GetDatabase())
96 {
97 }
98 97
99 void Commit() 98 ~Transaction();
100 { 99
101 manager_.CommitTransaction(); 100 void Commit();
102 }
103
104 void Rollback()
105 {
106 manager_.RollbackTransaction();
107 }
108 101
109 DatabaseManager& GetManager() 102 DatabaseManager& GetManager()
110 { 103 {
111 return manager_; 104 return manager_;
112 } 105 }
141 134
142 CachedStatement(const StatementLocation& location, 135 CachedStatement(const StatementLocation& location,
143 Transaction& transaction, 136 Transaction& transaction,
144 const char* sql); 137 const char* sql);
145 138
139 ~CachedStatement();
140
146 IDatabase& GetDatabase() 141 IDatabase& GetDatabase()
147 { 142 {
148 return database_; 143 return database_;
149 } 144 }
150 145