From b1a7b26eef46106deec0a954d400e5a1aac47945 Mon Sep 17 00:00:00 2001 From: Ben Radford Date: Tue, 16 May 2023 15:48:40 +0100 Subject: [PATCH] Rename ReadOnly to Immutable and clarify its purpose. --- src/libstore/local-store.cc | 2 +- src/libstore/sqlite.cc | 7 +++---- src/libstore/sqlite.hh | 7 +++++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 1c5d8fc9e..59685400f 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -490,7 +490,7 @@ void LocalStore::openDB(State & state, bool create) /* Open the Nix database. */ std::string dbPath = dbDir + "/db.sqlite"; auto & db(state.db); - auto openMode = readOnly ? SQLiteOpenMode::ReadOnly + auto openMode = readOnly ? SQLiteOpenMode::Immutable : create ? SQLiteOpenMode::Normal : SQLiteOpenMode::NoCreate; state.db = SQLite(dbPath, openMode); diff --git a/src/libstore/sqlite.cc b/src/libstore/sqlite.cc index 4166cc2cd..7c8decb74 100644 --- a/src/libstore/sqlite.cc +++ b/src/libstore/sqlite.cc @@ -53,15 +53,14 @@ static void traceSQL(void * x, const char * sql) SQLite::SQLite(const Path & path, SQLiteOpenMode mode) { - bool readOnly = mode == SQLiteOpenMode::ReadOnly; - // useSQLiteWAL also indicates what virtual file system we need. Using // `unix-dotfile` is needed on NFS file systems and on Windows' Subsystem // for Linux (WSL) where useSQLiteWAL should be false by default. const char *vfs = settings.useSQLiteWAL ? 0 : "unix-dotfile"; - int flags = readOnly ? SQLITE_OPEN_READONLY : SQLITE_OPEN_READWRITE; + bool immutable = mode == SQLiteOpenMode::Immutable; + int flags = immutable ? SQLITE_OPEN_READONLY : SQLITE_OPEN_READWRITE; if (mode == SQLiteOpenMode::Normal) flags |= SQLITE_OPEN_CREATE; - auto uri = "file:" + percentEncode(path) + "?immutable=" + (readOnly ? "1" : "0"); + auto uri = "file:" + percentEncode(path) + "?immutable=" + (immutable ? "1" : "0"); int ret = sqlite3_open_v2(uri.c_str(), &db, SQLITE_OPEN_URI | flags, vfs); if (ret != SQLITE_OK) { const char * err = sqlite3_errstr(ret); diff --git a/src/libstore/sqlite.hh b/src/libstore/sqlite.hh index 33f0eeed8..b0e84f8ed 100644 --- a/src/libstore/sqlite.hh +++ b/src/libstore/sqlite.hh @@ -23,10 +23,13 @@ enum class SQLiteOpenMode { */ NoCreate, /** - * Open the database in read-only mode. + * Open the database in immutable mode. + * In addition to the database being read-only, + * no wal or journal files will be created by sqlite. + * Use this mode if the database is on a read-only filesystem. * Fails with an error if the database does not exist. */ - ReadOnly + Immutable }; /**