From a4f357ee4b20f678347d117a504f5d5b3a662723 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 23 Jan 2019 09:50:21 +0100 Subject: [PATCH] Sqlite: Use FULL synchronous mode with non-WAL journal According to the documentation DELETE+NORMAL isn't safe from corruption on older file systems. --- src/common/syncjournaldb.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/common/syncjournaldb.cpp b/src/common/syncjournaldb.cpp index b22e041ce..c5c6a459a 100644 --- a/src/common/syncjournaldb.cpp +++ b/src/common/syncjournaldb.cpp @@ -333,10 +333,18 @@ bool SyncJournalDb::checkConnect() qCInfo(lcDb) << "sqlite3 with temp_store =" << env_temp_store; } - pragma1.prepare("PRAGMA synchronous = 1;"); + // With WAL journal the NORMAL sync mode is safe from corruption, + // otherwise use the standard FULL mode. + QByteArray synchronousMode = "FULL"; + if (QString::fromUtf8(_journalMode).compare(QStringLiteral("wal"), Qt::CaseInsensitive) == 0) + synchronousMode = "NORMAL"; + pragma1.prepare("PRAGMA synchronous = " + synchronousMode + ";"); if (!pragma1.exec()) { return sqlFail("Set PRAGMA synchronous", pragma1); + } else { + qCInfo(lcDb) << "sqlite3 synchronous=" << synchronousMode; } + pragma1.prepare("PRAGMA case_sensitive_like = ON;"); if (!pragma1.exec()) { return sqlFail("Set PRAGMA case_sensitivity", pragma1); -- 2.30.2