An embedded, single-file key-value store for OCaml, inspired by BoltDB and LMDB.
1(** Database handle and operations *)
2
3type t =
4 { path : string [@warning "-69"]
5 ; meta : Types.metadata
6 }
7
8let open_db path =
9 match Io.read_header path with
10 | Ok meta -> Ok { path; meta }
11 | Error (Error.IO_error _) ->
12 Result.bind (Io.create_database path 4096) (fun () ->
13 Result.map (fun meta -> { path; meta }) (Io.read_header path))
14 | Error err -> Error err
15;;
16
17let close _ = Ok ()
18
19let metadata db = db.meta
20
21let view _ f =
22 let txn : Types.ro Txn.t = Obj.magic () in
23 f txn
24;;
25
26let update _ f =
27 let txn : Types.rw Txn.t = Obj.magic () in
28 f txn
29;;