Module Lmdb.Conv
Converters to and from the internal representation of keys and values. A converter contains serialising and deserialising functions as well as the flags applied when the converter is used in a map.
Types
type 'a t
type bigstring
= (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t
Bigstrings are used to transfer the raw serialised data into and out of the database. They may point directly to a memory-mapped region of the database file.
module Flags = Lmdb__.Lmdb_bindings.DbiFlags
Flags describing the (sorting) properties of keys and values of a map.
Constructor and accessors
val make : ?flags:Flags.t -> serialise:((int -> bigstring) -> 'a -> bigstring) -> deserialise:(bigstring -> 'a) -> unit -> 'a t
make ~serialise ~deserialise
creates a converter from a serialising and a deserialising function- parameter serialise
serialise alloc x
may callalloc len
once to allocate abigstring
of sizelen
. It then must fill the serialised data ofx
into thisbigstring
and return exactly this bigstring. Ifserialise
didn't callalloc
it may return anybigstring
.alloc
may return uninitialised memory. It is therefore recommended thatserialise
overwrites all allocated memory to avoid leaking possibly sensitive memory content into the database.If
serialise
callsalloc
the library may utilise theMDB_RESERVE
interface when appropriate to avoid calls tomalloc
andmemcpy
.
- parameter deserialise
The passed
bigstring
is only valid as long as the current transaction. It is therefore strongly recommended not to leak it out ofdeserialise
.
- parameter flags
Flags to be set on a map using this converter.
Depending on the use of a converter as key or value
Map.create
andMap.open_existing
will select the correct set of flags:_key
flags will be used for keys and_dup
flags will be used for values on maps supporting duplicates.
Predefined converters
Strings
val bigstring : bigstring t
The
bigstring
converter returns bigstrings as returned by the lmdb backend. These bigstrings point into the environment memory-map and are therefore only guaranteed to be valid until the transaction ends. If you need longer-lived values then use thestring
converter, make a copy or write a custom converter.
val string : string t
The
string
converter simply copies the raw database content from / to OCaml strings.