summaryrefslogtreecommitdiff
path: root/platform/default/sqlite3.hpp
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-04-11 19:46:45 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-04-11 19:46:45 -0700
commitc3bed1dab8ec429d100d383ad93410d1cfaa16fb (patch)
treed54859fa4910a9b443892dc60e9495a6143c2cba /platform/default/sqlite3.hpp
parentbe47e35a975ff7c43755e8c3898512147bb37904 (diff)
downloadqtlocation-mapboxgl-c3bed1dab8ec429d100d383ad93410d1cfaa16fb.tar.gz
[core] Fix race condition that could lead to a UNIQUE constraint failure (#4677)
Diffstat (limited to 'platform/default/sqlite3.hpp')
-rw-r--r--platform/default/sqlite3.hpp24
1 files changed, 24 insertions, 0 deletions
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;
+};
+
}
}