atproto blogging
1-- Edit graph storage (roots and diffs)
2-- Supports DAG structure for future merge support
3
4CREATE TABLE edit_nodes (
5 -- Edit record identity (decomposed)
6 did TEXT NOT NULL,
7 collection TEXT NOT NULL, -- 'sh.weaver.edit.root' or 'sh.weaver.edit.diff'
8 rkey TEXT NOT NULL,
9
10 -- Resource being edited (decomposed)
11 resource_did TEXT NOT NULL,
12 resource_collection TEXT NOT NULL,
13 resource_rkey TEXT NOT NULL,
14
15 node_type TEXT NOT NULL, -- 'root' | 'diff'
16 created_at TEXT NOT NULL,
17 indexed_at TEXT NOT NULL,
18
19 PRIMARY KEY (did, collection, rkey)
20);
21
22CREATE INDEX idx_edit_nodes_resource ON edit_nodes(resource_did, resource_collection, resource_rkey);
23CREATE INDEX idx_edit_nodes_author ON edit_nodes(did);
24
25-- Edit graph edges (supports DAG)
26CREATE TABLE edit_edges (
27 -- Child reference (decomposed)
28 child_did TEXT NOT NULL,
29 child_collection TEXT NOT NULL,
30 child_rkey TEXT NOT NULL,
31
32 -- Parent reference (decomposed)
33 parent_did TEXT NOT NULL,
34 parent_collection TEXT NOT NULL,
35 parent_rkey TEXT NOT NULL,
36
37 edge_type TEXT NOT NULL, -- 'prev' | 'merge' (future)
38
39 PRIMARY KEY (child_did, child_collection, child_rkey, parent_did, parent_collection, parent_rkey),
40 FOREIGN KEY (child_did, child_collection, child_rkey) REFERENCES edit_nodes(did, collection, rkey),
41 FOREIGN KEY (parent_did, parent_collection, parent_rkey) REFERENCES edit_nodes(did, collection, rkey)
42);
43
44CREATE INDEX idx_edit_edges_parent ON edit_edges(parent_did, parent_collection, parent_rkey);
45
46-- Fast path: track current head per resource
47CREATE TABLE edit_heads (
48 -- Resource identity (decomposed)
49 resource_did TEXT NOT NULL,
50 resource_collection TEXT NOT NULL,
51 resource_rkey TEXT NOT NULL,
52
53 -- Latest root reference (decomposed)
54 root_did TEXT,
55 root_collection TEXT,
56 root_rkey TEXT,
57
58 -- Current head reference (decomposed)
59 head_did TEXT,
60 head_collection TEXT,
61 head_rkey TEXT,
62
63 updated_at TEXT NOT NULL,
64
65 PRIMARY KEY (resource_did, resource_collection, resource_rkey)
66);