Provided by: lmdb-doc_0.9.31-1build1_all
NAME
mdb.c - Lightning memory-mapped database library.
SYNOPSIS
#include <sys/types.h> #include <sys/stat.h> #include <sys/param.h> #include <sys/uio.h> #include <sys/mman.h> #include <fcntl.h> #include <errno.h> #include <limits.h> #include <stddef.h> #include <inttypes.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> #include <netinet/in.h> #include <resolv.h> #include <pthread.h> #include <signal.h> #include 'lmdb.h' #include 'midl.h' Data Structures struct MDB_rxbody struct MDB_reader struct MDB_txbody struct MDB_txninfo struct MDB_page struct MDB_page2 struct MDB_node struct MDB_db struct MDB_meta union MDB_metabuf struct MDB_dbx struct MDB_txn Opaque structure for a transaction handle. struct MDB_cursor Opaque structure for navigating through a database. struct MDB_xcursor struct MDB_pgstate struct MDB_env Opaque structure for a database environment. struct MDB_ntxn struct MDB_name struct mdb_copy Macros #define _GNU_SOURCE 1 #define MDB_PID_T pid_t #define MDB_THR_T pthread_t #define CACHEFLUSH(addr, bytes, cache) #define MDB_USE_POSIX_MUTEX 1 #define VGMEMP_CREATE(h, r, z) #define VGMEMP_ALLOC(h, a, s) #define VGMEMP_FREE(h, a) #define VGMEMP_DESTROY(h) #define VGMEMP_DEFINED(a, s) #define BYTE_ORDER __BYTE_ORDER #define LITTLE_ENDIAN __LITTLE_ENDIAN #define BIG_ENDIAN __BIG_ENDIAN #define ESECT __attribute__ ((section('text_env'))) #define CALL_CONV #define MDB_DEVEL 0 #define mdb_func_ '<mdb_unknown>' #define MDB_NO_ROOT (MDB_LAST_ERRCODE + 10) #define MDB_USE_ROBUST 1 #define THREAD_RET void * #define THREAD_CREATE(thr, start, arg) pthread_create(&thr,NULL,start,arg) #define THREAD_FINISH(thr) pthread_join(thr,NULL) #define Z 'z' #define MDB_PIDLOCK 1 #define LOCK_MUTEX0(mutex) pthread_mutex_lock(mutex) #define UNLOCK_MUTEX(mutex) pthread_mutex_unlock(mutex) #define mdb_mutex_consistent(mutex) pthread_mutex_consistent(mutex) #define ErrCode() errno #define HANDLE int #define INVALID_HANDLE_VALUE (-1) #define GET_PAGESIZE(x) ((x) = sysconf(_SC_PAGE_SIZE)) #define MNAME_LEN (sizeof(pthread_mutex_t)) #define LOCK_MUTEX(rc, env, mutex) ((rc) = LOCK_MUTEX0(mutex)) #define mdb_mutex_failed(env, mutex, rc) (rc) #define MDB_DSYNC O_SYNC #define MDB_FDATASYNC fdatasync #define MDB_MSYNC(addr, len, flags) msync(addr,len,flags) #define MS_SYNC 1 #define MS_ASYNC 0 #define MDB_DEBUG 0 #define DPRINTF(args) ((void) 0) #define DPUTS(arg) DPRINTF(('%s', arg)) #define DDBI(mc) (((mc)->mc_flags & C_SUB) ? -(int)(mc)->mc_dbi : (int)(mc)->mc_dbi) #define MAX_PAGESIZE (PAGEBASE ? 0x10000 : 0x8000) The maximum size of a database page. #define MDB_MINKEYS 2 #define MDB_MAGIC 0xBEEFC0DE #define MDB_DATA_VERSION ((MDB_DEVEL) ? 999 : 1) #define MDB_LOCK_VERSION 1 #define MDB_MAXKEYSIZE ((MDB_DEVEL) ? 0 : 511) The max size of a key we can write, or 0 for computed max. #define ENV_MAXKEY(env) (MDB_MAXKEYSIZE) #define MAXDATASIZE 0xffffffffUL The maximum size of a data item. #define DKBUF #define DKEY(x) 0 #define P_INVALID (~(pgno_t)0) #define F_ISSET(w, f) (((w) & (f)) == (f)) #define EVEN(n) (((n) + 1U) & -2) /* sign-extending -2 to match n+1U */ #define DEFAULT_MAPSIZE 1048576 #define DEFAULT_READERS 126 #define CACHELINE 64 #define mr_txnid mru.mrx.mrb_txnid #define mr_pid mru.mrx.mrb_pid #define mr_tid mru.mrx.mrb_tid #define mti_magic mt1.mtb.mtb_magic #define mti_format mt1.mtb.mtb_format #define mti_rmutex mt1.mtb.mtb_rmutex #define mti_rmname mt1.mtb.mtb_rmname #define mti_txnid mt1.mtb.mtb_txnid #define mti_numreaders mt1.mtb.mtb_numreaders #define mti_wmutex mt2.mt2_wmutex #define MDB_LOCK_FORMAT #define mp_pgno mp_p.p_pgno #define mp_next mp_p.p_next #define P_BRANCH 0x01 #define P_LEAF 0x02 #define P_OVERFLOW 0x04 #define P_META 0x08 #define P_DIRTY 0x10 #define P_LEAF2 0x20 #define P_SUBP 0x40 #define P_LOOSE 0x4000 #define P_KEEP 0x8000 #define mp_lower mp_pb.pb.pb_lower #define mp_upper mp_pb.pb.pb_upper #define mp_pages mp_pb.pb_pages #define MP_PGNO(p) (((MDB_page2 *)(void *)(p))->mp2_p) #define MP_PAD(p) (((MDB_page2 *)(void *)(p))->mp2_pad) #define MP_FLAGS(p) (((MDB_page2 *)(void *)(p))->mp2_flags) #define MP_LOWER(p) (((MDB_page2 *)(void *)(p))->mp2_lower) #define MP_UPPER(p) (((MDB_page2 *)(void *)(p))->mp2_upper) #define MP_PTRS(p) (((MDB_page2 *)(void *)(p))->mp2_ptrs) #define PAGEHDRSZ ((unsigned) offsetof(MDB_page, mp_ptrs)) #define METADATA(p) ((void *)((char *)(p) + PAGEHDRSZ)) #define PAGEBASE ((MDB_DEVEL) ? PAGEHDRSZ : 0) #define NUMKEYS(p) ((MP_LOWER(p) - (PAGEHDRSZ-PAGEBASE)) >> 1) #define SIZELEFT(p) (indx_t)(MP_UPPER(p) - MP_LOWER(p)) #define PAGEFILL(env, p) #define FILL_THRESHOLD 250 #define IS_LEAF(p) F_ISSET(MP_FLAGS(p), P_LEAF) #define IS_LEAF2(p) F_ISSET(MP_FLAGS(p), P_LEAF2) #define IS_BRANCH(p) F_ISSET(MP_FLAGS(p), P_BRANCH) #define IS_OVERFLOW(p) F_ISSET(MP_FLAGS(p), P_OVERFLOW) #define IS_SUBP(p) F_ISSET(MP_FLAGS(p), P_SUBP) #define OVPAGES(size, psize) ((PAGEHDRSZ-1 + (size)) / (psize) + 1) #define NEXT_LOOSE_PAGE(p) (*(MDB_page **)((p) + 2)) #define F_BIGDATA 0x01 #define F_SUBDATA 0x02 #define F_DUPDATA 0x04 #define NODE_ADD_FLAGS (F_DUPDATA|F_SUBDATA|MDB_RESERVE|MDB_APPEND) #define NODESIZE offsetof(MDB_node, mn_data) #define PGNO_TOPWORD ((pgno_t)-1 > 0xffffffffu ? 32 : 0) #define INDXSIZE(k) (NODESIZE + ((k) == NULL ? 0 : (k)->mv_size)) #define LEAFSIZE(k, d) (NODESIZE + (k)->mv_size + (d)->mv_size) #define NODEPTR(p, i) ((MDB_node *)((char *)(p) + MP_PTRS(p)[i] + PAGEBASE)) #define NODEKEY(node) (void *)((node)->mn_data) #define NODEDATA(node) (void *)((char *)(node)->mn_data + (node)->mn_ksize) #define NODEPGNO(node) #define SETPGNO(node, pgno) #define NODEDSZ(node) ((node)->mn_lo | ((unsigned)(node)->mn_hi << 16)) #define SETDSZ(node, size) #define NODEKSZ(node) ((node)->mn_ksize) #define COPY_PGNO(dst, src) #define LEAF2KEY(p, i, ks) ((char *)(p) + PAGEHDRSZ + ((i)*(ks))) #define MDB_GET_KEY(node, keyptr) #define MDB_GET_KEY2(node, key) { key.mv_size = NODEKSZ(node); key.mv_data = NODEKEY(node); } #define MDB_VALID 0x8000 #define PERSISTENT_FLAGS (0xffff & ~(MDB_VALID)) #define VALID_FLAGS #define FREE_DBI 0 #define MAIN_DBI 1 #define CORE_DBS 2 #define NUM_METAS 2 #define mm_psize mm_dbs[FREE_DBI].md_pad #define mm_flags mm_dbs[FREE_DBI].md_flags #define DB_DIRTY 0x01 #define DB_STALE 0x02 #define DB_NEW 0x04 #define DB_VALID 0x08 #define DB_USRVALID 0x10 #define DB_DUPDATA 0x20 #define MDB_TXN_BEGIN_FLAGS MDB_RDONLY #define MDB_TXN_RDONLY MDB_RDONLY #define MDB_TXN_WRITEMAP MDB_WRITEMAP #define MDB_TXN_FINISHED 0x01 #define MDB_TXN_ERROR 0x02 #define MDB_TXN_DIRTY 0x04 #define MDB_TXN_SPILLS 0x08 #define MDB_TXN_HAS_CHILD 0x10 #define MDB_TXN_BLOCKED (MDB_TXN_FINISHED|MDB_TXN_ERROR|MDB_TXN_HAS_CHILD) #define CURSOR_STACK 32 #define C_INITIALIZED 0x01 #define C_EOF 0x02 #define C_SUB 0x04 #define C_DEL 0x08 #define C_UNTRACK 0x40 #define XCURSOR_INITED(mc) ((mc)->mc_xcursor && ((mc)->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED)) #define XCURSOR_REFRESH(mc, top, mp) #define MDB_FATAL_ERROR 0x80000000U #define MDB_ENV_ACTIVE 0x20000000U #define MDB_ENV_TXKEY 0x10000000U #define MDB_FSYNCONLY 0x08000000U #define me_pglast me_pgstate.mf_pglast #define me_pghead me_pgstate.mf_pghead #define me_rmutex me_txns->mti_rmutex #define me_wmutex me_txns->mti_wmutex #define MDB_COMMIT_PAGES 64 #define MAX_WRITE (0x40000000U >> (sizeof(ssize_t) == 4)) #define TXN_DBI_EXIST(txn, dbi, validity) ((txn) && (dbi)<(txn)->mt_numdbs && ((txn)->mt_dbflags[dbi] & (validity))) #define TXN_DBI_CHANGED(txn, dbi) ((txn)->mt_dbiseqs[dbi] != (txn)->mt_env->me_dbiseqs[dbi]) #define MDB_END_NAMES #define MDB_END_OPMASK 0x0F #define MDB_END_UPDATE 0x10 #define MDB_END_FREE 0x20 #define MDB_END_SLOT MDB_NOTLS #define MDB_PS_MODIFY 1 #define MDB_PS_ROOTONLY 2 #define MDB_PS_FIRST 4 #define MDB_PS_LAST 8 #define MDB_SPLIT_REPLACE MDB_APPENDDUP #define mdb_env_close0(env, excl) mdb_env_close1(env) #define mdb_cmp_clong mdb_cmp_cint #define mdb_cassert(mc, expr) mdb_assert0((mc)->mc_txn->mt_env, expr, #expr) #define mdb_tassert(txn, expr) mdb_assert0((txn)->mt_env, expr, #expr) #define mdb_eassert(env, expr) mdb_assert0(env, expr, #expr) #define mdb_assert0(env, expr, expr_txt) #define DO_PWRITE(rc, fd, ptr, size, len, pos) #define MDB_NAME(str) str #define mdb_name_cpy strcpy #define MDB_SUFFLEN 9 #define mdb_fname_destroy(fname) do { if ((fname).mn_alloced) free((fname).mn_val); } while (0) #define MDB_CLOEXEC 0 #define MDB_ERRCODE_ROFS EROFS #define CHANGEABLE (MDB_NOSYNC|MDB_NOMETASYNC|MDB_MAPASYNC|MDB_NOMEMINIT) #define CHANGELESS #define MDB_NOSPILL 0x8000 #define WITH_CURSOR_TRACKING(mn, act) #define MDB_WBUF (1024*1024) #define MDB_EOF 0x10 #define DO_WRITE(rc, fd, ptr, w2, len) len = write(fd, ptr, w2); rc = (len >= 0) #define DO_WRITE(rc, fd, ptr, w2, len) len = write(fd, ptr, w2); rc = (len >= 0) Typedefs typedef pthread_mutex_t mdb_mutex_t[1] typedef pthread_mutex_t * mdb_mutexref_t typedef MDB_ID pgno_t typedef MDB_ID txnid_t typedef uint16_t indx_t typedef char mdb_nchar_t Enumerations enum { MDB_END_COMMITTED, MDB_END_EMPTY_COMMIT, MDB_END_ABORT, MDB_END_RESET, MDB_END_RESET_TMP, MDB_END_FAIL_BEGIN, MDB_END_FAIL_BEGINCHILD } enum Pidlock_op { Pidset = F_SETLK, Pidcheck = F_GETLK } enum mdb_fopen_type { MDB_O_RDONLY = O_RDONLY, MDB_O_RDWR = O_RDWR |O_CREAT, MDB_O_META = O_WRONLY|MDB_DSYNC |MDB_CLOEXEC, MDB_O_COPY = O_WRONLY|O_CREAT|O_EXCL|MDB_CLOEXEC, MDB_O_MASK = MDB_O_RDWR|MDB_CLOEXEC | MDB_O_RDONLY|MDB_O_META|MDB_O_COPY, MDB_O_LOCKS = MDB_O_RDWR|MDB_CLOEXEC | ((MDB_O_MASK+1) & ~MDB_O_MASK) } Functions static int mdb_page_alloc (MDB_cursor *mc, int num, MDB_page **mp) static int mdb_page_new (MDB_cursor *mc, uint32_t flags, int num, MDB_page **mp) static int mdb_page_touch (MDB_cursor *mc) static void mdb_txn_end (MDB_txn *txn, unsigned mode) static int mdb_page_get (MDB_cursor *mc, pgno_t pgno, MDB_page **mp, int *lvl) static int mdb_page_search_root (MDB_cursor *mc, MDB_val *key, int modify) static int mdb_page_search (MDB_cursor *mc, MDB_val *key, int flags) static int mdb_page_merge (MDB_cursor *csrc, MDB_cursor *cdst) static int mdb_page_split (MDB_cursor *mc, MDB_val *newkey, MDB_val *newdata, pgno_t newpgno, unsigned int nflags) static int mdb_env_read_header (MDB_env *env, MDB_meta *meta) static MDB_meta * mdb_env_pick_meta (const MDB_env *env) static int mdb_env_write_meta (MDB_txn *txn) static void mdb_env_close0 (MDB_env *env, int excl) static MDB_node * mdb_node_search (MDB_cursor *mc, MDB_val *key, int *exactp) static int mdb_node_add (MDB_cursor *mc, indx_t indx, MDB_val *key, MDB_val *data, pgno_t pgno, unsigned int flags) static void mdb_node_del (MDB_cursor *mc, int ksize) static void mdb_node_shrink (MDB_page *mp, indx_t indx) static int mdb_node_move (MDB_cursor *csrc, MDB_cursor *cdst, int fromleft) static int mdb_node_read (MDB_cursor *mc, MDB_node *leaf, MDB_val *data) static size_t mdb_leaf_size (MDB_env *env, MDB_val *key, MDB_val *data) static size_t mdb_branch_size (MDB_env *env, MDB_val *key) static int mdb_rebalance (MDB_cursor *mc) static int mdb_update_key (MDB_cursor *mc, MDB_val *key) static void mdb_cursor_pop (MDB_cursor *mc) static int mdb_cursor_push (MDB_cursor *mc, MDB_page *mp) static int mdb_cursor_del0 (MDB_cursor *mc) static int mdb_del0 (MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data, unsigned flags) static int mdb_cursor_sibling (MDB_cursor *mc, int move_right) static int mdb_cursor_next (MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) static int mdb_cursor_prev (MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) static int mdb_cursor_set (MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op, int *exactp) static int mdb_cursor_first (MDB_cursor *mc, MDB_val *key, MDB_val *data) static int mdb_cursor_last (MDB_cursor *mc, MDB_val *key, MDB_val *data) static void mdb_cursor_init (MDB_cursor *mc, MDB_txn *txn, MDB_dbi dbi, MDB_xcursor *mx) static void mdb_xcursor_init0 (MDB_cursor *mc) static void mdb_xcursor_init1 (MDB_cursor *mc, MDB_node *node) static void mdb_xcursor_init2 (MDB_cursor *mc, MDB_xcursor *src_mx, int force) static int mdb_drop0 (MDB_cursor *mc, int subs) static void mdb_default_cmp (MDB_txn *txn, MDB_dbi dbi) static int mdb_reader_check0 (MDB_env *env, int rlocked, int *dead) char *ESECT mdb_version (int *major, int *minor, int *patch) Return the LMDB library version information. char * mdb_strerror (int err) Return a string describing a given error code. static void ESECT mdb_assert_fail (MDB_env *env, const char *expr_txt, const char *func, const char *file, int line) int mdb_cmp (MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b) Compare two data items according to a particular database. int mdb_dcmp (MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b) Compare two data items according to a particular database. static MDB_page * mdb_page_malloc (MDB_txn *txn, unsigned num) static void mdb_page_free (MDB_env *env, MDB_page *mp) static void mdb_dpage_free (MDB_env *env, MDB_page *dp) static void mdb_dlist_free (MDB_txn *txn) static int mdb_page_loose (MDB_cursor *mc, MDB_page *mp) static int mdb_pages_xkeep (MDB_cursor *mc, unsigned pflags, int all) static int mdb_page_flush (MDB_txn *txn, int keep) static int mdb_page_spill (MDB_cursor *m0, MDB_val *key, MDB_val *data) static txnid_t mdb_find_oldest (MDB_txn *txn) static void mdb_page_dirty (MDB_txn *txn, MDB_page *mp) static void mdb_page_copy (MDB_page *dst, MDB_page *src, unsigned int psize) static int mdb_page_unspill (MDB_txn *txn, MDB_page *mp, MDB_page **ret) int mdb_env_sync (MDB_env *env, int force) Flush the data buffers to disk. static int mdb_cursor_shadow (MDB_txn *src, MDB_txn *dst) static void mdb_cursors_close (MDB_txn *txn, unsigned merge) static int mdb_reader_pid (MDB_env *env, enum Pidlock_op op, MDB_PID_T pid) static int mdb_txn_renew0 (MDB_txn *txn) int mdb_txn_renew (MDB_txn *txn) Renew a read-only transaction. int mdb_txn_begin (MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **ret) Create a transaction for use with the environment. MDB_env * mdb_txn_env (MDB_txn *txn) Returns the transaction's MDB_env. size_t mdb_txn_id (MDB_txn *txn) Return the transaction's ID. static void mdb_dbis_update (MDB_txn *txn, int keep) void mdb_txn_reset (MDB_txn *txn) Reset a read-only transaction. void mdb_txn_abort (MDB_txn *txn) Abandon all the operations of the transaction instead of saving them. static int mdb_freelist_save (MDB_txn *txn) int mdb_txn_commit (MDB_txn *txn) Commit all the operations of a transaction into the database. static void ESECT mdb_env_init_meta0 (MDB_env *env, MDB_meta *meta) static int ESECT mdb_env_init_meta (MDB_env *env, MDB_meta *meta) int ESECT mdb_env_create (MDB_env **env) Create an LMDB environment handle. static int ESECT mdb_env_map (MDB_env *env, void *addr) int ESECT mdb_env_set_mapsize (MDB_env *env, size_t size) Set the size of the memory map to use for this environment. int ESECT mdb_env_set_maxdbs (MDB_env *env, MDB_dbi dbs) Set the maximum number of named databases for the environment. int ESECT mdb_env_set_maxreaders (MDB_env *env, unsigned int readers) Set the maximum number of threads/reader slots for the environment. int ESECT mdb_env_get_maxreaders (MDB_env *env, unsigned int *readers) Get the maximum number of threads/reader slots for the environment. static int ESECT mdb_fsize (HANDLE fd, size_t *size) static int ESECT mdb_fname_init (const char *path, unsigned envflags, MDB_name *fname) static int ESECT mdb_fopen (const MDB_env *env, MDB_name *fname, enum mdb_fopen_type which, mdb_mode_t mode, HANDLE *res) static int ESECT mdb_env_open2 (MDB_env *env) static void mdb_env_reader_dest (void *ptr) static int ESECT mdb_env_share_locks (MDB_env *env, int *excl) static int ESECT mdb_env_excl_lock (MDB_env *env, int *excl) static int ESECT mdb_env_setup_locks (MDB_env *env, MDB_name *fname, int mode, int *excl) int ESECT mdb_env_open (MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode) Open an environment handle. void ESECT mdb_env_close (MDB_env *env) Close the environment and release the memory map. static int mdb_cmp_long (const MDB_val *a, const MDB_val *b) static int mdb_cmp_int (const MDB_val *a, const MDB_val *b) static int mdb_cmp_cint (const MDB_val *a, const MDB_val *b) static int mdb_cmp_memn (const MDB_val *a, const MDB_val *b) static int mdb_cmp_memnr (const MDB_val *a, const MDB_val *b) static int mdb_page_search_lowest (MDB_cursor *mc) static int mdb_ovpage_free (MDB_cursor *mc, MDB_page *mp) int mdb_get (MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data) Get items from a database. int mdb_cursor_get (MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) Retrieve by cursor. static int mdb_cursor_touch (MDB_cursor *mc) int mdb_cursor_put (MDB_cursor *mc, MDB_val *key, MDB_val *data, unsigned int flags) Store by cursor. int mdb_cursor_del (MDB_cursor *mc, unsigned int flags) Delete current key/data pair. int mdb_cursor_open (MDB_txn *txn, MDB_dbi dbi, MDB_cursor **ret) Create a cursor handle. int mdb_cursor_renew (MDB_txn *txn, MDB_cursor *mc) Renew a cursor handle. int mdb_cursor_count (MDB_cursor *mc, size_t *countp) Return count of duplicates for current key. void mdb_cursor_close (MDB_cursor *mc) Close a cursor handle. MDB_txn * mdb_cursor_txn (MDB_cursor *mc) Return the cursor's transaction handle. MDB_dbi mdb_cursor_dbi (MDB_cursor *mc) Return the cursor's database handle. static void mdb_cursor_copy (const MDB_cursor *csrc, MDB_cursor *cdst) int mdb_del (MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data) Delete items from a database. int mdb_put (MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data, unsigned int flags) Store items into a database. static THREAD_RET ESECT CALL_CONV mdb_env_copythr (void *arg) static int ESECT mdb_env_cthr_toggle (mdb_copy *my, int adjust) static int ESECT mdb_env_cwalk (mdb_copy *my, pgno_t *pg, int flags) static int ESECT mdb_env_copyfd1 (MDB_env *env, HANDLE fd) static int ESECT mdb_env_copyfd0 (MDB_env *env, HANDLE fd) int ESECT mdb_env_copyfd2 (MDB_env *env, HANDLE fd, unsigned int flags) int ESECT mdb_env_copyfd (MDB_env *env, HANDLE fd) int ESECT mdb_env_copy2 (MDB_env *env, const char *path, unsigned int flags) Copy an LMDB environment to the specified path, with options. int ESECT mdb_env_copy (MDB_env *env, const char *path) Copy an LMDB environment to the specified path. int ESECT mdb_env_set_flags (MDB_env *env, unsigned int flag, int onoff) Set environment flags. int ESECT mdb_env_get_flags (MDB_env *env, unsigned int *arg) Get environment flags. int ESECT mdb_env_set_userctx (MDB_env *env, void *ctx) Set application information associated with the MDB_env. void *ESECT mdb_env_get_userctx (MDB_env *env) Get the application information associated with the MDB_env. int ESECT mdb_env_set_assert (MDB_env *env, MDB_assert_func *func) int ESECT mdb_env_get_path (MDB_env *env, const char **arg) Return the path that was used in mdb_env_open(). int ESECT mdb_env_get_fd (MDB_env *env, mdb_filehandle_t *arg) Return the filedescriptor for the given environment. static int ESECT mdb_stat0 (MDB_env *env, MDB_db *db, MDB_stat *arg) int ESECT mdb_env_stat (MDB_env *env, MDB_stat *arg) Return statistics about the LMDB environment. int ESECT mdb_env_info (MDB_env *env, MDB_envinfo *arg) Return information about the LMDB environment. int mdb_dbi_open (MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi) Open a database in the environment. int ESECT mdb_stat (MDB_txn *txn, MDB_dbi dbi, MDB_stat *arg) Retrieve statistics for a database. void mdb_dbi_close (MDB_env *env, MDB_dbi dbi) Close a database handle. Normally unnecessary. Use with care: int mdb_dbi_flags (MDB_txn *txn, MDB_dbi dbi, unsigned int *flags) Retrieve the DB flags for a database handle. int mdb_drop (MDB_txn *txn, MDB_dbi dbi, int del) Empty or delete+close a database. int mdb_set_compare (MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp) Set a custom key comparison function for a database. int mdb_set_dupsort (MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp) Set a custom data comparison function for a MDB_DUPSORT database. int mdb_set_relfunc (MDB_txn *txn, MDB_dbi dbi, MDB_rel_func *rel) Set a relocation function for a MDB_FIXEDMAP database. int mdb_set_relctx (MDB_txn *txn, MDB_dbi dbi, void *ctx) Set a context pointer for a MDB_FIXEDMAP database's relocation function. int ESECT mdb_env_get_maxkeysize (MDB_env *env) Get the maximum size of keys and MDB_DUPSORT data we can write. int ESECT mdb_reader_list (MDB_env *env, MDB_msg_func *func, void *ctx) Dump the entries in the reader lock table. static int ESECT mdb_pid_insert (MDB_PID_T *ids, MDB_PID_T pid) int ESECT mdb_reader_check (MDB_env *env, int *dead) Check for stale entries in the reader lock table. Variables static char *const mdb_errstr [] static const mdb_nchar_t *const mdb_suffixes [2][2]
Detailed Description
Lightning memory-mapped database library. A Btree-based database management library modeled loosely on the BerkeleyDB API, but much simplified.
Macro Definition Documentation
#define mr_txnid mru.mrx.mrb_txnid shorthand for mrb_txnid #define mm_psize mm_dbs[FREE_DBI].md_pad The size of pages used in this DB #define mm_flags mm_dbs[FREE_DBI].md_flags Any persistent environment flags. Environment Flags #define MDB_FATAL_ERROR 0x80000000U Failed to update the meta page. Probably an I/O error. #define MDB_ENV_ACTIVE 0x20000000U Some fields are initialized. #define MDB_ENV_TXKEY 0x10000000U me_txkey is set #define MDB_FSYNCONLY 0x08000000U fdatasync is unreliable #define me_rmutex me_txns->mti_rmutex Shared reader lock #define me_wmutex me_txns->mti_wmutex Shared writer lock #define DO_PWRITE(rc, fd, ptr, size, len, pos) Value:.PP do { \ len = pwrite(fd, ptr, size, pos); \ if (len == -1 && ErrCode() == EINTR) continue; \ rc = (len >= 0); break; } while(1)
Author
Generated automatically by Doxygen for LMDB from the source code. LMDB mdb.c(3)