00001
00159 #ifndef _LMDB_H_
00160 #define _LMDB_H_
00161
00162 #include <sys/types.h>
00163
00164 #ifdef __cplusplus
00165 extern "C" {
00166 #endif
00167
00169 #ifdef _MSC_VER
00170 typedef int mdb_mode_t;
00171 #else
00172 typedef mode_t mdb_mode_t;
00173 #endif
00174
00179 #ifdef _WIN32
00180 typedef void *mdb_filehandle_t;
00181 #else
00182 typedef int mdb_filehandle_t;
00183 #endif
00184
00193 #define MDB_VERSION_MAJOR 0
00194
00195 #define MDB_VERSION_MINOR 9
00196
00197 #define MDB_VERSION_PATCH 18
00198
00200 #define MDB_VERINT(a,b,c) (((a) << 24) | ((b) << 16) | (c))
00201
00203 #define MDB_VERSION_FULL \
00204 MDB_VERINT(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH)
00205
00207 #define MDB_VERSION_DATE "February 5, 2016"
00208
00210 #define MDB_VERSTR(a,b,c,d) "LMDB " #a "." #b "." #c ": (" d ")"
00211
00213 #define MDB_VERFOO(a,b,c,d) MDB_VERSTR(a,b,c,d)
00214
00216 #define MDB_VERSION_STRING \
00217 MDB_VERFOO(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH,MDB_VERSION_DATE)
00218
00225 typedef struct MDB_env MDB_env;
00226
00232 typedef struct MDB_txn MDB_txn;
00233
00235 typedef unsigned int MDB_dbi;
00236
00238 typedef struct MDB_cursor MDB_cursor;
00239
00251 typedef struct MDB_val {
00252 size_t mv_size;
00253 void *mv_data;
00254 } MDB_val;
00255
00257 typedef int (MDB_cmp_func)(const MDB_val *a, const MDB_val *b);
00258
00273 typedef void (MDB_rel_func)(MDB_val *item, void *oldptr, void *newptr, void *relctx);
00274
00279 #define MDB_FIXEDMAP 0x01
00280
00281 #define MDB_NOSUBDIR 0x4000
00282
00283 #define MDB_NOSYNC 0x10000
00284
00285 #define MDB_RDONLY 0x20000
00286
00287 #define MDB_NOMETASYNC 0x40000
00288
00289 #define MDB_WRITEMAP 0x80000
00290
00291 #define MDB_MAPASYNC 0x100000
00292
00293 #define MDB_NOTLS 0x200000
00294
00295 #define MDB_NOLOCK 0x400000
00296
00297 #define MDB_NORDAHEAD 0x800000
00298
00299 #define MDB_NOMEMINIT 0x1000000
00300
00306 #define MDB_REVERSEKEY 0x02
00307
00308 #define MDB_DUPSORT 0x04
00309
00311 #define MDB_INTEGERKEY 0x08
00312
00313 #define MDB_DUPFIXED 0x10
00314
00315 #define MDB_INTEGERDUP 0x20
00316
00317 #define MDB_REVERSEDUP 0x40
00318
00319 #define MDB_CREATE 0x40000
00320
00326 #define MDB_NOOVERWRITE 0x10
00327
00331 #define MDB_NODUPDATA 0x20
00332
00333 #define MDB_CURRENT 0x40
00334
00337 #define MDB_RESERVE 0x10000
00338
00339 #define MDB_APPEND 0x20000
00340
00341 #define MDB_APPENDDUP 0x40000
00342
00343 #define MDB_MULTIPLE 0x80000
00344
00345
00352 #define MDB_CP_COMPACT 0x01
00353
00354
00360 typedef enum MDB_cursor_op {
00361 MDB_FIRST,
00362 MDB_FIRST_DUP,
00364 MDB_GET_BOTH,
00365 MDB_GET_BOTH_RANGE,
00366 MDB_GET_CURRENT,
00367 MDB_GET_MULTIPLE,
00370 MDB_LAST,
00371 MDB_LAST_DUP,
00373 MDB_NEXT,
00374 MDB_NEXT_DUP,
00376 MDB_NEXT_MULTIPLE,
00379 MDB_NEXT_NODUP,
00380 MDB_PREV,
00381 MDB_PREV_DUP,
00383 MDB_PREV_NODUP,
00384 MDB_SET,
00385 MDB_SET_KEY,
00386 MDB_SET_RANGE
00387 } MDB_cursor_op;
00388
00395 #define MDB_SUCCESS 0
00396
00397 #define MDB_KEYEXIST (-30799)
00398
00399 #define MDB_NOTFOUND (-30798)
00400
00401 #define MDB_PAGE_NOTFOUND (-30797)
00402
00403 #define MDB_CORRUPTED (-30796)
00404
00405 #define MDB_PANIC (-30795)
00406
00407 #define MDB_VERSION_MISMATCH (-30794)
00408
00409 #define MDB_INVALID (-30793)
00410
00411 #define MDB_MAP_FULL (-30792)
00412
00413 #define MDB_DBS_FULL (-30791)
00414
00415 #define MDB_READERS_FULL (-30790)
00416
00417 #define MDB_TLS_FULL (-30789)
00418
00419 #define MDB_TXN_FULL (-30788)
00420
00421 #define MDB_CURSOR_FULL (-30787)
00422
00423 #define MDB_PAGE_FULL (-30786)
00424
00425 #define MDB_MAP_RESIZED (-30785)
00426
00434 #define MDB_INCOMPATIBLE (-30784)
00435
00436 #define MDB_BAD_RSLOT (-30783)
00437
00438 #define MDB_BAD_TXN (-30782)
00439
00440 #define MDB_BAD_VALSIZE (-30781)
00441
00442 #define MDB_BAD_DBI (-30780)
00443
00444 #define MDB_LAST_ERRCODE MDB_BAD_DBI
00445
00448 typedef struct MDB_stat {
00449 unsigned int ms_psize;
00451 unsigned int ms_depth;
00452 size_t ms_branch_pages;
00453 size_t ms_leaf_pages;
00454 size_t ms_overflow_pages;
00455 size_t ms_entries;
00456 } MDB_stat;
00457
00459 typedef struct MDB_envinfo {
00460 void *me_mapaddr;
00461 size_t me_mapsize;
00462 size_t me_last_pgno;
00463 size_t me_last_txnid;
00464 unsigned int me_maxreaders;
00465 unsigned int me_numreaders;
00466 } MDB_envinfo;
00467
00475 char *mdb_version(int *major, int *minor, int *patch);
00476
00487 char *mdb_strerror(int err);
00488
00500 int mdb_env_create(MDB_env **env);
00501
00623 int mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode);
00624
00639 int mdb_env_copy(MDB_env *env, const char *path);
00640
00654 int mdb_env_copyfd(MDB_env *env, mdb_filehandle_t fd);
00655
00678 int mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags);
00679
00697 int mdb_env_copyfd2(MDB_env *env, mdb_filehandle_t fd, unsigned int flags);
00698
00705 int mdb_env_stat(MDB_env *env, MDB_stat *stat);
00706
00713 int mdb_env_info(MDB_env *env, MDB_envinfo *stat);
00714
00734 int mdb_env_sync(MDB_env *env, int force);
00735
00744 void mdb_env_close(MDB_env *env);
00745
00760 int mdb_env_set_flags(MDB_env *env, unsigned int flags, int onoff);
00761
00772 int mdb_env_get_flags(MDB_env *env, unsigned int *flags);
00773
00786 int mdb_env_get_path(MDB_env *env, const char **path);
00787
00798 int mdb_env_get_fd(MDB_env *env, mdb_filehandle_t *fd);
00799
00832 int mdb_env_set_mapsize(MDB_env *env, size_t size);
00833
00851 int mdb_env_set_maxreaders(MDB_env *env, unsigned int readers);
00852
00863 int mdb_env_get_maxreaders(MDB_env *env, unsigned int *readers);
00864
00883 int mdb_env_set_maxdbs(MDB_env *env, MDB_dbi dbs);
00884
00892 int mdb_env_get_maxkeysize(MDB_env *env);
00893
00900 int mdb_env_set_userctx(MDB_env *env, void *ctx);
00901
00907 void *mdb_env_get_userctx(MDB_env *env);
00908
00915 typedef void MDB_assert_func(MDB_env *env, const char *msg);
00916
00924 int mdb_env_set_assert(MDB_env *env, MDB_assert_func *func);
00925
00960 int mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **txn);
00961
00966 MDB_env *mdb_txn_env(MDB_txn *txn);
00967
00977 size_t mdb_txn_id(MDB_txn *txn);
00978
00995 int mdb_txn_commit(MDB_txn *txn);
00996
01005 void mdb_txn_abort(MDB_txn *txn);
01006
01024 void mdb_txn_reset(MDB_txn *txn);
01025
01040 int mdb_txn_renew(MDB_txn *txn);
01041
01043 #define mdb_open(txn,name,flags,dbi) mdb_dbi_open(txn,name,flags,dbi)
01044
01045 #define mdb_close(env,dbi) mdb_dbi_close(env,dbi)
01046
01114 int mdb_dbi_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi);
01115
01128 int mdb_stat(MDB_txn *txn, MDB_dbi dbi, MDB_stat *stat);
01129
01137 int mdb_dbi_flags(MDB_txn *txn, MDB_dbi dbi, unsigned int *flags);
01138
01155 void mdb_dbi_close(MDB_env *env, MDB_dbi dbi);
01156
01166 int mdb_drop(MDB_txn *txn, MDB_dbi dbi, int del);
01167
01187 int mdb_set_compare(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp);
01188
01210 int mdb_set_dupsort(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp);
01211
01230 int mdb_set_relfunc(MDB_txn *txn, MDB_dbi dbi, MDB_rel_func *rel);
01231
01246 int mdb_set_relctx(MDB_txn *txn, MDB_dbi dbi, void *ctx);
01247
01274 int mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data);
01275
01323 int mdb_put(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data,
01324 unsigned int flags);
01325
01348 int mdb_del(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data);
01349
01372 int mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **cursor);
01373
01380 void mdb_cursor_close(MDB_cursor *cursor);
01381
01398 int mdb_cursor_renew(MDB_txn *txn, MDB_cursor *cursor);
01399
01404 MDB_txn *mdb_cursor_txn(MDB_cursor *cursor);
01405
01410 MDB_dbi mdb_cursor_dbi(MDB_cursor *cursor);
01411
01431 int mdb_cursor_get(MDB_cursor *cursor, MDB_val *key, MDB_val *data,
01432 MDB_cursor_op op);
01433
01493 int mdb_cursor_put(MDB_cursor *cursor, MDB_val *key, MDB_val *data,
01494 unsigned int flags);
01495
01513 int mdb_cursor_del(MDB_cursor *cursor, unsigned int flags);
01514
01527 int mdb_cursor_count(MDB_cursor *cursor, size_t *countp);
01528
01539 int mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b);
01540
01551 int mdb_dcmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b);
01552
01559 typedef int (MDB_msg_func)(const char *msg, void *ctx);
01560
01568 int mdb_reader_list(MDB_env *env, MDB_msg_func *func, void *ctx);
01569
01576 int mdb_reader_check(MDB_env *env, int *dead);
01579 #ifdef __cplusplus
01580 }
01581 #endif
01582
01590 #endif