aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-05-23 00:42:10 +0200
committerEven Rouault <even.rouault@spatialys.com>2021-05-23 00:48:25 +0200
commit1720b0586cfe0b4e0b32fd8b3ca5b9ef1799d2bc (patch)
treea71ba2025ea206bb0216d418b808edbe7b48fc1c
parentbfa170c032c9d0a394197c4e25c4b15bda60087b (diff)
downloadPROJ-1720b0586cfe0b4e0b32fd8b3ca5b9ef1799d2bc.tar.gz
PROJ-1720b0586cfe0b4e0b32fd8b3ca5b9ef1799d2bc.zip
Database: add a ANALYZE step during proj.db creation
This will create the sqlite_stat* table (generally sqlite_stat1). This speeds up a bit the test suite. Runtime of ``make test_cpp_api-check`` goes from the range [14.0 s, 14.6 s] to [13.0s, 13.5s] on my machine.
-rw-r--r--data/sql/commit.sql2
-rw-r--r--src/iso19111/factory.cpp7
2 files changed, 7 insertions, 2 deletions
diff --git a/data/sql/commit.sql b/data/sql/commit.sql
index e5850211..dbf1d738 100644
--- a/data/sql/commit.sql
+++ b/data/sql/commit.sql
@@ -301,4 +301,6 @@ INSERT INTO dummy DEFAULT VALUES;
DROP TRIGGER final_checks;
DROP TABLE dummy;
+ANALYZE;
+
VACUUM;
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp
index 7681a2ec..5eb6d012 100644
--- a/src/iso19111/factory.cpp
+++ b/src/iso19111/factory.cpp
@@ -819,7 +819,9 @@ std::vector<std::string> DatabaseContext::Private::getDatabaseStructure() {
: "db_0.");
const auto sqlBegin("SELECT sql||';' FROM " + dbNamePrefix +
"sqlite_master WHERE type = ");
- const char *const objectTypes[] = {"'table'", "'view'", "'trigger'"};
+ const char *const objectTypes[] = {"'table' AND "
+ "name NOT LIKE 'sqlite_stat%'",
+ "'view'", "'trigger'"};
std::vector<std::string> res;
for (const auto &objectType : objectTypes) {
const auto sqlRes = run(sqlBegin + objectType);
@@ -846,7 +848,8 @@ void DatabaseContext::Private::attachExtraDatabases(
assert(sqlite_handle_);
auto tables =
- run("SELECT name FROM sqlite_master WHERE type IN ('table', 'view')");
+ run("SELECT name FROM sqlite_master WHERE type IN ('table', 'view') "
+ "AND name NOT LIKE 'sqlite_stat%'");
std::map<std::string, std::vector<std::string>> tableStructure;
for (const auto &rowTable : tables) {
auto tableName = rowTable[0];