Skip to main content

sqlite_graphrag/
pragmas.rs

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