sqlite persistence: the store moves from db.json to dist.db (P5.2)
src/repo/db.sx persists the whole Repo to <store>/dist.db through the vendored SQLite bindings, keeping the load-whole/save-whole call shape. One table per entity; enums as lowercase variant names; list order round-trips via rowid. Enforced uniqueness: apps.slug, channels(app_id, name), tokens.token_hash; lookup indexes on releases(app_id) and artifacts(sha256) (non-unique - identical bytes may ship in several releases). save is DELETE-all + INSERT-all inside BEGIN IMMEDIATE...COMMIT with rollback on failure; every connection sets busy_timeout so the CLI and a running distd interleave safely. A store holding only a pre-SQLite db.json imports once on first load, then the file is renamed db.json.imported; a store with neither starts empty. Consumers gate on db.store_exists instead of probing db.json. The JSON read-back stays for the import path; the entity->json writers stay for distd's /api responses. Tests that parsed db.json directly now assert by querying dist.db through the SQLite bindings; tests/db_import.sx pins the import path; tests/repo_roundtrip.sx pins the SQLite round-trip. make test 22/22.
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
// (artifact.app_id != release.app_id), (6) channel-NAME mismatch
|
||||
// (chan.name != release.channel), (7) release-id collision
|
||||
// (release.id already exists).
|
||||
// 8. Persist + reload: the rolled-back state is what hits db.json — the
|
||||
// 8. Persist + reload: the rolled-back state is what hits the store — the
|
||||
// reloaded channel still points at rel_00 and the attempted releases
|
||||
// are absent.
|
||||
// Uses a fresh `<root>` under `.sx-tmp/` and cleans up.
|
||||
@@ -250,7 +250,7 @@ main :: () -> i32 {
|
||||
rcv := rc!;
|
||||
process.assert(rcv.current_release_id == "rel_00", "persisted: channel points at a release that exists");
|
||||
process.assert(repo2.get_release(rcv.current_release_id) != null, "persisted: channel target is a real release (no dangling)");
|
||||
print(" persisted db.json reflects the rolled-back state\n");
|
||||
print(" persisted store reflects the rolled-back state\n");
|
||||
|
||||
process.run(concat("rm -rf ", root));
|
||||
print("repo_transaction: ALL CASES PASS\n");
|
||||
|
||||
Reference in New Issue
Block a user