From c3bed1dab8ec429d100d383ad93410d1cfaa16fb Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 11 Apr 2016 19:46:45 -0700 Subject: [core] Fix race condition that could lead to a UNIQUE constraint failure (#4677) --- platform/default/sqlite3.hpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'platform/default/sqlite3.hpp') diff --git a/platform/default/sqlite3.hpp b/platform/default/sqlite3.hpp index abe83a2d44..57ee18e9f3 100644 --- a/platform/default/sqlite3.hpp +++ b/platform/default/sqlite3.hpp @@ -88,5 +88,29 @@ private: sqlite3_stmt *stmt = nullptr; }; +class Transaction { +private: + Transaction(const Transaction&) = delete; + Transaction(Transaction&&) = delete; + Transaction& operator=(const Transaction&) = delete; + +public: + enum Mode { + Deferred, + Immediate, + Exclusive + }; + + Transaction(Database&, Mode = Deferred); + ~Transaction(); + + void commit(); + void rollback(); + +private: + Database& db; + bool needRollback = true; +}; + } } -- cgit v1.2.1