summaryrefslogtreecommitdiff
path: root/platform/default/sqlite3.hpp
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2018-05-08 10:40:35 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2018-05-09 07:32:16 -0700
commita1195f6a9dc57910f7c3e6c9217e3041929a01fb (patch)
tree850834874e2d77a4cd89b92853d441020b2d8b43 /platform/default/sqlite3.hpp
parentd1dff1d6e782bc6e9d7a7df27e566bf1f1cf862b (diff)
downloadqtlocation-mapboxgl-a1195f6a9dc57910f7c3e6c9217e3041929a01fb.tar.gz
Avoid exceptions for flow control during database creation
Unfortuntely, it's difficult to avoid all exceptions, because sqlite3_open_v2 does not reliably return SQLITE_NOTADB if the file is not a database. However, this should avoid cases where developers misinterpret the SQLITE_CANTOPEN exception as a crash, which is the common case.
Diffstat (limited to 'platform/default/sqlite3.hpp')
-rw-r--r--platform/default/sqlite3.hpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/platform/default/sqlite3.hpp b/platform/default/sqlite3.hpp
index 20d09b550c..cdc94298fe 100644
--- a/platform/default/sqlite3.hpp
+++ b/platform/default/sqlite3.hpp
@@ -5,6 +5,7 @@
#include <stdexcept>
#include <chrono>
#include <memory>
+#include <mapbox/variant.hpp>
namespace mapbox {
namespace sqlite {
@@ -71,11 +72,14 @@ class Query;
class Database {
private:
+ Database(std::unique_ptr<DatabaseImpl>);
Database(const Database &) = delete;
Database &operator=(const Database &) = delete;
public:
- Database(const std::string &filename, int flags = 0);
+ static mapbox::util::variant<Database, Exception> tryOpen(const std::string &filename, int flags = 0);
+ static Database open(const std::string &filename, int flags = 0);
+
Database(Database &&);
~Database();
Database &operator=(Database &&);