mirror of
https://github.com/rbock/sqlpp11.git
synced 2026-01-04 04:00:39 -06:00
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:
@@ -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};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user