Skip to main content

sqlite_graphrag/
pragmas.rs

1//! SQLite PRAGMA helpers applied at connection open and on each transaction.
2
3use crate::errors::AppError;
4use rusqlite::Connection;
5
6pub fn apply_init_pragmas(conn: &Connection) -> Result<(), AppError> {
7    conn.execute_batch("PRAGMA auto_vacuum = INCREMENTAL;")?;
8    apply_connection_pragmas(conn)?;
9    let mode: String = conn.query_row("PRAGMA journal_mode = WAL;", [], |r| r.get(0))?;
10    if mode != "wal" {
11        tracing::warn!(mode = %mode, "journal_mode did not switch to WAL");
12    }
13    conn.execute_batch(&format!(
14        "PRAGMA wal_autocheckpoint = {};",
15        crate::constants::WAL_AUTOCHECKPOINT_PAGES
16    ))?;
17    Ok(())
18}
19
20pub fn apply_connection_pragmas(conn: &Connection) -> Result<(), AppError> {
21    conn.execute_batch(&format!(
22        "PRAGMA synchronous   = NORMAL;
23         PRAGMA foreign_keys  = ON;
24         PRAGMA busy_timeout  = {busy};
25         PRAGMA cache_size    = {cache};
26         PRAGMA temp_store    = MEMORY;
27         PRAGMA mmap_size     = {mmap};",
28        busy = crate::constants::BUSY_TIMEOUT_MILLIS,
29        cache = crate::constants::CACHE_SIZE_KB,
30        mmap = crate::constants::MMAP_SIZE_BYTES,
31    ))?;
32    Ok(())
33}