00001
00165 #ifndef _LMDB_H_
00166 #define _LMDB_H_
00167
00168 #include <sys/types.h>
00169
00170 #ifdef __cplusplus
00171 extern "C" {
00172 #endif
00173
00175 #ifdef _MSC_VER
00176 typedef int mdb_mode_t;
00177 #else
00178 typedef mode_t mdb_mode_t;
00179 #endif
00180
00185 #ifdef _WIN32
00186 typedef void *mdb_filehandle_t;
00187 #else
00188 typedef int mdb_filehandle_t;
00189 #endif
00190
00199 #define MDB_VERSION_MAJOR 0
00200
00201 #define MDB_VERSION_MINOR 9
00202
00203 #define MDB_VERSION_PATCH 24
00204
00206 #define MDB_VERINT(a,b,c) (((a) << 24) | ((b) << 16) | (c))
00207
00209 #define MDB_VERSION_FULL \
00210 MDB_VERINT(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH)
00211
00213 #define MDB_VERSION_DATE "July 24, 2019"
00214
00216 #define MDB_VERSTR(a,b,c,d) "LMDB " #a "." #b "." #c ": (" d ")"
00217
00219 #define MDB_VERFOO(a,b,c,d) MDB_VERSTR(a,b,c,d)
00220
00222 #define MDB_VERSION_STRING \
00223 MDB_VERFOO(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH,MDB_VERSION_DATE)
00224
00231 typedef struct MDB_env MDB_env;
00232
00238 typedef struct MDB_txn MDB_txn;
00239
00241 typedef unsigned int MDB_dbi;
00242
00244 typedef struct MDB_cursor MDB_cursor;
00245
00257 typedef struct MDB_val {
00258 size_t mv_size;
00259 void *mv_data;
00260 } MDB_val;
00261
00263 typedef int (MDB_cmp_func)(const MDB_val *a, const MDB_val *b);
00264
00279 typedef void (MDB_rel_func)(MDB_val *item, void *oldptr, void *newptr, void *relctx);
00280
00285 #define MDB_FIXEDMAP 0x01
00286
00287 #define MDB_NOSUBDIR 0x4000
00288
00289 #define MDB_NOSYNC 0x10000
00290
00291 #define MDB_RDONLY 0x20000
00292
00293 #define MDB_NOMETASYNC 0x40000
00294
00295 #define MDB_WRITEMAP 0x80000
00296
00297 #define MDB_MAPASYNC 0x100000
00298
00299 #define MDB_NOTLS 0x200000
00300
00301 #define MDB_NOLOCK 0x400000
00302
00303 #define MDB_NORDAHEAD 0x800000
00304
00305 #define MDB_NOMEMINIT 0x1000000
00306
00312 #define MDB_REVERSEKEY 0x02
00313
00314 #define MDB_DUPSORT 0x04
00315
00317 #define MDB_INTEGERKEY 0x08
00318
00319 #define MDB_DUPFIXED 0x10
00320
00321 #define MDB_INTEGERDUP 0x20
00322
00323 #define MDB_REVERSEDUP 0x40
00324
00325 #define MDB_CREATE 0x40000
00326
00332 #define MDB_NOOVERWRITE 0x10
00333
00337 #define MDB_NODUPDATA 0x20
00338
00339 #define MDB_CURRENT 0x40
00340
00343 #define MDB_RESERVE 0x10000
00344
00345 #define MDB_APPEND 0x20000
00346
00347 #define MDB_APPENDDUP 0x40000
00348
00349 #define MDB_MULTIPLE 0x80000
00350
00351
00358 #define MDB_CP_COMPACT 0x01
00359
00360
00366 typedef enum MDB_cursor_op {
00367 MDB_FIRST,
00368 MDB_FIRST_DUP,
00370 MDB_GET_BOTH,
00371 MDB_GET_BOTH_RANGE,
00372 MDB_GET_CURRENT,
00373 MDB_GET_MULTIPLE,
00376 MDB_LAST,
00377 MDB_LAST_DUP,
00379 MDB_NEXT,
00380 MDB_NEXT_DUP,
00382 MDB_NEXT_MULTIPLE,
00385 MDB_NEXT_NODUP,
00386 MDB_PREV,
00387 MDB_PREV_DUP,
00389 MDB_PREV_NODUP,
00390 MDB_SET,
00391 MDB_SET_KEY,
00392 MDB_SET_RANGE,
00393 MDB_PREV_MULTIPLE
00395 } MDB_cursor_op;
00396
00403 #define MDB_SUCCESS 0
00404
00405 #define MDB_KEYEXIST (-30799)
00406
00407 #define MDB_NOTFOUND (-30798)
00408
00409 #define MDB_PAGE_NOTFOUND (-30797)
00410
00411 #define MDB_CORRUPTED (-30796)
00412
00413 #define MDB_PANIC (-30795)
00414
00415 #define MDB_VERSION_MISMATCH (-30794)
00416
00417 #define MDB_INVALID (-30793)
00418
00419 #define MDB_MAP_FULL (-30792)
00420
00421 #define MDB_DBS_FULL (-30791)
00422
00423 #define MDB_READERS_FULL (-30790)
00424
00425 #define MDB_TLS_FULL (-30789)
00426
00427 #define MDB_TXN_FULL (-30788)
00428
00429 #define MDB_CURSOR_FULL (-30787)
00430
00431 #define MDB_PAGE_FULL (-30786)
00432
00433 #define MDB_MAP_RESIZED (-30785)
00434
00442 #define MDB_INCOMPATIBLE (-30784)
00443
00444 #define MDB_BAD_RSLOT (-30783)
00445
00446 #define MDB_BAD_TXN (-30782)
00447
00448 #define MDB_BAD_VALSIZE (-30781)
00449
00450 #define MDB_BAD_DBI (-30780)
00451
00452 #define MDB_LAST_ERRCODE MDB_BAD_DBI
00453
00456 typedef struct MDB_stat {
00457 unsigned int ms_psize;
00459 unsigned int ms_depth;
00460 size_t ms_branch_pages;
00461 size_t ms_leaf_pages;
00462 size_t ms_overflow_pages;
00463 size_t ms_entries;
00464 } MDB_stat;
00465
00467 typedef struct MDB_envinfo {
00468 void *me_mapaddr;
00469 size_t me_mapsize;
00470 size_t me_last_pgno;
00471 size_t me_last_txnid;
00472 unsigned int me_maxreaders;
00473 unsigned int me_numreaders;
00474 } MDB_envinfo;
00475
00483 char *mdb_version(int *major, int *minor, int *patch);
00484
00495 char *mdb_strerror(int err);
00496
00508 int mdb_env_create(MDB_env **env);
00509
00631 int mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode);
00632
00647 int mdb_env_copy(MDB_env *env, const char *path);
00648
00662 int mdb_env_copyfd(MDB_env *env, mdb_filehandle_t fd);
00663
00687 int mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags);
00688
00706 int mdb_env_copyfd2(MDB_env *env, mdb_filehandle_t fd, unsigned int flags);
00707
00714 int mdb_env_stat(MDB_env *env, MDB_stat *stat);
00715
00722 int mdb_env_info(MDB_env *env, MDB_envinfo *stat);
00723
00743 int mdb_env_sync(MDB_env *env, int force);
00744
00753 void mdb_env_close(MDB_env *env);
00754
00769 int mdb_env_set_flags(MDB_env *env, unsigned int flags, int onoff);
00770
00781 int mdb_env_get_flags(MDB_env *env, unsigned int *flags);
00782
00795 int mdb_env_get_path(MDB_env *env, const char **path);
00796
00811 int mdb_env_get_fd(MDB_env *env, mdb_filehandle_t *fd);
00812
00845 int mdb_env_set_mapsize(MDB_env *env, size_t size);
00846
00864 int mdb_env_set_maxreaders(MDB_env *env, unsigned int readers);
00865
00876 int mdb_env_get_maxreaders(MDB_env *env, unsigned int *readers);
00877
00896 int mdb_env_set_maxdbs(MDB_env *env, MDB_dbi dbs);
00897
00905 int mdb_env_get_maxkeysize(MDB_env *env);
00906
00913 int mdb_env_set_userctx(MDB_env *env, void *ctx);
00914
00920 void *mdb_env_get_userctx(MDB_env *env);
00921
00928 typedef void MDB_assert_func(MDB_env *env, const char *msg);
00929
00937 int mdb_env_set_assert(MDB_env *env, MDB_assert_func *func);
00938
00973 int mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **txn);
00974
00979 MDB_env *mdb_txn_env(MDB_txn *txn);
00980
00990 size_t mdb_txn_id(MDB_txn *txn);
00991
01008 int mdb_txn_commit(MDB_txn *txn);
01009
01018 void mdb_txn_abort(MDB_txn *txn);
01019
01037 void mdb_txn_reset(MDB_txn *txn);
01038
01053 int mdb_txn_renew(MDB_txn *txn);
01054
01056 #define mdb_open(txn,name,flags,dbi) mdb_dbi_open(txn,name,flags,dbi)
01057
01058 #define mdb_close(env,dbi) mdb_dbi_close(env,dbi)
01059
01128 int mdb_dbi_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi);
01129
01142 int mdb_stat(MDB_txn *txn, MDB_dbi dbi, MDB_stat *stat);
01143
01151 int mdb_dbi_flags(MDB_txn *txn, MDB_dbi dbi, unsigned int *flags);
01152
01169 void mdb_dbi_close(MDB_env *env, MDB_dbi dbi);
01170
01180 int mdb_drop(MDB_txn *txn, MDB_dbi dbi, int del);
01181
01201 int mdb_set_compare(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp);
01202
01224 int mdb_set_dupsort(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp);
01225
01244 int mdb_set_relfunc(MDB_txn *txn, MDB_dbi dbi, MDB_rel_func *rel);
01245
01260 int mdb_set_relctx(MDB_txn *txn, MDB_dbi dbi, void *ctx);
01261
01288 int mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data);
01289
01337 int mdb_put(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data,
01338 unsigned int flags);
01339
01362 int mdb_del(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data);
01363
01386 int mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **cursor);
01387
01394 void mdb_cursor_close(MDB_cursor *cursor);
01395
01412 int mdb_cursor_renew(MDB_txn *txn, MDB_cursor *cursor);
01413
01418 MDB_txn *mdb_cursor_txn(MDB_cursor *cursor);
01419
01424 MDB_dbi mdb_cursor_dbi(MDB_cursor *cursor);
01425
01445 int mdb_cursor_get(MDB_cursor *cursor, MDB_val *key, MDB_val *data,
01446 MDB_cursor_op op);
01447
01507 int mdb_cursor_put(MDB_cursor *cursor, MDB_val *key, MDB_val *data,
01508 unsigned int flags);
01509
01531 int mdb_cursor_del(MDB_cursor *cursor, unsigned int flags);
01532
01545 int mdb_cursor_count(MDB_cursor *cursor, size_t *countp);
01546
01557 int mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b);
01558
01569 int mdb_dcmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b);
01570
01577 typedef int (MDB_msg_func)(const char *msg, void *ctx);
01578
01586 int mdb_reader_list(MDB_env *env, MDB_msg_func *func, void *ctx);
01587
01594 int mdb_reader_check(MDB_env *env, int *dead);
01597 #ifdef __cplusplus
01598 }
01599 #endif
01600
01608 #endif