256 lines
6.3 KiB
OCaml
256 lines
6.3 KiB
OCaml
![]() |
(*---------------------------------------------------------------------------
|
||
|
Copyright (c) 2018 Vincent Bernardoff. All rights reserved.
|
||
|
Distributed under the ISC license, see terms at the end of the file.
|
||
|
---------------------------------------------------------------------------*)
|
||
|
|
||
|
open Rresult
|
||
|
|
||
|
type error =
|
||
|
| NoSuchFileOrDir
|
||
|
| IOError
|
||
|
| EnvironmentLocked
|
||
|
| OutOfMemory
|
||
|
| PermissionDenied
|
||
|
| InvalidArgument
|
||
|
| NoSpaceLeftOnDevice
|
||
|
| KeyExist
|
||
|
| KeyNotFound
|
||
|
| PageNotFound
|
||
|
| Corrupted
|
||
|
| Panic
|
||
|
| VersionMismatch
|
||
|
| InvalidFile
|
||
|
| MapFull
|
||
|
| DbsFull
|
||
|
| ReadersFull
|
||
|
| TLSFull
|
||
|
| TxnFull
|
||
|
| CursorFull
|
||
|
| PageFull
|
||
|
| MapResized
|
||
|
| Incompatible
|
||
|
| BadRslot
|
||
|
| BadTxn
|
||
|
| BadValSize
|
||
|
| BadDbi
|
||
|
| TxnProblem
|
||
|
|
||
|
val string_of_error : error -> string
|
||
|
val pp_error : Format.formatter -> error -> unit
|
||
|
val to_msg : ('a, error) result -> ('a, [> R.msg]) result
|
||
|
|
||
|
type version = {
|
||
|
major : int ;
|
||
|
minor : int ;
|
||
|
patch : int ;
|
||
|
}
|
||
|
|
||
|
val version : unit -> version
|
||
|
|
||
|
type ro
|
||
|
type rw
|
||
|
type t
|
||
|
|
||
|
type flag_env =
|
||
|
| FixedMap
|
||
|
| NoSubdir
|
||
|
| NoSync
|
||
|
| RdOnly
|
||
|
| NoMetaSync
|
||
|
| WriteMap
|
||
|
| MapAsync
|
||
|
| NoTLS
|
||
|
| NoLock
|
||
|
| NoRdAhead
|
||
|
| NoMemInit
|
||
|
| PrevMeta
|
||
|
|
||
|
val opendir :
|
||
|
?maxreaders:int -> ?maxdbs:int -> ?mapsize:int64 -> ?flags:flag_env list ->
|
||
|
string -> Unix.file_perm -> (t, error) result
|
||
|
|
||
|
val closedir : t -> unit
|
||
|
|
||
|
val copy : ?compact:bool -> t -> string -> (unit, error) result
|
||
|
val copyfd : ?compact:bool -> t -> Unix.file_descr -> (unit, error) result
|
||
|
|
||
|
type stat = {
|
||
|
psize : int ;
|
||
|
depth : int ;
|
||
|
branch_pages : int ;
|
||
|
leaf_pages : int ;
|
||
|
overflow_pages : int ;
|
||
|
entries : int ;
|
||
|
}
|
||
|
|
||
|
val stat : t -> stat
|
||
|
|
||
|
type envinfo = {
|
||
|
mapsize : int ;
|
||
|
last_pgno : int ;
|
||
|
last_txnid : int ;
|
||
|
maxreaders : int ;
|
||
|
numreaders : int ;
|
||
|
}
|
||
|
|
||
|
val envinfo : t -> envinfo
|
||
|
|
||
|
val sync : ?force:bool -> t -> (unit, error) result
|
||
|
|
||
|
val get_flags : t -> flag_env list
|
||
|
val set_flags : t -> flag_env list -> (unit, error) result
|
||
|
val clear_flags : t -> flag_env list -> (unit, error) result
|
||
|
|
||
|
val get_path : t -> string
|
||
|
val get_fd : t -> Unix.file_descr
|
||
|
|
||
|
val get_maxreaders : t -> int
|
||
|
val get_maxkeysize : t -> int
|
||
|
|
||
|
val set_mapsize : t -> int64 -> (unit, error) result
|
||
|
|
||
|
type _ txn
|
||
|
|
||
|
val create_rw_txn :
|
||
|
?sync:bool -> ?metasync:bool ->
|
||
|
?parent:rw txn -> t -> (rw txn, error) result
|
||
|
|
||
|
val create_ro_txn :
|
||
|
?sync:bool -> ?metasync:bool ->
|
||
|
?parent:_ txn -> t -> (ro txn, error) result
|
||
|
|
||
|
val get_txn_id : _ txn -> int
|
||
|
val get_txn_env : _ txn -> t
|
||
|
|
||
|
val commit_txn : _ txn -> (unit, error) result
|
||
|
val abort_txn : _ txn -> unit
|
||
|
|
||
|
val reset_ro_txn : ro txn -> unit
|
||
|
val renew_ro_txn : ro txn -> (unit, error) result
|
||
|
|
||
|
type flag_open =
|
||
|
| ReverseKey
|
||
|
| DupSort
|
||
|
| IntegerKey
|
||
|
| DupFixed
|
||
|
| IntegerDup
|
||
|
| ReverseDup
|
||
|
| Create
|
||
|
|
||
|
type db
|
||
|
|
||
|
val opendb :
|
||
|
?flags:flag_open list -> ?name:string -> _ txn -> (db, error) result
|
||
|
|
||
|
val db_stat : _ txn -> db -> (stat, error) result
|
||
|
val db_flags : _ txn -> db -> (flag_open list, error) result
|
||
|
val db_drop : _ txn -> db -> (unit, error) result
|
||
|
|
||
|
val with_ro_db :
|
||
|
?sync:bool -> ?metasync:bool ->
|
||
|
?parent:_ txn -> ?flags:flag_open list ->
|
||
|
?name:string -> t -> f:(ro txn -> db -> ('a, error) result) ->
|
||
|
('a, error) result
|
||
|
|
||
|
val with_rw_db :
|
||
|
?sync:bool -> ?metasync:bool ->
|
||
|
?parent:rw txn -> ?flags:flag_open list ->
|
||
|
?name:string -> t -> f:(rw txn -> db -> ('a, error) result) ->
|
||
|
('a, error) result
|
||
|
|
||
|
type buffer = (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t
|
||
|
|
||
|
val get : _ txn -> db -> string -> (buffer, error) result
|
||
|
val mem : _ txn -> db -> string -> (bool, error) result
|
||
|
|
||
|
type flag_put =
|
||
|
| NoOverwrite
|
||
|
| NoDupData
|
||
|
| Current
|
||
|
| Reserve
|
||
|
| Append
|
||
|
| AppendDup
|
||
|
| Multiple
|
||
|
|
||
|
val put : ?flags:flag_put list ->
|
||
|
rw txn -> db -> string -> buffer -> (unit, error) result
|
||
|
val put_string : ?flags:flag_put list ->
|
||
|
rw txn -> db -> string -> string -> (unit, error) result
|
||
|
|
||
|
val del : ?data:buffer ->
|
||
|
rw txn -> db -> string -> (unit, error) result
|
||
|
val del_string : ?data:string ->
|
||
|
rw txn -> db -> string -> (unit, error) result
|
||
|
|
||
|
type _ cursor
|
||
|
|
||
|
val opencursor : 'a txn -> db -> ('a cursor, error) result
|
||
|
val cursor_close : _ cursor -> unit
|
||
|
val cursor_renew : ro txn -> ro cursor -> (unit, error) result
|
||
|
|
||
|
val cursor_txn : 'a cursor -> 'a txn
|
||
|
val cursor_db : _ cursor -> db
|
||
|
|
||
|
val cursor_first : _ cursor -> (unit, error) result
|
||
|
val cursor_last : _ cursor -> (unit, error) result
|
||
|
val cursor_prev : _ cursor -> (unit, error) result
|
||
|
val cursor_next : _ cursor -> (unit, error) result
|
||
|
val cursor_at : _ cursor -> string -> (unit, error) result
|
||
|
|
||
|
val cursor_get : _ cursor -> (buffer * buffer, error) result
|
||
|
|
||
|
val cursor_fold_left :
|
||
|
f:('a -> (buffer * buffer) -> ('a, error) result) ->
|
||
|
init:'a -> _ cursor -> ('a, error) result
|
||
|
|
||
|
val cursor_iter :
|
||
|
f:(buffer * buffer -> (unit, error) result) -> _ cursor -> (unit, error) result
|
||
|
|
||
|
val with_cursor :
|
||
|
'a txn -> db -> f:('a cursor -> ('b, error) result) ->
|
||
|
('b, error) result
|
||
|
|
||
|
type cursor_op =
|
||
|
| First
|
||
|
| First_dup
|
||
|
| Get_both
|
||
|
| Get_both_range
|
||
|
| Get_current
|
||
|
| Get_multiple
|
||
|
| Last
|
||
|
| Last_dup
|
||
|
| Next
|
||
|
| Next_dup
|
||
|
| Next_multiple
|
||
|
| Next_nodup
|
||
|
| Prev
|
||
|
| Prev_dup
|
||
|
| Prev_nodup
|
||
|
| Set
|
||
|
| Set_key
|
||
|
| Set_range
|
||
|
| Prev_multiple
|
||
|
|
||
|
val cursor_put : ?flags:flag_put list ->
|
||
|
rw cursor -> string -> buffer -> (unit, error) result
|
||
|
val cursor_put_string : ?flags:flag_put list ->
|
||
|
rw cursor -> string -> string -> (unit, error) result
|
||
|
val cursor_del : ?flags:flag_put list -> rw cursor -> (unit, error) result
|
||
|
val cursor_count : _ cursor -> (int, error) result
|
||
|
|
||
|
(*---------------------------------------------------------------------------
|
||
|
Copyright (c) 2018 Vincent Bernardoff
|
||
|
|
||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||
|
purpose with or without fee is hereby granted, provided that the above
|
||
|
copyright notice and this permission notice appear in all copies.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||
|
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||
|
---------------------------------------------------------------------------*)
|