diff options
author | Robert Hensing <robert@roberthensing.nl> | 2023-01-17 19:53:21 +0100 |
---|---|---|
committer | Robert Hensing <robert@roberthensing.nl> | 2023-02-07 23:34:36 +0100 |
commit | 8a0ef5d58e0bb59eda0b8fd5622f2d731016f7a3 (patch) | |
tree | c86da2c90eb9107845f94091630be9abe780f9e4 /src | |
parent | 1a86d3e98ebcc9a670c3c39499823298ce7fa1da (diff) |
sqlite.cc: Add SQL tracing
Set environment variable NIX_DEBUG_SQLITE_TRACES=1 to log all sql statements.
Diffstat (limited to 'src')
-rw-r--r-- | src/libstore/sqlite.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libstore/sqlite.cc b/src/libstore/sqlite.cc index 353dff9fa..871f2f3be 100644 --- a/src/libstore/sqlite.cc +++ b/src/libstore/sqlite.cc @@ -41,6 +41,15 @@ SQLiteError::SQLiteError(const char *path, const char *errMsg, int errNo, int ex throw SQLiteError(path, errMsg, err, exterr, offset, std::move(hf)); } +static void traceSQL(void * x, const char * sql) +{ + // wacky delimiters: + // so that we're quite unambiguous without escaping anything + // notice instead of trace: + // so that this can be enabled without getting the firehose in our face. + notice("SQL<[%1%]>", sql); +}; + SQLite::SQLite(const Path & path, bool create) { // useSQLiteWAL also indicates what virtual file system we need. Using @@ -58,6 +67,11 @@ SQLite::SQLite(const Path & path, bool create) if (sqlite3_busy_timeout(db, 60 * 60 * 1000) != SQLITE_OK) SQLiteError::throw_(db, "setting timeout"); + if (getEnv("NIX_DEBUG_SQLITE_TRACES") == "1") { + // To debug sqlite statements; trace all of them + sqlite3_trace(db, &traceSQL, nullptr); + } + exec("pragma foreign_keys = 1"); } |