Merge pull request #171 from volka/isolation_level

Add an option to set a transaction isolation level in start_transaction
This commit is contained in:
Roland Bock
2017-06-03 11:40:51 +02:00
committed by GitHub
4 changed files with 50 additions and 2 deletions

View File

@@ -28,12 +28,21 @@
#define SQLPP_TRANSACTION_H
#include <stdexcept>
#include <ciso646>
namespace sqlpp
{
static constexpr bool quiet_auto_rollback = false;
static constexpr bool report_auto_rollback = true;
enum class isolation_level {
undefined, // use the current database default
serializable, // highest level, stronguest guarantee
repeatable_read, // DBMS holds read and write locks
read_committed, // DMBS holds read locks, non-repeatable reads can occur
read_uncommitted // lowest isolation level, dirty reads may occur
};
template <typename Db>
class transaction_t
{
@@ -48,6 +57,12 @@ namespace sqlpp
_db.start_transaction();
}
transaction_t(Db& db, bool report_unfinished_transaction, isolation_level isolation)
: _db(db), _report_unfinished_transaction(report_unfinished_transaction)
{
_db.start_transaction(isolation);
}
transaction_t(const transaction_t&) = delete;
transaction_t(transaction_t&&) = default;
transaction_t& operator=(const transaction_t&) = delete;
@@ -88,7 +103,13 @@ namespace sqlpp
template <typename Db>
transaction_t<Db> start_transaction(Db& db, bool report_unfinished_transaction = report_auto_rollback)
{
return {db, report_unfinished_transaction};
return {db, report_unfinished_transaction};
}
template <typename Db>
transaction_t<Db> start_transaction(Db& db, isolation_level isolation, bool report_unfinished_transaction = report_auto_rollback)
{
return {db, report_unfinished_transaction, isolation};
}
}