SQL

CREATE TABLE approvals  (
  id            TEXT PRIMARY KEY,
  status        TEXT NOT NULL CHECK (status IN (
                  'open','approved','rejected','executing','needs_followup','failed','applied'
                )),
  action_id     TEXT,
  -- canonical FK to actions
  proposal_id   TEXT,
  thread_id     TEXT,
  channel_id    TEXT,
  user_id       TEXT,
  dedupe_key    TEXT,
  action_fp     TEXT,
  summary       TEXT,
  rationale     TEXT,
  risk          TEXT,
  tier          TEXT,
  event_id      TEXT,
  decided_by    TEXT,
  decided_at    TEXT,
  executing_by  TEXT,
  executing_at  TEXT,
  applied_at    TEXT,
  pending_id    TEXT,
  error         TEXT,
  delivery_state TEXT,
  action_idempotency_key TEXT,
  last_delivered_at TEXT,
  last_nudged_at    TEXT,
  version       INTEGER NOT NULL DEFAULT 1,
  attempt_count INTEGER NOT NULL DEFAULT 0 CHECK (attempt_count >= 0),
  created_at    TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),
  updated_at    TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),
  CHECK (created_at <= updated_at),
  FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
  FOREIGN KEY (action_id) REFERENCES actions(id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED
)

+ Add column

Columns

Column Data type Allow null Primary key Actions
id TEXT Rename | Drop
status TEXT Rename | Drop
action_id TEXT Rename | Drop
proposal_id TEXT Rename | Drop
thread_id TEXT Rename | Drop
channel_id TEXT Rename | Drop
user_id TEXT Rename | Drop
dedupe_key TEXT Rename | Drop
action_fp TEXT Rename | Drop
summary TEXT Rename | Drop
rationale TEXT Rename | Drop
risk TEXT Rename | Drop
tier TEXT Rename | Drop
event_id TEXT Rename | Drop
decided_by TEXT Rename | Drop
decided_at TEXT Rename | Drop
executing_by TEXT Rename | Drop
executing_at TEXT Rename | Drop
applied_at TEXT Rename | Drop
pending_id TEXT Rename | Drop
error TEXT Rename | Drop
delivery_state TEXT Rename | Drop
action_idempotency_key TEXT Rename | Drop
last_delivered_at TEXT Rename | Drop
last_nudged_at TEXT Rename | Drop
version INTEGER Rename | Drop
attempt_count INTEGER Rename | Drop
created_at TEXT Rename | Drop
updated_at TEXT Rename | Drop

Foreign Keys

Column Destination
action_id actions.id
event_id events.id

+ Add index

Indexes

Name Columns Unique SQL Drop?
idx_approvals_action_fp action_fp SQL
CREATE INDEX idx_approvals_action_fp
ON approvals (action_fp)
Drop
idx_approvals_action_idk action_idempotency_key SQL
CREATE INDEX idx_approvals_action_idk
ON approvals(action_idempotency_key)
Drop
idx_approvals_action_status_updated
  • action_id
  • status
  • updated_at
SQL
CREATE INDEX idx_approvals_action_status_updated
ON approvals (action_id, status, updated_at DESC)
Drop
idx_approvals_dedupe_key dedupe_key SQL
CREATE INDEX idx_approvals_dedupe_key
ON approvals(dedupe_key)
Drop
idx_approvals_proposal
  • proposal_id
  • status
  • updated_at
SQL
CREATE INDEX idx_approvals_proposal
ON approvals(proposal_id, status, updated_at DESC)
Drop
idx_approvals_status status SQL
CREATE INDEX idx_approvals_status
ON approvals (status)
Drop
idx_approvals_status_updated_action
  • status
  • updated_at
  • action_id
SQL
CREATE INDEX idx_approvals_status_updated_action
ON approvals (status, updated_at DESC, action_id)
Drop
idx_approvals_thread_status_created
  • thread_id
  • status
  • created_at
SQL
CREATE INDEX idx_approvals_thread_status_created
ON approvals(thread_id, status, created_at ASC)
Drop
idx_approvals_thread_status_updated
  • thread_id
  • status
  • updated_at
SQL
CREATE INDEX idx_approvals_thread_status_updated
ON approvals(thread_id, status, updated_at DESC)
Drop
sqlite_autoindex_approvals_1 id SQL
-- no sql found --
Drop