backend: SQLite3 での Event Sourcing スキーマ
SQL 文の正常性確認は実際に行いそうなクエリや INSERT を書いたものを
`001_test.sql` と保存した上で、
```
$ cat migrations/*.sql | sqlite3 -table
```
を実行した。
本来であればマイグレーションの実行までを一纏めにしたかったが、
ここに来て Zig の protobuf である Gremlin のコード生成が全然ダメ
なことが発覚。特に `oneof` を普通のメッセージと同様に出力するため
利用側でどのフィールドが判別できない ("_" でプリフィクスされてる
フィールドが `null` かどうかを見ればわかるが、非公開だしハック)
ので実用に耐えないことが分かった。他の Protobuf コード生成ツールは
Protobuf3 しか対応しておらず、 edition 向けのちゃんとしたツールを
書くしかない。しかし工数的に、というかペース的にそんな余裕がないので
Go (WASM 出力できれば) か Rust (Go がウンコだったら) での書き換えを
する予定。そうなると更に低レベルな内容のコミットとなるため、別の
コミットにすることとした。
要約すると、大量の環境整備が入るけどこの SQL 捨てるの勿体ないから
コミットしたよ。
Changes
1 changed files
(+26/-0)
-
-
+
-- SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com>
+
-- SPDX-License-Identifier: AGPL-3.0-only
+
+
CREATE TABLE events (
+
seq INTEGER PRIMARY KEY ON CONFLICT ROLLBACK AUTOINCREMENT,
+
committed_at INTEGER DEFAULT CURRENT_TIMESTAMP,
+
payload BLOB
+
);
+
+
CREATE TABLE projections (
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
+
projection_name TEXT UNIQUE ON CONFLICT ROLLBACK NOT NULL ON CONFLICT ROLLBACK
+
);
+
+
CREATE TABLE snapshots (
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
+
event_seq INTEGER NOT NULL ON CONFLICT ROLLBACK,
+
projection_id INTEGER NOT NULL ON CONFLICT ROLLBACK,
+
payload BLOB,
+
FOREIGN KEY(projection_id) REFERENCES projections(id) ON DELETE CASCADE
+
);
+
+
CREATE UNIQUE INDEX workspace_projection_index ON snapshots (
+
event_seq,
+
projection_id
+
);
- Authored by
-
Shota FUJI
- Authored at
-
- Committed by
-
Shota FUJI
- Committed at
-
- Signature
-
View
- Object name
- 8224474729e5d767927574e1f6d9499cd3b46cc9
- Parent
-
7db4a3ee
- Tab width
-