aboutsummaryrefslogtreecommitdiffstats
path: root/lib/external/lmdb.ml
diff options
context:
space:
mode:
authorEstevan Castilho <tevo@riajuu.net>2026-04-29 23:29:38 +0000
committerEstevan Castilho <tevo@riajuu.net>2026-04-30 00:05:09 +0000
commitc88ba9ba60e0f6753b3031b0c7dfb0133ea10f06 (patch)
treea2bffcb49f5c6fc5d7e5cc62151847bbb076638d /lib/external/lmdb.ml
parent0658be42e7458907b8ff5f9ce50152f6bf5fd966 (diff)
downloadSakura-c88ba9ba60e0f6753b3031b0c7dfb0133ea10f06.tar.gz
Sakura-c88ba9ba60e0f6753b3031b0c7dfb0133ea10f06.zip
More LMDB bindings
Diffstat (limited to 'lib/external/lmdb.ml')
-rw-r--r--lib/external/lmdb.ml21
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/external/lmdb.ml b/lib/external/lmdb.ml
index 7b0812d..9c1d646 100644
--- a/lib/external/lmdb.ml
+++ b/lib/external/lmdb.ml
@@ -16,9 +16,28 @@ let mdb_mode_t = mode_t
let mdb_result = view ~read:mdb_result_of_int ~write:int_of_mdb_result int
+type mdb_env = unit ptr
let mdb_env = ptr Void
-let mdb_env_create = foreign "mdb_env_create" (ptr mdb_env @-> returning mdb_result)
+type mdb_dbi = Unsigned.uint
+let mdb_dbi = uint
+
+type mdb_txn = unit ptr
+let mdb_txn = ptr Void
+
+let mdb_env_create = foreign "mdb_env_create" (ptr ptr mdb_env @-> returning mdb_result)
+let mdb_env_create' () =
+ let open Utilities.Result in
+ let env_ptr = allocate mdb_env null in
+ let* () = mdb_env_create env_ptr in
+ Ok (!@ env_ptr)
let mdb_env_open = foreign "mdb_env_open" (ptr mdb_env @-> string @-> uint @-> mdb_mode_t @-> returning mdb_result)
let mdb_env_close = foreign "mdb_env_close" (ptr mdb_env @-> returning Void)
+
+let mdb_dbi_open = foreign "mdb_dbi_open" (ptr mdb_txn @-> string @-> uint @-> ptr mdb_dbi @-> returning mdb_result)
+let mdb_dbi_open' txn name flags =
+ let open Utilities.Result in
+ let dbi_ptr = allocate mdb_dbi (Unsigned.UInt.of_int 0) in
+ let* () = mdb_dbi_open txn name flags dbi_ptr in
+ Ok (!@ dbi_ptr)