ograph/packages/engine/migrations/0015_sources.sql
小橘 d84a860d15 feat: initial ograph repo — engine (85 tests) + cli (31 tests)
Extracted from uncaged monorepo (oc-xiaoju/uncaged).
Resolves oc-xiaoju/uncaged#224.

- @uncaged/ograph: CF Worker engine (events, projections, reactions)
- @uncaged/ograph-cli: CLI for managing OGraph instances
- Removed @uncaged/oid dependency (unused)
- 116 tests, all passing
- CI: GitHub Actions

小橘 🍊(NEKO Team)
2026-04-12 23:43:56 +00:00

55 lines
1.8 KiB
SQL

-- Drop old projection-related tables (clean slate, pre-launch)
DROP TABLE IF EXISTS reactions;
DROP TABLE IF EXISTS projections;
DROP TABLE IF EXISTS projection_def_names;
DROP TABLE IF EXISTS projection_def_versions;
-- Recreate projection_def_versions WITHOUT driven_by, bindings, expression
CREATE TABLE projection_def_versions (
hash TEXT PRIMARY KEY,
name TEXT NOT NULL,
parent_hash TEXT REFERENCES projection_def_versions(hash),
params TEXT NOT NULL,
value_schema TEXT NOT NULL,
initial_value TEXT NOT NULL,
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
);
-- New: per-source bindings + expression
CREATE TABLE projection_def_sources (
projection_hash TEXT NOT NULL REFERENCES projection_def_versions(hash),
event_def_hash TEXT NOT NULL,
bindings TEXT NOT NULL,
expression TEXT NOT NULL,
PRIMARY KEY (projection_hash, event_def_hash)
);
CREATE INDEX idx_pds_event ON projection_def_sources(event_def_hash);
-- Recreate name pointers
CREATE TABLE projection_def_names (
name TEXT PRIMARY KEY,
current_hash TEXT NOT NULL REFERENCES projection_def_versions(hash),
updated_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
);
-- Recreate instance tables
CREATE TABLE projections (
def_hash TEXT NOT NULL REFERENCES projection_def_versions(hash),
params_hash TEXT NOT NULL,
params TEXT NOT NULL,
value TEXT NOT NULL,
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
updated_at INTEGER,
PRIMARY KEY (def_hash, params_hash)
);
CREATE TABLE reactions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
projection_def_hash TEXT NOT NULL REFERENCES projection_def_versions(hash),
params_hash TEXT NOT NULL,
params TEXT NOT NULL,
webhook_url TEXT NOT NULL,
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
);
CREATE INDEX idx_reactions_projection ON reactions(projection_def_hash, params_hash);