sqlite_graphrag/
pragmas.rs1use 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}