diff options
Diffstat (limited to 'platform/default/src/mbgl/storage/offline_database.cpp')
-rw-r--r-- | platform/default/src/mbgl/storage/offline_database.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/platform/default/src/mbgl/storage/offline_database.cpp b/platform/default/src/mbgl/storage/offline_database.cpp index 4f813e906d..fef524ce57 100644 --- a/platform/default/src/mbgl/storage/offline_database.cpp +++ b/platform/default/src/mbgl/storage/offline_database.cpp @@ -197,6 +197,7 @@ void OfflineDatabase::migrateToVersion6() { } void OfflineDatabase::vacuum() { + assert(db); if (getPragma<int64_t>("PRAGMA auto_vacuum") != 2 /*INCREMENTAL*/) { db->exec("PRAGMA auto_vacuum = INCREMENTAL"); db->exec("VACUUM"); @@ -883,7 +884,7 @@ OfflineDatabase::updateMetadata(const int64_t regionID, const OfflineRegionMetad return unexpected<std::exception_ptr>(std::current_exception()); } -std::exception_ptr OfflineDatabase::deleteRegion(OfflineRegion&& region) try { +std::exception_ptr OfflineDatabase::deleteRegion(OfflineRegion&& region, bool pack) try { { mapbox::sqlite::Query query{ getStatement("DELETE FROM regions WHERE id = ?") }; query.bind(1, region.getID()); @@ -892,10 +893,10 @@ std::exception_ptr OfflineDatabase::deleteRegion(OfflineRegion&& region) try { evict(0); assert(db); - vacuum(); + if (pack) vacuum(); // Ensure that the cached offlineTileCount value is recalculated. - offlineMapboxTileCount = {}; + offlineMapboxTileCount = nullopt; return nullptr; } catch (...) { handleError("delete region"); @@ -1303,6 +1304,15 @@ void OfflineDatabase::markUsedResources(int64_t regionID, const std::list<Resour handleError("mark resources as used"); } +std::exception_ptr OfflineDatabase::pack() try { + if (!db) initialize(); + vacuum(); + return nullptr; +} catch (...) { + handleError("pack storage"); + return std::current_exception(); +} + std::exception_ptr OfflineDatabase::resetDatabase() try { removeExisting(); initialize(); |