| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480 |
- /**
- * LMDB - Lightning Memory-Mapped Database bindings for Vala
- *
- * This VAPI provides bindings for the LMDB library,
- * a high-performance key-value store with ACID transactions.
- */
- [CCode (cprefix = "mdb_", lower_case_cprefix = "mdb_", cheader_filename = "lmdb.h")]
- namespace Lmdb {
- /**
- * Environment flags for mdb_env_open()
- */
- [CCode (cname = "unsigned int", has_type_id = false)]
- [Flags]
- public enum EnvFlags {
- [CCode (cname = "0")]
- NONE,
- [CCode (cname = "MDB_FIXEDMAP")]
- FIXEDMAP,
- [CCode (cname = "MDB_NOSUBDIR")]
- NOSUBDIR,
- [CCode (cname = "MDB_NOSYNC")]
- NOSYNC,
- [CCode (cname = "MDB_RDONLY")]
- RDONLY,
- [CCode (cname = "MDB_NOMETASYNC")]
- NOMETASYNC,
- [CCode (cname = "MDB_WRITEMAP")]
- WRITEMAP,
- [CCode (cname = "MDB_MAPASYNC")]
- MAPASYNC,
- [CCode (cname = "MDB_NOTLS")]
- NOTLS,
- [CCode (cname = "MDB_NOLOCK")]
- NOLOCK,
- [CCode (cname = "MDB_NORDAHEAD")]
- NORDAHEAD,
- [CCode (cname = "MDB_NOMEMINIT")]
- NOMEMINIT
- }
- /**
- * Transaction flags for mdb_txn_begin()
- */
- [CCode (cname = "unsigned int", has_type_id = false)]
- [Flags]
- public enum TxnFlags {
- [CCode (cname = "0")]
- NONE,
- [CCode (cname = "MDB_RDONLY")]
- RDONLY
- }
- /**
- * Database flags for mdb_dbi_open()
- */
- [CCode (cname = "unsigned int", has_type_id = false)]
- [Flags]
- public enum DbFlags {
- [CCode (cname = "0")]
- NONE,
- [CCode (cname = "MDB_REVERSEKEY")]
- REVERSEKEY,
- [CCode (cname = "MDB_DUPSORT")]
- DUPSORT,
- [CCode (cname = "MDB_INTEGERKEY")]
- INTEGERKEY,
- [CCode (cname = "MDB_DUPFIXED")]
- DUPFIXED,
- [CCode (cname = "MDB_INTEGERDUP")]
- INTEGERDUP,
- [CCode (cname = "MDB_REVERSEDUP")]
- REVERSEDUP,
- [CCode (cname = "MDB_CREATE")]
- CREATE
- }
- /**
- * Write flags for mdb_put()
- */
- [CCode (cname = "unsigned int", has_type_id = false)]
- [Flags]
- public enum WriteFlags {
- [CCode (cname = "0")]
- NONE,
- [CCode (cname = "MDB_NOOVERWRITE")]
- NOOVERWRITE,
- [CCode (cname = "MDB_NODUPDATA")]
- NODUPDATA,
- [CCode (cname = "MDB_CURRENT")]
- CURRENT,
- [CCode (cname = "MDB_RESERVE")]
- RESERVE,
- [CCode (cname = "MDB_APPEND")]
- APPEND,
- [CCode (cname = "MDB_APPENDDUP")]
- APPENDDUP,
- [CCode (cname = "MDB_MULTIPLE")]
- MULTIPLE
- }
- /**
- * Cursor operation codes for mdb_cursor_get()
- */
- [CCode (cname = "MDB_cursor_op", has_type_id = false)]
- public enum CursorOp {
- [CCode (cname = "MDB_FIRST")]
- FIRST,
- [CCode (cname = "MDB_FIRST_DUP")]
- FIRST_DUP,
- [CCode (cname = "MDB_GET_BOTH")]
- GET_BOTH,
- [CCode (cname = "MDB_GET_BOTH_RANGE")]
- GET_BOTH_RANGE,
- [CCode (cname = "MDB_GET_CURRENT")]
- GET_CURRENT,
- [CCode (cname = "MDB_GET_MULTIPLE")]
- GET_MULTIPLE,
- [CCode (cname = "MDB_LAST")]
- LAST,
- [CCode (cname = "MDB_LAST_DUP")]
- LAST_DUP,
- [CCode (cname = "MDB_NEXT")]
- NEXT,
- [CCode (cname = "MDB_NEXT_DUP")]
- NEXT_DUP,
- [CCode (cname = "MDB_NEXT_MULTIPLE")]
- NEXT_MULTIPLE,
- [CCode (cname = "MDB_NEXT_NODUP")]
- NEXT_NODUP,
- [CCode (cname = "MDB_PREV")]
- PREV,
- [CCode (cname = "MDB_PREV_DUP")]
- PREV_DUP,
- [CCode (cname = "MDB_PREV_NODUP")]
- PREV_NODUP,
- [CCode (cname = "MDB_SET")]
- SET,
- [CCode (cname = "MDB_SET_KEY")]
- SET_KEY,
- [CCode (cname = "MDB_SET_RANGE")]
- SET_RANGE,
- [CCode (cname = "MDB_PREV_MULTIPLE")]
- PREV_MULTIPLE
- }
- /**
- * LMDB error codes
- */
- [CCode (cname = "int", has_type_id = false)]
- public enum ErrorCode {
- [CCode (cname = "MDB_SUCCESS")]
- SUCCESS,
- [CCode (cname = "MDB_KEYEXIST")]
- KEYEXIST,
- [CCode (cname = "MDB_NOTFOUND")]
- NOTFOUND,
- [CCode (cname = "MDB_PAGE_NOTFOUND")]
- PAGE_NOTFOUND,
- [CCode (cname = "MDB_CORRUPTED")]
- CORRUPTED,
- [CCode (cname = "MDB_PANIC")]
- PANIC,
- [CCode (cname = "MDB_VERSION_MISMATCH")]
- VERSION_MISMATCH,
- [CCode (cname = "MDB_INVALID")]
- INVALID,
- [CCode (cname = "MDB_MAP_FULL")]
- MAP_FULL,
- [CCode (cname = "MDB_DBS_FULL")]
- DBS_FULL,
- [CCode (cname = "MDB_READERS_FULL")]
- READERS_FULL,
- [CCode (cname = "MDB_TLS_FULL")]
- TLS_FULL,
- [CCode (cname = "MDB_TXN_FULL")]
- TXN_FULL,
- [CCode (cname = "MDB_CURSOR_FULL")]
- CURSOR_FULL,
- [CCode (cname = "MDB_PAGE_FULL")]
- PAGE_FULL,
- [CCode (cname = "MDB_MAP_RESIZED")]
- MAP_RESIZED,
- [CCode (cname = "MDB_INCOMPATIBLE")]
- INCOMPATIBLE,
- [CCode (cname = "MDB_BAD_RSLOT")]
- BAD_RSLOT,
- [CCode (cname = "MDB_BAD_TXN")]
- BAD_TXN,
- [CCode (cname = "MDB_BAD_VALSIZE")]
- BAD_VALSIZE,
- [CCode (cname = "MDB_BAD_DBI")]
- BAD_DBI,
- [CCode (cname = "MDB_LAST_ERRCODE")]
- LAST_ERRCODE
- }
- /**
- * Key/value structure
- */
- [CCode (cname = "MDB_val", has_type_id = false)]
- public struct Val {
- public size_t mv_size;
- public void* mv_data;
- /**
- * Creates a Val from a string.
- */
- public static Val from_string(string str) {
- Val val = Val();
- val.mv_size = str.length;
- val.mv_data = (void*) str;
- return val;
- }
- /**
- * Creates a Val from binary data.
- */
- public static Val from_bytes(uint8[] data) {
- Val val = Val();
- val.mv_size = data.length;
- val.mv_data = (void*) data;
- return val;
- }
- /**
- * Gets the value as a string.
- * Creates a new string with proper null termination.
- */
- public string as_string() {
- if (mv_data == null || mv_size == 0) {
- return "";
- }
- // Create a new string with proper length and null termination
- // We allocate mv_size + 1 bytes and copy the data
- uint8[] data = new uint8[mv_size + 1];
- GLib.Memory.copy(data, mv_data, mv_size);
- data[mv_size] = 0; // null terminator
- return (string) data;
- }
- /**
- * Gets the value as a uint8 array.
- */
- public uint8[] as_bytes() {
- uint8[] data = new uint8[mv_size];
- GLib.Memory.copy(data, mv_data, mv_size);
- return data;
- }
- }
- // Database handle - just an unsigned int in C (MDB_dbi)
- // We use uint directly since it's a typedef for unsigned int
- /**
- * Environment handle - opaque pointer
- */
- [Compact]
- [CCode (cname = "MDB_env", free_function = "mdb_env_close")]
- public class Env {
- /**
- * Creates a new LMDB environment.
- *
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_env_create")]
- public static int create(out Env env);
- /**
- * Opens an environment.
- *
- * @param path Directory path for the database files
- * @param flags Environment flags
- * @param mode File mode for created files
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_env_open")]
- public int open(string path, uint flags, int mode);
- /**
- * Sets the size of the memory map.
- *
- * @param size Size in bytes
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_env_set_mapsize")]
- public int set_mapsize(size_t size);
- /**
- * Sets the maximum number of databases.
- *
- * @param dbs Maximum number of databases
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_env_set_maxdbs")]
- public int set_maxdbs(uint32 dbs);
- /**
- * Sets the maximum number of readers.
- *
- * @param readers Maximum number of readers
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_env_set_maxreaders")]
- public int set_maxreaders(uint32 readers);
- /**
- * Flushes data buffers to disk.
- *
- * @param force If true, force a synchronous flush
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_env_sync")]
- public int sync(bool force);
- }
- /**
- * Transaction handle - opaque pointer
- */
- [Compact]
- [CCode (cname = "MDB_txn", free_function = "")]
- public class Txn {
- /**
- * Begins a new transaction.
- *
- * @param env Environment handle
- * @param parent Parent transaction (null for none)
- * @param flags Transaction flags
- * @param txn Output transaction handle
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_txn_begin")]
- public static int begin(Env env, Txn? parent, uint flags, out Txn txn);
- /**
- * Commits the transaction.
- *
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_txn_commit")]
- public int commit();
- /**
- * Aborts the transaction.
- */
- [CCode (cname = "mdb_txn_abort")]
- public void abort();
- /**
- * Gets the environment for this transaction.
- *
- * @return Environment handle
- */
- [CCode (cname = "mdb_txn_env")]
- public unowned Env env();
- /**
- * Opens a database in the transaction.
- *
- * @param name Database name (null for default)
- * @param flags Database flags
- * @param dbi Output database handle
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_dbi_open")]
- public int dbi_open(string? name, uint flags, out uint dbi);
- /**
- * Gets a value from the database.
- *
- * @param dbi Database handle
- * @param key Key to look up
- * @param data Output value
- * @return 0 on success, MDB_NOTFOUND if key not found
- */
- [CCode (cname = "mdb_get")]
- public int @get(uint dbi, Val* key, Val* data);
- /**
- * Puts a key-value pair into the database.
- *
- * @param dbi Database handle
- * @param key Key
- * @param data Value
- * @param flags Write flags
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_put")]
- public int @put(uint dbi, Val* key, Val* data, uint flags);
- /**
- * Deletes a key from the database.
- *
- * @param dbi Database handle
- * @param key Key to delete
- * @param data Optional data to match (null for any)
- * @return 0 on success, MDB_NOTFOUND if key not found
- */
- [CCode (cname = "mdb_del")]
- public int del(uint dbi, Val* key, Val* data);
- }
- /**
- * Cursor handle - opaque pointer
- */
- [Compact]
- [CCode (cname = "MDB_cursor", free_function = "mdb_cursor_close")]
- public class Cursor {
- /**
- * Creates a new cursor.
- *
- * @param txn Transaction handle
- * @param dbi Database handle
- * @param cursor Output cursor handle
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_cursor_open")]
- public static int open(Txn txn, uint dbi, out Cursor cursor);
- /**
- * Gets a key/value pair from the cursor.
- *
- * @param key Output key
- * @param data Output value
- * @param op Cursor operation
- * @return 0 on success, MDB_NOTFOUND if no more items
- */
- [CCode (cname = "mdb_cursor_get")]
- public int @get(Val* key, Val* data, CursorOp op);
- /**
- * Puts a key/value pair through the cursor.
- *
- * @param key Key
- * @param data Value
- * @param flags Write flags
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_cursor_put")]
- public int @put(Val* key, Val* data, uint flags);
- /**
- * Deletes the current key/value pair.
- *
- * @param flags Delete flags
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_cursor_del")]
- public int del(uint flags);
- /**
- * Gets the count of duplicates for the current key.
- *
- * @param countp Output count
- * @return 0 on success, error code on failure
- */
- [CCode (cname = "mdb_cursor_count")]
- public int count(out size_t countp);
- }
- /**
- * Gets a string describing an error code.
- *
- * @param err Error code
- * @return Error description string
- */
- [CCode (cname = "mdb_strerror")]
- public unowned string strerror(int err);
- /**
- * Gets the version of the LMDB library.
- *
- * @param major Output major version
- * @param minor Output minor version
- * @param patch Output patch version
- * @return Version string
- */
- [CCode (cname = "mdb_version")]
- public unowned string version(out int major, out int minor, out int patch);
- }
|