* 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:
Eelco Dolstra 2010-09-01 11:36:22 +00:00
parent bf0dde9597
commit e4907411c2
1 changed files with 10 additions and 1 deletions

View File

@ -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