SCHEMA
tcmts.store.SCHEMA · #vnqpx4ue · term · runs anywhere
export const SCHEMA = `
CREATE TABLE IF NOT EXISTS components (hash TEXT PRIMARY KEY, size INTEGER NOT NULL, ir_version INTEGER NOT NULL, created_at INTEGER NOT NULL);
CREATE TABLE IF NOT EXISTS definitions (
hash TEXT PRIMARY KEY,
kind TEXT NOT NULL CHECK (kind IN ('term','type','class','file')),
component_hash TEXT NOT NULL REFERENCES components(hash),
component_index INTEGER NOT NULL,
ir TEXT NOT NULL,
source_text TEXT NOT NULL,
ref_spans TEXT NOT NULL,
reserved_names TEXT NOT NULL,
init_kind TEXT NOT NULL CHECK (init_kind IN ('hoisted','strict')),
name_hint TEXT NOT NULL,
nominal INTEGER NOT NULL DEFAULT 0
);
CREATE INDEX IF NOT EXISTS definitions_by_component ON definitions(component_hash, component_index);
CREATE TABLE IF NOT EXISTS deps (
from_hash TEXT NOT NULL, to_ref TEXT NOT NULL,
ref_kind TEXT NOT NULL CHECK (ref_kind IN ('value','type')), strict INTEGER NOT NULL,
PRIMARY KEY (from_hash, to_ref, ref_kind)
);
CREATE INDEX IF NOT EXISTS deps_by_target ON deps(to_ref);
CREATE TABLE IF NOT EXISTS externals (ref TEXT PRIMARY KEY, module TEXT NOT NULL, subpath TEXT NOT NULL, export_name TEXT NOT NULL);
CREATE TABLE IF NOT EXISTS signatures (hash TEXT PRIMARY KEY, display TEXT NOT NULL, ts_version TEXT NOT NULL);
CREATE TABLE IF NOT EXISTS metadata (hash TEXT NOT NULL, key TEXT NOT NULL, value TEXT NOT NULL, PRIMARY KEY (hash, key));
CREATE TABLE IF NOT EXISTS branches (id INTEGER PRIMARY KEY, name TEXT UNIQUE NOT NULL, head TEXT NOT NULL);
-- history, as Unison keeps it: a namespace is a tree of nodes hashed from their names and children, and a causal
-- is a namespace state with the causals it came from; a branch is a pointer to its head causal. Hashes don't
-- depend on which codebase made them, so two codebases share history by sending what the other lacks.
CREATE TABLE IF NOT EXISTS namespaces (hash TEXT PRIMARY KEY, body TEXT NOT NULL);
CREATE TABLE IF NOT EXISTS causals (hash TEXT PRIMARY KEY, namespace TEXT NOT NULL, ts INTEGER NOT NULL, command TEXT NOT NULL);
CREATE TABLE IF NOT EXISTS causal_parents (child TEXT NOT NULL, parent TEXT NOT NULL, PRIMARY KEY (child, parent));
CREATE INDEX IF NOT EXISTS causal_children ON causal_parents(parent);
-- contributions: a branch proposed for merging into another, with its review (Unison Share's, on tcm serve)
CREATE TABLE IF NOT EXISTS contributions (
id INTEGER PRIMARY KEY, title TEXT NOT NULL, description TEXT NOT NULL, source TEXT NOT NULL, target TEXT NOT NULL,
author TEXT NOT NULL, status TEXT NOT NULL CHECK (status IN ('open','merged','closed')), created INTEGER NOT NULL,
updated INTEGER NOT NULL, merged_from TEXT, merged_as TEXT
);
-- releases: a package's version names a point in history, for good (the package being the namespace it was then);
-- its notes are markdown kept with it
CREATE TABLE IF NOT EXISTS releases (
package TEXT NOT NULL, version TEXT NOT NULL, namespace TEXT NOT NULL, causal TEXT NOT NULL, notes TEXT NOT NULL,
author TEXT NOT NULL, ts INTEGER NOT NULL, PRIMARY KEY (package, version)
);
CREATE TABLE IF NOT EXISTS contribution_comments (
id INTEGER PRIMARY KEY, contribution INTEGER NOT NULL, author TEXT NOT NULL, body TEXT NOT NULL, about TEXT, ts INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS names (branch_id INTEGER NOT NULL, path TEXT NOT NULL, hash TEXT NOT NULL, kind TEXT NOT NULL, PRIMARY KEY (branch_id, path, hash));
CREATE INDEX IF NOT EXISTS names_by_hash ON names(branch_id, hash);
CREATE TABLE IF NOT EXISTS name_log (
id INTEGER PRIMARY KEY AUTOINCREMENT, branch_id INTEGER NOT NULL, ts INTEGER NOT NULL,
op TEXT NOT NULL CHECK (op IN ('add','delete','update')),
path TEXT NOT NULL, old_hash TEXT, new_hash TEXT, kind TEXT NOT NULL, command TEXT NOT NULL,
batch INTEGER NOT NULL DEFAULT 0
);
CREATE TABLE IF NOT EXISTS patches (branch_id INTEGER NOT NULL, old_hash TEXT NOT NULL, new_hash TEXT NOT NULL, ts INTEGER NOT NULL, PRIMARY KEY (branch_id, old_hash));
CREATE TABLE IF NOT EXISTS todo (branch_id INTEGER NOT NULL, hash TEXT NOT NULL, message TEXT NOT NULL, PRIMARY KEY (branch_id, hash));
CREATE TABLE IF NOT EXISTS settings (key TEXT PRIMARY KEY, value TEXT NOT NULL);
-- the package lock: definitions pin a package by compatible range (npm:ms@2); the codebase runs one version of each
-- integrity: the registry's hash of the version's tarball (sha512-…), recorded when first installed and checked after
CREATE TABLE IF NOT EXISTS packages (name TEXT NOT NULL, range TEXT NOT NULL, version TEXT NOT NULL, integrity TEXT, PRIMARY KEY (name, range));
CREATE TABLE IF NOT EXISTS test_results (
hash TEXT NOT NULL, node_version TEXT NOT NULL, ok INTEGER NOT NULL, message TEXT NOT NULL,
output TEXT NOT NULL, duration_ms INTEGER NOT NULL, ts INTEGER NOT NULL,
PRIMARY KEY (hash, node_version)
);
-- oxlint's findings for a definition, by the linter version and configuration they were found with
CREATE TABLE IF NOT EXISTS lint_results (hash TEXT NOT NULL, key TEXT NOT NULL, issues TEXT NOT NULL, PRIMARY KEY (hash, key));
CREATE TABLE IF NOT EXISTS watch_results (
hash TEXT NOT NULL, node_version TEXT NOT NULL, ok INTEGER NOT NULL, value TEXT NOT NULL, ts INTEGER NOT NULL,
PRIMARY KEY (hash, node_version)
);
`
used by