aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/local-store.cc11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index fd6ad6464..c0c1461b4 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -303,7 +303,16 @@ void LocalStore::openDB(bool create)
The downside is that it doesn't work over NFS, so allow
truncate mode alternatively. */
string mode = queryBoolSetting("use-sqlite-wal", true) ? "wal" : "truncate";
- if (sqlite3_exec(db, ("pragma main.journal_mode = " + mode + ";").c_str(), 0, 0, 0) != SQLITE_OK)
+ string prevMode;
+ {
+ SQLiteStmt stmt;
+ stmt.create(db, "pragma main.journal_mode;");
+ if (sqlite3_step(stmt) != SQLITE_ROW)
+ throw SQLiteError(db, "querying journal mode");
+ prevMode = string((const char *) sqlite3_column_text(stmt, 0));
+ }
+ if (prevMode != mode &&
+ sqlite3_exec(db, ("pragma main.journal_mode = " + mode + ";").c_str(), 0, 0, 0) != SQLITE_OK)
throw SQLiteError(db, "setting journal mode");
/* Increase the auto-checkpoint interval to 8192 pages. This