pub const SCHEMA_V1: &str = "
CREATE TABLE IF NOT EXISTS meta (
key TEXT PRIMARY KEY,
value TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS raw (
id INTEGER PRIMARY KEY AUTOINCREMENT,
ts_ms INTEGER NOT NULL,
listener TEXT NOT NULL,
route TEXT NOT NULL,
consumer TEXT NOT NULL,
upstream TEXT NOT NULL,
method TEXT NOT NULL,
status INTEGER NOT NULL,
status_class TEXT NOT NULL,
duration_ms REAL NOT NULL,
attempts INTEGER NOT NULL,
rate_limited INTEGER NOT NULL,
broken INTEGER NOT NULL,
shed INTEGER NOT NULL,
dims TEXT NOT NULL DEFAULT '{}'
);
CREATE INDEX IF NOT EXISTS idx_raw_ts ON raw(ts_ms);
CREATE TABLE IF NOT EXISTS rollup_fixed (
gran INTEGER NOT NULL,
window_start INTEGER NOT NULL,
listener TEXT NOT NULL,
route TEXT NOT NULL,
upstream TEXT NOT NULL,
consumer TEXT NOT NULL,
method TEXT NOT NULL,
status_class TEXT NOT NULL,
requests INTEGER NOT NULL,
errors INTEGER NOT NULL,
rate_limited INTEGER NOT NULL,
shed INTEGER NOT NULL,
duration_sum_ms REAL NOT NULL,
duration_max_ms REAL NOT NULL,
b0 INTEGER NOT NULL, b1 INTEGER NOT NULL, b2 INTEGER NOT NULL,
b3 INTEGER NOT NULL, b4 INTEGER NOT NULL, b5 INTEGER NOT NULL,
b6 INTEGER NOT NULL, b7 INTEGER NOT NULL, b8 INTEGER NOT NULL,
b9 INTEGER NOT NULL, b10 INTEGER NOT NULL, b11 INTEGER NOT NULL,
b12 INTEGER NOT NULL,
PRIMARY KEY (gran, window_start, listener, route, upstream,
consumer, method, status_class)
) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS rollup_dim (
gran INTEGER NOT NULL,
window_start INTEGER NOT NULL,
dim TEXT NOT NULL,
value TEXT NOT NULL,
requests INTEGER NOT NULL,
errors INTEGER NOT NULL,
duration_sum_ms REAL NOT NULL,
b0 INTEGER NOT NULL, b1 INTEGER NOT NULL, b2 INTEGER NOT NULL,
b3 INTEGER NOT NULL, b4 INTEGER NOT NULL, b5 INTEGER NOT NULL,
b6 INTEGER NOT NULL, b7 INTEGER NOT NULL, b8 INTEGER NOT NULL,
b9 INTEGER NOT NULL, b10 INTEGER NOT NULL, b11 INTEGER NOT NULL,
b12 INTEGER NOT NULL,
PRIMARY KEY (gran, window_start, dim, value)
) WITHOUT ROWID;
";Expand description
The full v1 DDL. Idempotent (IF NOT EXISTS) so a fresh database
and a re-run both land at version 1. Connection-level pragmas
(WAL, synchronous, auto_vacuum) are applied at open time — several
of them return rows and cannot live in an execute_batch.