- Add app/db/ abstraction layer: Backend enum, DbConn wrapper, dialect helper (q() for ? vs %s paramstyle), get_conn(), tenant_id() - Auto-detect backend from DATABASE_URL; SQLite remains default when unset — no config change for local deployments - Add tenant_id column to all three logical DBs (main, context, incidents); idempotent ALTER TABLE migration runs before schema scripts on existing DBs - All INSERTs inject tenant_id; SELECTs use (tenant_id = ? OR tenant_id = '') for backward compat with pre-namespacing rows - Add docker-compose.yml with named volume turnstone_pgdata (survives rebuilds) and optional external Postgres support via DATABASE_URL override - Add scripts/migrate_sqlite_to_postgres.py — one-shot idempotent migration for existing SQLite data; ON CONFLICT DO NOTHING for safe re-runs - Fix SSH glean path in pipeline.py to use ensure_schema + get_conn (was still using raw sqlite3.connect + old _SCHEMA without tenant_id) - Fix FTS5 JOIN ambiguity: qualify repeat_count as f.repeat_count in search - Update all tests to use ensure_*_schema fixtures; add row_factory where needed - 394/394 tests passing Closes: #42 Closes: #50
36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
"""Turnstone database abstraction — unified SQLite / Postgres interface.
|
|
|
|
Public API:
|
|
BACKEND — Backend.SQLITE or Backend.POSTGRES
|
|
get_conn(path) — context manager yielding a DbConn
|
|
resolve_tenant_id() — this node's tenant ID (env or hostname)
|
|
q(sql) — rewrite ? placeholders to %s for Postgres
|
|
frag — SQL fragment helpers (insert_or_ignore, source_group_expr, …)
|
|
ensure_schema — idempotent schema init
|
|
close_pool — call during shutdown when using Postgres
|
|
"""
|
|
from app.db.backend import BACKEND, Backend
|
|
from app.db.conn import DbConn, close_pool, get_conn
|
|
from app.db.dialect import frag, q
|
|
from app.db.schema import (
|
|
ensure_context_schema,
|
|
ensure_incidents_schema,
|
|
ensure_schema,
|
|
migrate_incidents_to_dedicated_db,
|
|
)
|
|
from app.db.tenant import resolve_tenant_id
|
|
|
|
__all__ = [
|
|
"BACKEND",
|
|
"Backend",
|
|
"DbConn",
|
|
"close_pool",
|
|
"get_conn",
|
|
"frag",
|
|
"q",
|
|
"ensure_schema",
|
|
"ensure_context_schema",
|
|
"ensure_incidents_schema",
|
|
"migrate_incidents_to_dedicated_db",
|
|
"resolve_tenant_id",
|
|
]
|