cot-anc / app /storage /db.py
BART-ender's picture
Deploy Thought Anchors
fda8fb3 verified
from __future__ import annotations
import sqlite3
from pathlib import Path
def connect(database_path: str) -> sqlite3.Connection:
path = Path(database_path)
path.parent.mkdir(parents=True, exist_ok=True)
connection = sqlite3.connect(path, check_same_thread=False)
connection.row_factory = sqlite3.Row
connection.execute("PRAGMA journal_mode=WAL")
connection.execute("PRAGMA foreign_keys=ON")
return connection
def initialize_schema(connection: sqlite3.Connection) -> None:
connection.executescript(
"""
CREATE TABLE IF NOT EXISTS sessions (
id TEXT PRIMARY KEY,
status TEXT NOT NULL,
question TEXT NOT NULL,
model_name TEXT NOT NULL,
owner_id TEXT NOT NULL,
owner_name TEXT,
error TEXT,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS generation_results (
session_id TEXT PRIMARY KEY REFERENCES sessions(id) ON DELETE CASCADE,
answer TEXT NOT NULL,
raw_generation_text TEXT NOT NULL,
raw_trace_text TEXT NOT NULL,
normalized_trace_text TEXT NOT NULL,
sentences_json TEXT NOT NULL,
generation_metadata_json TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS analysis_results (
session_id TEXT PRIMARY KEY REFERENCES sessions(id) ON DELETE CASCADE,
result_json TEXT NOT NULL
);
"""
)
columns = {
row["name"] for row in connection.execute("PRAGMA table_info(generation_results)").fetchall()
}
if "raw_generation_text" not in columns:
connection.execute(
"ALTER TABLE generation_results ADD COLUMN raw_generation_text TEXT NOT NULL DEFAULT ''"
)
session_columns = {row["name"] for row in connection.execute("PRAGMA table_info(sessions)").fetchall()}
if "owner_id" not in session_columns:
connection.execute("ALTER TABLE sessions ADD COLUMN owner_id TEXT NOT NULL DEFAULT 'legacy-user'")
if "owner_name" not in session_columns:
connection.execute("ALTER TABLE sessions ADD COLUMN owner_name TEXT")
connection.commit()