···11+CREATE TABLE IF NOT EXISTS mst (
22+ cid TEXT NOT NULL PRIMARY KEY,
33+ data BLOB NOT NULL
44+);
55+66+CREATE TABLE IF NOT EXISTS repo_commit (
77+ id INTEGER PRIMARY KEY CHECK (id = 0),
88+ cid TEXT NOT NULL,
99+ data BLOB NOT NULL
1010+);
1111+1212+CREATE TABLE IF NOT EXISTS records (
1313+ path TEXT NOT NULL PRIMARY KEY,
1414+ cid TEXT NOT NULL,
1515+ since TEXT NOT NULL,
1616+ data BLOB NOT NULL
1717+);
1818+1919+CREATE INDEX IF NOT EXISTS records_cid_idx ON records (cid);
2020+CREATE INDEX IF NOT EXISTS records_since_idx ON records (since);
2121+2222+CREATE TABLE IF NOT EXISTS blobs (
2323+ cid TEXT PRIMARY KEY,
2424+ mimetype TEXT NOT NULL
2525+);
2626+2727+CREATE TABLE IF NOT EXISTS blobs_records (
2828+ record_path TEXT NOT NULL REFERENCES records(path),
2929+ blob_cid TEXT NOT NULL,
3030+ PRIMARY KEY (record_path, blob_cid)
3131+);
3232+3333+CREATE INDEX IF NOT EXISTS blobs_records_blob_cid_idx ON blobs_records (blob_cid);
+1-75
pegasus/lib/user_store.ml
···68686969module Queries = struct
7070 (* mst block storage *)
7171- let create_blocks_tables conn =
7272- let$! () =
7373- [%rapper
7474- execute
7575- {sql| CREATE TABLE IF NOT EXISTS mst (
7676- cid TEXT NOT NULL PRIMARY KEY,
7777- data BLOB NOT NULL
7878- )
7979- |sql}]
8080- () conn
8181- in
8282- [%rapper
8383- execute
8484- {sql| CREATE TABLE IF NOT EXISTS repo_commit (
8585- id INTEGER PRIMARY KEY CHECK (id = 0),
8686- cid TEXT NOT NULL,
8787- data BLOB NOT NULL
8888- )
8989- |sql}]
9090- () conn
9191-9271 let get_block cid =
9372 [%rapper
9473 get_opt
···150129 ~cid ~data
151130152131 (* record storage *)
153153- let create_records_table conn =
154154- let$! () =
155155- [%rapper
156156- execute
157157- {sql| CREATE TABLE IF NOT EXISTS records (
158158- path TEXT NOT NULL PRIMARY KEY,
159159- cid TEXT NOT NULL,
160160- since TEXT NOT NULL,
161161- data BLOB NOT NULL
162162- )
163163- |sql}]
164164- () conn
165165- in
166166- [%rapper
167167- execute
168168- {sql| CREATE INDEX IF NOT EXISTS records_cid_idx ON records (cid);
169169- CREATE INDEX IF NOT EXISTS records_since_idx ON records (since);
170170- |sql}]
171171- () conn
172172-173132 let get_record =
174133 [%rapper
175134 get_opt
···214173 let delete_record path =
215174 [%rapper execute {sql| DELETE FROM records WHERE path = %string{path} |sql}]
216175 ~path
217217-218218- (* blob storage *)
219219- let create_blobs_tables conn =
220220- let$! () =
221221- [%rapper
222222- execute
223223- {sql| CREATE TABLE IF NOT EXISTS blobs (
224224- cid TEXT PRIMARY KEY,
225225- mimetype TEXT NOT NULL
226226- )
227227- |sql}]
228228- () conn
229229- in
230230- let$! () =
231231- [%rapper
232232- execute
233233- (* no `references` on blob_cid because blobs may be uploaded later *)
234234- {sql| CREATE TABLE IF NOT EXISTS blobs_records (
235235- record_path TEXT NOT NULL REFERENCES records(path),
236236- blob_cid TEXT NOT NULL,
237237- PRIMARY KEY (record_path, blob_cid)
238238- )
239239- |sql}]
240240- () conn
241241- in
242242- [%rapper
243243- execute
244244- {sql| CREATE INDEX IF NOT EXISTS blobs_records_blob_cid_idx ON blobs_records (blob_cid) |sql}]
245245- () conn
246176247177 let get_blob =
248178 [%rapper
···362292 in
363293 Lwt.return {did; db}
364294365365-let init t : unit Lwt.t =
366366- let%lwt () = Util.use_pool t.db Queries.create_blocks_tables in
367367- let%lwt () = Util.use_pool t.db Queries.create_records_table in
368368- let%lwt () = Util.use_pool t.db Queries.create_blobs_tables in
369369- Lwt.return_unit
295295+let init t : unit Lwt.t = Migrations.run_us_migrations t.db t.did
370296371297(* mst blocks; implements Writable_blockstore *)
372298