* Only do "pragma journal_mode = ..." if the current journal mode
differs from the desired mode. There is an open SQLite ticket `Executing "PRAGMA journal_mode" may delete journal file while it is in use.'
This commit is contained in:
parent
bf0dde9597
commit
e4907411c2
1 changed files with 10 additions and 1 deletions
|
@ -303,7 +303,16 @@ void LocalStore::openDB(bool create)
|
||||||
The downside is that it doesn't work over NFS, so allow
|
The downside is that it doesn't work over NFS, so allow
|
||||||
truncate mode alternatively. */
|
truncate mode alternatively. */
|
||||||
string mode = queryBoolSetting("use-sqlite-wal", true) ? "wal" : "truncate";
|
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");
|
throw SQLiteError(db, "setting journal mode");
|
||||||
|
|
||||||
/* Increase the auto-checkpoint interval to 8192 pages. This
|
/* Increase the auto-checkpoint interval to 8192 pages. This
|
||||||
|
|
Loading…
Reference in a new issue