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