diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-10-21 18:15:50 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-10-22 15:51:16 +0300 |
commit | ab603c5fed833d574c51e2296d7d37014aeaa81b (patch) | |
tree | 98849de08f2aa157432abbda92d17ecc4f6f4a06 /test/storage | |
parent | 0ca96fd8a402ae530da72e3955196007a2ec365f (diff) | |
download | qtlocation-mapboxgl-ab603c5fed833d574c51e2296d7d37014aeaa81b.tar.gz |
[core] Enable incremental vacuum for Offline DB
Thus we avoid re-creating the whole database and keeping the backup file as it happens on calling VACUUM.
Diffstat (limited to 'test/storage')
-rw-r--r-- | test/storage/offline_database.test.cpp | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/test/storage/offline_database.test.cpp b/test/storage/offline_database.test.cpp index 24234b0624..7b5255c9f5 100644 --- a/test/storage/offline_database.test.cpp +++ b/test/storage/offline_database.test.cpp @@ -92,6 +92,14 @@ static std::vector<std::string> databaseTableColumns(const std::string& path, co return columns; } +static int databaseAutoVacuum(const std::string& path) { + mapbox::sqlite::Database db = mapbox::sqlite::Database::open(path, mapbox::sqlite::ReadOnly); + mapbox::sqlite::Statement stmt{db, "pragma auto_vacuum"}; + mapbox::sqlite::Query query{stmt}; + query.run(); + return query.get<int>(0); +} + namespace fixture { const Resource resource{ Resource::Style, "mapbox://test" }; @@ -1360,13 +1368,45 @@ TEST(OfflineDatabase, MigrateFromV5Schema) { EXPECT_EQ(6, databaseUserVersion(filename)); - EXPECT_EQ((std::vector<std::string>{ "id", "url_template", "pixel_ratio", "z", "x", "y", - "expires", "modified", "etag", "data", "compressed", - "accessed", "must_revalidate" }), + EXPECT_EQ((std::vector<std::string>{"id", + "url_template", + "pixel_ratio", + "z", + "x", + "y", + "expires", + "modified", + "etag", + "data", + "compressed", + "accessed", + "must_revalidate"}), databaseTableColumns(filename, "tiles")); - EXPECT_EQ((std::vector<std::string>{ "id", "url", "kind", "expires", "modified", "etag", "data", - "compressed", "accessed", "must_revalidate" }), - databaseTableColumns(filename, "resources")); + EXPECT_EQ( + (std::vector<std::string>{ + "id", "url", "kind", "expires", "modified", "etag", "data", "compressed", "accessed", "must_revalidate"}), + databaseTableColumns(filename, "resources")); + + EXPECT_EQ(0u, log.uncheckedCount()); +} + +TEST(OfflineDatabase, IncrementalVacuum) { + FixtureLog log; + deleteDatabaseFiles(); + util::copyFile(filename, "test/fixtures/offline_database/no_auto_vacuum.db"); + EXPECT_EQ(0, databaseAutoVacuum(filename)); + + { + OfflineDatabase db(filename); + db.setMaximumAmbientCacheSize(0); + + auto regions = db.listRegions().value(); + for (auto& region : regions) { + db.deleteRegion(std::move(region)); + } + } + + EXPECT_EQ(2, databaseAutoVacuum(filename)); EXPECT_EQ(0u, log.uncheckedCount()); } |