An embedded, single-file key-value store for OCaml, inspired by BoltDB and LMDB.
at main 582 B view raw
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;;