From 5130ca8843a342a1b708bb63263fd44c6c908120 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 15 Mar 2016 15:23:25 -0700 Subject: [core] Implement a vacuum strategy for the offline database Enable `PRAGMA auto_vacuum = INCREMENTAL`, and perform a `PRAGMA incremental_vacuum` when deleting an offline region. --- test/fixtures/offline/v2.db | Bin 0 -> 43008 bytes test/storage/offline_database.cpp | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 test/fixtures/offline/v2.db (limited to 'test') diff --git a/test/fixtures/offline/v2.db b/test/fixtures/offline/v2.db new file mode 100644 index 0000000000..8fadec4abe Binary files /dev/null and b/test/fixtures/offline/v2.db differ diff --git a/test/storage/offline_database.cpp b/test/storage/offline_database.cpp index 23269a98ed..11d56c237b 100644 --- a/test/storage/offline_database.cpp +++ b/test/storage/offline_database.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -660,3 +661,30 @@ TEST(OfflineDatabase, OfflineMapboxTileCount) { db.deleteRegion(std::move(region1)); EXPECT_EQ(0, db.getOfflineMapboxTileCount()); } + +static int databasePageCount(const std::string& path) { + mapbox::sqlite::Database db(path, mapbox::sqlite::ReadOnly); + mapbox::sqlite::Statement stmt = db.prepare("pragma page_count"); + stmt.run(); + return stmt.get(0); +} + +TEST(OfflineDatabase, MigrateFromV2Schema) { + using namespace mbgl; + + // v2.db is a v2 database containing a single offline region with a small number of resources. + + deleteFile("test/fixtures/offline/v3.db"); + writeFile("test/fixtures/offline/v3.db", util::read_file("test/fixtures/offline/v2.db")); + + { + OfflineDatabase db("test/fixtures/offline/v3.db", 0); + auto regions = db.listRegions(); + for (auto& region : regions) { + db.deleteRegion(std::move(region)); + } + } + + EXPECT_LT(databasePageCount("test/fixtures/offline/v3.db"), + databasePageCount("test/fixtures/offline/v2.db")); +} -- cgit v1.2.1