diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-02-23 18:02:52 -0800 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2016-02-24 13:38:14 -0800 |
commit | 5cefaeb85716b21f2bbe57165a244844114b8dbe (patch) | |
tree | 33bdf56b0dc6c107e514dd7acb036e7e6e6b1479 /platform/default/mbgl/storage/offline_database.cpp | |
parent | 1bdeddab2cbda01117fac756367f76526b14bb9e (diff) | |
download | qtlocation-mapboxgl-5cefaeb85716b21f2bbe57165a244844114b8dbe.tar.gz |
[core] Enforce foreign key constraints in the offline database
Diffstat (limited to 'platform/default/mbgl/storage/offline_database.cpp')
-rw-r--r-- | platform/default/mbgl/storage/offline_database.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/platform/default/mbgl/storage/offline_database.cpp b/platform/default/mbgl/storage/offline_database.cpp index aac5e4a54c..983b84a3b4 100644 --- a/platform/default/mbgl/storage/offline_database.cpp +++ b/platform/default/mbgl/storage/offline_database.cpp @@ -39,11 +39,16 @@ OfflineDatabase::~OfflineDatabase() { } } +void OfflineDatabase::connect(int flags) { + db = std::make_unique<Database>(path.c_str(), flags); + db->setBusyTimeout(Milliseconds::max()); + db->exec("PRAGMA foreign_keys = ON"); +} + void OfflineDatabase::ensureSchema() { if (path != ":memory:") { try { - db = std::make_unique<Database>(path.c_str(), ReadWrite); - db->setBusyTimeout(Milliseconds::max()); + connect(ReadWrite); { auto userVersionStmt = db->prepare("PRAGMA user_version"); @@ -57,24 +62,20 @@ void OfflineDatabase::ensureSchema() { } removeExisting(); - db = std::make_unique<Database>(path.c_str(), ReadWrite | Create); - db->setBusyTimeout(Milliseconds::max()); + connect(ReadWrite | Create); } catch (mapbox::sqlite::Exception& ex) { if (ex.code == SQLITE_CANTOPEN) { - db = std::make_unique<Database>(path.c_str(), ReadWrite | Create); - db->setBusyTimeout(Milliseconds::max()); + connect(ReadWrite | Create); } else if (ex.code == SQLITE_NOTADB) { removeExisting(); - db = std::make_unique<Database>(path.c_str(), ReadWrite | Create); - db->setBusyTimeout(Milliseconds::max()); + connect(ReadWrite | Create); } } } #include "offline_schema.cpp.include" - db = std::make_unique<Database>(path.c_str(), ReadWrite | Create); - db->setBusyTimeout(Milliseconds::max()); + connect(ReadWrite | Create); db->exec(schema); db->exec("PRAGMA user_version = " + util::toString(schemaVersion)); } |