e34f3b2250
Fix problem with non root users that use command that requires swdb like "dnf list".
38 lines
1.5 KiB
Diff
38 lines
1.5 KiB
Diff
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
|
|
|