diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-04-27 12:10:00 -0700 |
---|---|---|
committer | Minh Nguyễn <mxn@1ec5.org> | 2016-04-27 13:41:29 -0700 |
commit | b39f22e6b6bbea745be5bbac700040001af86baa (patch) | |
tree | 5d9e2aaa4f1b63c7e39c0883aa5e0540b33a59b6 /platform/default | |
parent | a706a2a48d6ca2076c9c81a0cb0c088ae50d1496 (diff) | |
download | qtlocation-mapboxgl-b39f22e6b6bbea745be5bbac700040001af86baa.tar.gz |
[core] Refactor getRegionCompletedStatus; add completedTileCount; add tests
Diffstat (limited to 'platform/default')
-rw-r--r-- | platform/default/mbgl/storage/offline_database.cpp | 52 | ||||
-rw-r--r-- | platform/default/mbgl/storage/offline_database.hpp | 3 |
2 files changed, 32 insertions, 23 deletions
diff --git a/platform/default/mbgl/storage/offline_database.cpp b/platform/default/mbgl/storage/offline_database.cpp index 9bd731df74..7826d140a1 100644 --- a/platform/default/mbgl/storage/offline_database.cpp +++ b/platform/default/mbgl/storage/offline_database.cpp @@ -608,33 +608,39 @@ OfflineRegionDefinition OfflineDatabase::getRegionDefinition(int64_t regionID) { OfflineRegionStatus OfflineDatabase::getRegionCompletedStatus(int64_t regionID) { OfflineRegionStatus result; - Statement stmtRes = getStatement( - "SELECT COUNT(*), SUM(size) FROM ( " - " SELECT LENGTH(data) as size " - " FROM region_resources, resources " - " WHERE region_id = ?1 " - " AND resource_id = resources.id " - ") "); - stmtRes->bind(1, regionID); - stmtRes->run(); - - Statement stmtTile = getStatement( - "SELECT COUNT(*), SUM(size) FROM ( " - " SELECT LENGTH(data) as size " - " FROM region_tiles, tiles " - " WHERE region_id = ?1 " - " AND tile_id = tiles.id " - ") "); - stmtTile->bind(1, regionID); - stmtTile->run(); - - result.completedTileSize = stmtTile->get<int64_t>(1); - result.completedResourceCount = stmtTile->get<int64_t>(0) + stmtRes->get<int64_t>(0); - result.completedResourceSize = result.completedTileSize + stmtRes->get<int64_t>(1); + std::tie(result.completedResourceCount, result.completedResourceSize) + = getCompletedResourceCountAndSize(regionID); + std::tie(result.completedTileCount, result.completedTileSize) + = getCompletedTileCountAndSize(regionID); + + result.completedResourceCount += result.completedTileCount; + result.completedResourceSize += result.completedTileSize; return result; } +std::pair<int64_t, int64_t> OfflineDatabase::getCompletedResourceCountAndSize(int64_t regionID) { + Statement stmt = getStatement( + "SELECT COUNT(*), SUM(LENGTH(data)) " + "FROM region_resources, resources " + "WHERE region_id = ?1 " + "AND resource_id = resources.id "); + stmt->bind(1, regionID); + stmt->run(); + return { stmt->get<int64_t>(0), stmt->get<int64_t>(1) }; +} + +std::pair<int64_t, int64_t> OfflineDatabase::getCompletedTileCountAndSize(int64_t regionID) { + Statement stmt = getStatement( + "SELECT COUNT(*), SUM(LENGTH(data)) " + "FROM region_tiles, tiles " + "WHERE region_id = ?1 " + "AND tile_id = tiles.id "); + stmt->bind(1, regionID); + stmt->run(); + return { stmt->get<int64_t>(0), stmt->get<int64_t>(1) }; +} + template <class T> T OfflineDatabase::getPragma(const char * sql) { Statement stmt = getStatement(sql); diff --git a/platform/default/mbgl/storage/offline_database.hpp b/platform/default/mbgl/storage/offline_database.hpp index 1e77d560d4..06c44c80be 100644 --- a/platform/default/mbgl/storage/offline_database.hpp +++ b/platform/default/mbgl/storage/offline_database.hpp @@ -92,6 +92,9 @@ private: // Return value is true iff the resource was previously unused by any other regions. bool markUsed(int64_t regionID, const Resource&); + std::pair<int64_t, int64_t> getCompletedResourceCountAndSize(int64_t regionID); + std::pair<int64_t, int64_t> getCompletedTileCountAndSize(int64_t regionID); + const std::string path; std::unique_ptr<::mapbox::sqlite::Database> db; std::unordered_map<const char *, std::unique_ptr<::mapbox::sqlite::Statement>> statements; |