SQLiteXX  0.1.0
 All Classes Namespaces Files Functions Enumerations Enumerator
Transaction.cpp
1 #include "Transaction.h"
2 
3 
4 namespace sqlite
5 {
6  static const char* kCommit = "COMMIT";
7  static const char* kRollback = "ROLLBACK";
8  static const char* kBegginings[3] = {"BEGIN DEFERRED", "BEGIN IMMEDIATE", "BEGIN EXCLUSIVE"};
9 
11  type(type),
12  m_connection(connection),
13  m_commited(false)
14  {
15  const char* begin = kBegginings[static_cast<int>(type)];
16  sqlite::execute(m_connection, begin);
17  }
18 
20  {
21  if (!m_commited)
22  {
23  try {
24  sqlite::execute(m_connection, kRollback);
25  } catch (sqlite::exception&) {
26  // Don't throw exception in destructor. Already rolling back if
27  // issue occurred.
28  }
29  }
30  }
31 
33  {
34  sqlite::execute(m_connection, kCommit);
35  m_commited = true;
36  }
37 }
virtual ~transaction() noexcept
Destructor.
Definition: Transaction.cpp:19
int execute(const dbconnection &connection, const std::string &text, Values &&...values)
Executes an SQL query on a database connection.
Definition: Statement.h:642
transaction(dbconnection &connection, const transactiontype type)
Implements a strictly scope-based SQLite transaction.
Definition: Transaction.cpp:10
Encapsulation of the error code and message from SQLite3, based on std::runtime_error.
Definition: Exception.h:14
virtual void commit()
Commit the transaction.
Definition: Transaction.cpp:32
row_iterator begin(const statement &statement) noexcept
Returns an iterator to the first row of a statement.
Definition: Statement.cpp:6
Class that represents a connection to a database.
Definition: DBConnection.h:24
transactiontype
Used to specify the different types of SQLite transactions.
Definition: Transaction.h:17