libdnf/0003-swdb-create-persistent-WAL-files-RhBug1640235.patch

38 lines
1.5 KiB
Diff
Raw Normal View History

From dbe553c3846061f022dae906276b77a8430cce6a Mon Sep 17 00:00:00 2001
From: Jaroslav Rohel <jrohel@redhat.com>
Date: Thu, 18 Oct 2018 16:06:55 +0200
Subject: [PATCH] [swdb] create persistent WAL files (RhBug:1640235)
---
libdnf/utils/sqlite3/Sqlite3.cpp | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/libdnf/utils/sqlite3/Sqlite3.cpp b/libdnf/utils/sqlite3/Sqlite3.cpp
index 021b5d2..27fed56 100644
--- a/libdnf/utils/sqlite3/Sqlite3.cpp
+++ b/libdnf/utils/sqlite3/Sqlite3.cpp
@@ -30,9 +30,17 @@ SQLite3::open()
sqlite3_close(db);
throw LibException(result, "Open failed");
}
- // sqlite doesn't behave correctly in chroots without following line:
- // turn foreign key checking on
- exec("PRAGMA locking_mode = NORMAL; PRAGMA journal_mode = WAL; PRAGMA foreign_keys = ON;");
+#if SQLITE_VERSION_NUMBER >= 3022000
+ int enabled = 1;
+ sqlite3_file_control(db, "main", SQLITE_FCNTL_PERSIST_WAL, &enabled);
+ if (sqlite3_db_readonly(db, "main") == 1)
+ exec("PRAGMA locking_mode = NORMAL; PRAGMA foreign_keys = ON;");
+ else
+ exec("PRAGMA locking_mode = NORMAL; PRAGMA journal_mode = WAL; PRAGMA foreign_keys = ON;");
+#else
+ // Journal mode WAL in readonly mode is supported from sqlite version 3.22.0
+ exec("PRAGMA locking_mode = NORMAL; PRAGMA journal_mode = TRUNCATE; PRAGMA foreign_keys = ON;");
+#endif
sqlite3_busy_timeout(db, 10000);
}
}
--
libgit2 0.26.7