1#pragma once
2
3#include <boost/noncopyable.hpp>
4
5#include <mysqlxx/Connection.h>
6
7
8namespace mysqlxx
9{
10
11/** RAII для транзакции. При инициализации, транзакция стартует.
12 * При уничтожении, если не был вызван метод commit(), будет произведёт rollback.
13 */
14class Transaction : private boost::noncopyable
15{
16public:
17 Transaction(Connection & conn_)
18 : conn(conn_), finished(false)
19 {
20 conn.query("START TRANSACTION").execute();
21 }
22
23 virtual ~Transaction()
24 {
25 try
26 {
27 if (!finished)
28 rollback();
29 }
30 catch (...)
31 {
32 }
33 }
34
35 void commit()
36 {
37 conn.query("COMMIT").execute();
38 finished = true;
39 }
40
41 void rollback()
42 {
43 conn.query("ROLLBACK").execute();
44 finished = true;
45 }
46
47private:
48 Connection & conn;
49 bool finished;
50};
51
52
53}
54