module

CRE::Persistence::Sqlite::Migrations

Constants

MIGRATIONS = [Step.new(1, ["CREATE TABLE IF NOT EXISTS credentials (\n id TEXT PRIMARY KEY,\n external_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n name TEXT NOT NULL,\n tags TEXT NOT NULL DEFAULT '{}',\n current_version_id TEXT,\n pending_version_id TEXT,\n previous_version_id TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n UNIQUE (kind, external_id)\n)", "CREATE TABLE IF NOT EXISTS credential_versions (\n id TEXT PRIMARY KEY,\n credential_id TEXT NOT NULL REFERENCES credentials(id),\n ciphertext BLOB NOT NULL,\n dek_wrapped BLOB NOT NULL,\n kek_version INTEGER NOT NULL,\n algorithm_id INTEGER NOT NULL,\n metadata TEXT NOT NULL DEFAULT '{}',\n generated_at TEXT NOT NULL,\n revoked_at TEXT\n)", "CREATE TABLE IF NOT EXISTS rotations (\n id TEXT PRIMARY KEY,\n credential_id TEXT NOT NULL,\n rotator_kind TEXT NOT NULL,\n state TEXT NOT NULL,\n started_at TEXT NOT NULL,\n completed_at TEXT,\n step_outcomes TEXT NOT NULL DEFAULT '{}',\n failure_reason TEXT\n)", "CREATE TABLE IF NOT EXISTS audit_events (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n event_id TEXT UNIQUE NOT NULL,\n occurred_at TEXT NOT NULL,\n event_type TEXT NOT NULL,\n actor TEXT NOT NULL,\n target_id TEXT,\n payload TEXT NOT NULL,\n prev_hash BLOB NOT NULL,\n content_hash BLOB NOT NULL,\n hmac BLOB NOT NULL,\n hmac_key_version INTEGER NOT NULL\n)", "CREATE TABLE IF NOT EXISTS audit_batches (\n id TEXT PRIMARY KEY,\n start_seq INTEGER NOT NULL,\n end_seq INTEGER NOT NULL,\n merkle_root BLOB NOT NULL,\n signature BLOB NOT NULL,\n signing_key_version INTEGER NOT NULL,\n sealed_at TEXT NOT NULL\n)", "CREATE TABLE IF NOT EXISTS kek_versions (\n version INTEGER PRIMARY KEY,\n source TEXT NOT NULL,\n source_ref TEXT,\n created_at TEXT NOT NULL,\n retired_at TEXT\n)"]), Step.new(2, ["CREATE TRIGGER IF NOT EXISTS audit_events_no_update\nBEFORE UPDATE ON audit_events\nBEGIN SELECT RAISE(ABORT, 'audit_events is append-only'); END", "CREATE TRIGGER IF NOT EXISTS audit_events_no_delete\nBEFORE DELETE ON audit_events\nBEGIN SELECT RAISE(ABORT, 'audit_events is append-only'); END"]), Step.new(3, ["ALTER TABLE credentials ADD COLUMN last_rotated_at TEXT", "UPDATE credentials SET last_rotated_at = updated_at WHERE last_rotated_at IS NULL"]), Step.new(4, ["CREATE INDEX IF NOT EXISTS credentials_last_rotated_at ON credentials(last_rotated_at)", "CREATE INDEX IF NOT EXISTS credential_versions_credential_id ON credential_versions(credential_id)"])]

Class methods

run(db : DB::Database) : Nil
Source

Nested types