sqlite: Set exclusive locking_mode to avoid WAL issues #6881
authorChristian Kamm <mail@ckamm.de>
Thu, 10 Jan 2019 08:21:48 +0000 (09:21 +0100)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Tue, 15 Dec 2020 09:58:32 +0000 (10:58 +0100)
Can be overridden with OWNCLOUD_SQLITE_LOCKING_MODE

src/common/syncjournaldb.cpp

index d112c64e7d543ac18e091a27a0be52c33abb661b..9f321e362ff521be5e4069d2e858ef1a70d2a487 100644 (file)
@@ -303,6 +303,18 @@ bool SyncJournalDb::checkConnect()
         qCInfo(lcDb) << "sqlite3 version" << pragma1.stringValue(0);
     }
 
+    // Set locking mode to avoid issues with WAL on Windows
+    static QByteArray locking_mode_env = qgetenv("OWNCLOUD_SQLITE_LOCKING_MODE");
+    if (locking_mode_env.isEmpty())
+        locking_mode_env = "EXCLUSIVE";
+    pragma1.prepare("PRAGMA locking_mode=" + locking_mode_env + ";");
+    if (!pragma1.exec()) {
+        return sqlFail("Set PRAGMA locking_mode", pragma1);
+    } else {
+        pragma1.next();
+        qCInfo(lcDb) << "sqlite3 locking_mode=" << pragma1.stringValue(0);
+    }
+
     pragma1.prepare("PRAGMA journal_mode=" + _journalMode + ";");
     if (!pragma1.exec()) {
         return sqlFail("Set PRAGMA journal_mode", pragma1);