This commit is contained in:
41
backend/app/sqlite_utils.py
Normal file
41
backend/app/sqlite_utils.py
Normal file
@@ -0,0 +1,41 @@
|
||||
"""Shared SQLite connection helpers for backend persistence layers."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import sqlite3
|
||||
from pathlib import Path
|
||||
|
||||
from .config import get_sqlite_busy_timeout_ms, get_sqlite_writer_timeout_seconds
|
||||
|
||||
|
||||
def connect_sqlite_writer(
|
||||
db_path: Path,
|
||||
*,
|
||||
timeout_seconds: float | None = None,
|
||||
busy_timeout_ms: int | None = None,
|
||||
) -> sqlite3.Connection:
|
||||
"""Open one SQLite connection with the common writer policy."""
|
||||
resolved_timeout_seconds = (
|
||||
get_sqlite_writer_timeout_seconds()
|
||||
if timeout_seconds is None
|
||||
else timeout_seconds
|
||||
)
|
||||
resolved_busy_timeout_ms = (
|
||||
get_sqlite_busy_timeout_ms()
|
||||
if busy_timeout_ms is None
|
||||
else busy_timeout_ms
|
||||
)
|
||||
|
||||
connection = sqlite3.connect(db_path, timeout=resolved_timeout_seconds)
|
||||
connection.row_factory = sqlite3.Row
|
||||
connection.execute("PRAGMA foreign_keys = ON")
|
||||
connection.execute("PRAGMA journal_mode = WAL")
|
||||
connection.execute(f"PRAGMA busy_timeout = {resolved_busy_timeout_ms}")
|
||||
return connection
|
||||
|
||||
|
||||
def connect_sqlite_readonly(db_path: Path) -> sqlite3.Connection:
|
||||
"""Open one read-only SQLite connection with row access enabled."""
|
||||
connection = sqlite3.connect(f"file:{db_path}?mode=ro", uri=True)
|
||||
connection.row_factory = sqlite3.Row
|
||||
return connection
|
||||
Reference in New Issue
Block a user