mirror of
https://github.com/lllin000/PaperForge.git
synced 2026-07-22 17:00:23 +00:00
Atomic snapshots, canonical index mutation serialization, sync post-clean truth, plugin path config-awareness, embed stop signal honesty, full snapshot bootstrap, pf_ prefix unification, workflow command/lifecycle/path corrections, mechanical/cognitive route separation with unknown-command guard.
35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
import sqlite3
|
|
from pathlib import Path
|
|
|
|
from paperforge.config import paperforge_paths
|
|
|
|
|
|
def get_memory_db_path(vault: Path) -> Path:
|
|
"""Return the absolute path to paperforge.db."""
|
|
paths = paperforge_paths(vault)
|
|
index_path = paths.get("index")
|
|
if not index_path:
|
|
raise FileNotFoundError("index path not configured")
|
|
return index_path.parent / "paperforge.db"
|
|
|
|
|
|
def get_connection(db_path: Path, read_only: bool = False) -> sqlite3.Connection:
|
|
"""Open a SQLite connection to paperforge.db with WAL mode.
|
|
|
|
Args:
|
|
db_path: Path to paperforge.db.
|
|
read_only: If True, open in read-only mode (for queries).
|
|
"""
|
|
if read_only:
|
|
uri = "file:" + db_path.as_posix() + "?mode=ro"
|
|
conn = sqlite3.connect(uri, uri=True)
|
|
else:
|
|
db_path.parent.mkdir(parents=True, exist_ok=True)
|
|
conn = sqlite3.connect(str(db_path))
|
|
conn.row_factory = sqlite3.Row
|
|
if not read_only:
|
|
conn.execute("PRAGMA journal_mode=WAL;")
|
|
conn.execute("PRAGMA foreign_keys=ON;")
|
|
return conn
|