| 1 | /** @file lmdb.h |
| 2 | * @brief Lightning memory-mapped database library |
| 3 | * |
| 4 | * @mainpage Lightning Memory-Mapped Database Manager (LMDB) |
| 5 | * |
| 6 | * @section intro_sec Introduction |
| 7 | * LMDB is a Btree-based database management library modeled loosely on the |
| 8 | * BerkeleyDB API, but much simplified. The entire database is exposed |
| 9 | * in a memory map, and all data fetches return data directly |
| 10 | * from the mapped memory, so no malloc's or memcpy's occur during |
| 11 | * data fetches. As such, the library is extremely simple because it |
| 12 | * requires no page caching layer of its own, and it is extremely high |
| 13 | * performance and memory-efficient. It is also fully transactional with |
| 14 | * full ACID semantics, and when the memory map is read-only, the |
| 15 | * database integrity cannot be corrupted by stray pointer writes from |
| 16 | * application code. |
| 17 | * |
| 18 | * The library is fully thread-aware and supports concurrent read/write |
| 19 | * access from multiple processes and threads. Data pages use a copy-on- |
| 20 | * write strategy so no active data pages are ever overwritten, which |
| 21 | * also provides resistance to corruption and eliminates the need of any |
| 22 | * special recovery procedures after a system crash. Writes are fully |
| 23 | * serialized; only one write transaction may be active at a time, which |
| 24 | * guarantees that writers can never deadlock. The database structure is |
| 25 | * multi-versioned so readers run with no locks; writers cannot block |
| 26 | * readers, and readers don't block writers. |
| 27 | * |
| 28 | * Unlike other well-known database mechanisms which use either write-ahead |
| 29 | * transaction logs or append-only data writes, LMDB requires no maintenance |
| 30 | * during operation. Both write-ahead loggers and append-only databases |
| 31 | * require periodic checkpointing and/or compaction of their log or database |
| 32 | * files otherwise they grow without bound. LMDB tracks free pages within |
| 33 | * the database and re-uses them for new write operations, so the database |
| 34 | * size does not grow without bound in normal use. |
| 35 | * |
| 36 | * The memory map can be used as a read-only or read-write map. It is |
| 37 | * read-only by default as this provides total immunity to corruption. |
| 38 | * Using read-write mode offers much higher write performance, but adds |
| 39 | * the possibility for stray application writes thru pointers to silently |
| 40 | * corrupt the database. Of course if your application code is known to |
| 41 | * be bug-free (...) then this is not an issue. |
| 42 | * |
| 43 | * If this is your first time using a transactional embedded key/value |
| 44 | * store, you may find the \ref starting page to be helpful. |
| 45 | * |
| 46 | * @section caveats_sec Caveats |
| 47 | * Troubleshooting the lock file, plus semaphores on BSD systems: |
| 48 | * |
| 49 | * - A broken lockfile can cause sync issues. |
| 50 | * Stale reader transactions left behind by an aborted program |
| 51 | * cause further writes to grow the database quickly, and |
| 52 | * stale locks can block further operation. |
| 53 | * |
| 54 | * Fix: Check for stale readers periodically, using the |
| 55 | * #mdb_reader_check function or the \ref mdb_stat_1 "mdb_stat" tool. |
| 56 | * Stale writers will be cleared automatically on most systems: |
| 57 | * - Windows - automatic |
| 58 | * - BSD, systems using SysV semaphores - automatic |
| 59 | * - Linux, systems using POSIX mutexes with Robust option - automatic |
| 60 | * Otherwise just make all programs using the database close it; |
| 61 | * the lockfile is always reset on first open of the environment. |
| 62 | * |
| 63 | * - On BSD systems or others configured with MDB_USE_SYSV_SEM or |
| 64 | * MDB_USE_POSIX_SEM, |
| 65 | * startup can fail due to semaphores owned by another userid. |
| 66 | * |
| 67 | * Fix: Open and close the database as the user which owns the |
| 68 | * semaphores (likely last user) or as root, while no other |
| 69 | * process is using the database. |
| 70 | * |
| 71 | * Restrictions/caveats (in addition to those listed for some functions): |
| 72 | * |
| 73 | * - Only the database owner should normally use the database on |
| 74 | * BSD systems or when otherwise configured with MDB_USE_POSIX_SEM. |
| 75 | * Multiple users can cause startup to fail later, as noted above. |
| 76 | * |
| 77 | * - There is normally no pure read-only mode, since readers need write |
| 78 | * access to locks and lock file. Exceptions: On read-only filesystems |
| 79 | * or with the #MDB_NOLOCK flag described under #mdb_env_open(). |
| 80 | * |
| 81 | * - An LMDB configuration will often reserve considerable \b unused |
| 82 | * memory address space and maybe file size for future growth. |
| 83 | * This does not use actual memory or disk space, but users may need |
| 84 | * to understand the difference so they won't be scared off. |
| 85 | * |
| 86 | * - By default, in versions before 0.9.10, unused portions of the data |
| 87 | * file might receive garbage data from memory freed by other code. |
| 88 | * (This does not happen when using the #MDB_WRITEMAP flag.) As of |
| 89 | * 0.9.10 the default behavior is to initialize such memory before |
| 90 | * writing to the data file. Since there may be a slight performance |
| 91 | * cost due to this initialization, applications may disable it using |
| 92 | * the #MDB_NOMEMINIT flag. Applications handling sensitive data |
| 93 | * which must not be written should not use this flag. This flag is |
| 94 | * irrelevant when using #MDB_WRITEMAP. |
| 95 | * |
| 96 | * - A thread can only use one transaction at a time, plus any child |
| 97 | * transactions. Each transaction belongs to one thread. See below. |
| 98 | * The #MDB_NOTLS flag changes this for read-only transactions. |
| 99 | * |
| 100 | * - Use an MDB_env* in the process which opened it, not after fork(). |
| 101 | * |
| 102 | * - Do not have open an LMDB database twice in the same process at |
| 103 | * the same time. Not even from a plain open() call - close()ing it |
| 104 | * breaks fcntl() advisory locking. (It is OK to reopen it after |
| 105 | * fork() - exec*(), since the lockfile has FD_CLOEXEC set.) |
| 106 | * |
| 107 | * - Avoid long-lived transactions. Read transactions prevent |
| 108 | * reuse of pages freed by newer write transactions, thus the |
| 109 | * database can grow quickly. Write transactions prevent |
| 110 | * other write transactions, since writes are serialized. |
| 111 | * |
| 112 | * - Avoid suspending a process with active transactions. These |
| 113 | * would then be "long-lived" as above. Also read transactions |
| 114 | * suspended when writers commit could sometimes see wrong data. |
| 115 | * |
| 116 | * ...when several processes can use a database concurrently: |
| 117 | * |
| 118 | * - Avoid aborting a process with an active transaction. |
| 119 | * The transaction becomes "long-lived" as above until a check |
| 120 | * for stale readers is performed or the lockfile is reset, |
| 121 | * since the process may not remove it from the lockfile. |
| 122 | * |
| 123 | * This does not apply to write transactions if the system clears |
| 124 | * stale writers, see above. |
| 125 | * |
| 126 | * - If you do that anyway, do a periodic check for stale readers. Or |
| 127 | * close the environment once in a while, so the lockfile can get reset. |
| 128 | * |
| 129 | * - Do not use LMDB databases on remote filesystems, even between |
| 130 | * processes on the same host. This breaks flock() on some OSes, |
| 131 | * possibly memory map sync, and certainly sync between programs |
| 132 | * on different hosts. |
| 133 | * |
| 134 | * - Opening a database can fail if another process is opening or |
| 135 | * closing it at exactly the same time. |
| 136 | * |
| 137 | * @author Howard Chu, Symas Corporation. |
| 138 | * |
| 139 | * @copyright Copyright 2011-2019 Howard Chu, Symas Corp. All rights reserved. |
| 140 | * |
| 141 | * Redistribution and use in source and binary forms, with or without |
| 142 | * modification, are permitted only as authorized by the OpenLDAP |
| 143 | * Public License. |
| 144 | * |
| 145 | * A copy of this license is available in the file LICENSE in the |
| 146 | * top-level directory of the distribution or, alternatively, at |
| 147 | * <http://www.OpenLDAP.org/license.html>. |
| 148 | * |
| 149 | * @par Derived From: |
| 150 | * This code is derived from btree.c written by Martin Hedenfalk. |
| 151 | * |
| 152 | * Copyright (c) 2009, 2010 Martin Hedenfalk <martin@bzero.se> |
| 153 | * |
| 154 | * Permission to use, copy, modify, and distribute this software for any |
| 155 | * purpose with or without fee is hereby granted, provided that the above |
| 156 | * copyright notice and this permission notice appear in all copies. |
| 157 | * |
| 158 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| 159 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| 160 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| 161 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| 162 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| 163 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| 164 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| 165 | */ |
| 166 | #ifndef _LMDB_H_ |
| 167 | #define _LMDB_H_ |
| 168 | |
| 169 | #include <sys/types.h> |
| 170 | #include <inttypes.h> |
| 171 | #include <limits.h> |
| 172 | |
| 173 | #ifdef __cplusplus |
| 174 | extern "C" { |
| 175 | #endif |
| 176 | |
| 177 | /** Unix permissions for creating files, or dummy definition for Windows */ |
| 178 | #ifdef _MSC_VER |
| 179 | typedef int mdb_mode_t; |
| 180 | #else |
| 181 | typedef mode_t mdb_mode_t; |
| 182 | #endif |
| 183 | |
| 184 | #ifdef _WIN32 |
| 185 | # define MDB_FMT_Z "I" |
| 186 | #else |
| 187 | # define MDB_FMT_Z "z" /**< printf/scanf format modifier for size_t */ |
| 188 | #endif |
| 189 | |
| 190 | #ifndef MDB_VL32 |
| 191 | /** Unsigned type used for mapsize, entry counts and page/transaction IDs. |
| 192 | * |
| 193 | * It is normally size_t, hence the name. Defining MDB_VL32 makes it |
| 194 | * uint64_t, but do not try this unless you know what you are doing. |
| 195 | */ |
| 196 | typedef size_t mdb_size_t; |
| 197 | # define MDB_SIZE_MAX SIZE_MAX /**< max #mdb_size_t */ |
| 198 | /** #mdb_size_t printf formats, \b t = one of [diouxX] without quotes */ |
| 199 | # define MDB_PRIy(t) MDB_FMT_Z #t |
| 200 | /** #mdb_size_t scanf formats, \b t = one of [dioux] without quotes */ |
| 201 | # define MDB_SCNy(t) MDB_FMT_Z #t |
| 202 | #else |
| 203 | typedef uint64_t mdb_size_t; |
| 204 | # define MDB_SIZE_MAX UINT64_MAX |
| 205 | # define MDB_PRIy(t) PRI##t##64 |
| 206 | # define MDB_SCNy(t) SCN##t##64 |
| 207 | # define mdb_env_create mdb_env_create_vl32 /**< Prevent mixing with non-VL32 builds */ |
| 208 | #endif |
| 209 | |
| 210 | /** An abstraction for a file handle. |
| 211 | * On POSIX systems file handles are small integers. On Windows |
| 212 | * they're opaque pointers. |
| 213 | */ |
| 214 | #ifdef _WIN32 |
| 215 | typedef void *mdb_filehandle_t; |
| 216 | #else |
| 217 | typedef int mdb_filehandle_t; |
| 218 | #endif |
| 219 | |
| 220 | /** @defgroup mdb LMDB API |
| 221 | * @{ |
| 222 | * @brief OpenLDAP Lightning Memory-Mapped Database Manager |
| 223 | */ |
| 224 | /** @defgroup Version Version Macros |
| 225 | * @{ |
| 226 | */ |
| 227 | /** Library major version */ |
| 228 | #define MDB_VERSION_MAJOR 0 |
| 229 | /** Library minor version */ |
| 230 | #define MDB_VERSION_MINOR 9 |
| 231 | /** Library patch version */ |
| 232 | #define MDB_VERSION_PATCH 70 |
| 233 | |
| 234 | /** Combine args a,b,c into a single integer for easy version comparisons */ |
| 235 | #define MDB_VERINT(a,b,c) (((a) << 24) | ((b) << 16) | (c)) |
| 236 | |
| 237 | /** The full library version as a single integer */ |
| 238 | #define MDB_VERSION_FULL \ |
| 239 | MDB_VERINT(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH) |
| 240 | |
| 241 | /** The release date of this library version */ |
| 242 | #define MDB_VERSION_DATE "December 19, 2015" |
| 243 | |
| 244 | /** A stringifier for the version info */ |
| 245 | #define MDB_VERSTR(a,b,c,d) "LMDB " #a "." #b "." #c ": (" d ")" |
| 246 | |
| 247 | /** A helper for the stringifier macro */ |
| 248 | #define MDB_VERFOO(a,b,c,d) MDB_VERSTR(a,b,c,d) |
| 249 | |
| 250 | /** The full library version as a C string */ |
| 251 | #define MDB_VERSION_STRING \ |
| 252 | MDB_VERFOO(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH,MDB_VERSION_DATE) |
| 253 | /** @} */ |
| 254 | |
| 255 | /** @brief Opaque structure for a database environment. |
| 256 | * |
| 257 | * A DB environment supports multiple databases, all residing in the same |
| 258 | * shared-memory map. |
| 259 | */ |
| 260 | typedef struct MDB_env MDB_env; |
| 261 | |
| 262 | /** @brief Opaque structure for a transaction handle. |
| 263 | * |
| 264 | * All database operations require a transaction handle. Transactions may be |
| 265 | * read-only or read-write. |
| 266 | */ |
| 267 | typedef struct MDB_txn MDB_txn; |
| 268 | |
| 269 | /** @brief A handle for an individual database in the DB environment. */ |
| 270 | typedef unsigned int MDB_dbi; |
| 271 | |
| 272 | /** @brief Opaque structure for navigating through a database */ |
| 273 | typedef struct MDB_cursor MDB_cursor; |
| 274 | |
| 275 | /** @brief Generic structure used for passing keys and data in and out |
| 276 | * of the database. |
| 277 | * |
| 278 | * Values returned from the database are valid only until a subsequent |
| 279 | * update operation, or the end of the transaction. Do not modify or |
| 280 | * free them, they commonly point into the database itself. |
| 281 | * |
| 282 | * Key sizes must be between 1 and #mdb_env_get_maxkeysize() inclusive. |
| 283 | * The same applies to data sizes in databases with the #MDB_DUPSORT flag. |
| 284 | * Other data items can in theory be from 0 to 0xffffffff bytes long. |
| 285 | */ |
| 286 | typedef struct MDB_val { |
| 287 | size_t mv_size; /**< size of the data item */ |
| 288 | void *mv_data; /**< address of the data item */ |
| 289 | } MDB_val; |
| 290 | |
| 291 | /** @brief A callback function used to compare two keys in a database */ |
| 292 | typedef int (MDB_cmp_func)(const MDB_val *a, const MDB_val *b); |
| 293 | |
| 294 | /** @brief A callback function used to relocate a position-dependent data item |
| 295 | * in a fixed-address database. |
| 296 | * |
| 297 | * The \b newptr gives the item's desired address in |
| 298 | * the memory map, and \b oldptr gives its previous address. The item's actual |
| 299 | * data resides at the address in \b item. This callback is expected to walk |
| 300 | * through the fields of the record in \b item and modify any |
| 301 | * values based at the \b oldptr address to be relative to the \b newptr address. |
| 302 | * @param[in,out] item The item that is to be relocated. |
| 303 | * @param[in] oldptr The previous address. |
| 304 | * @param[in] newptr The new address to relocate to. |
| 305 | * @param[in] relctx An application-provided context, set by #mdb_set_relctx(). |
| 306 | * @todo This feature is currently unimplemented. |
| 307 | */ |
| 308 | typedef void (MDB_rel_func)(MDB_val *item, void *oldptr, void *newptr, void *relctx); |
| 309 | |
| 310 | /** @defgroup mdb_env Environment Flags |
| 311 | * @{ |
| 312 | */ |
| 313 | /** mmap at a fixed address (experimental) */ |
| 314 | #define MDB_FIXEDMAP 0x01 |
| 315 | /** no environment directory */ |
| 316 | #define MDB_NOSUBDIR 0x4000 |
| 317 | /** don't fsync after commit */ |
| 318 | #define MDB_NOSYNC 0x10000 |
| 319 | /** read only */ |
| 320 | #define MDB_RDONLY 0x20000 |
| 321 | /** don't fsync metapage after commit */ |
| 322 | #define MDB_NOMETASYNC 0x40000 |
| 323 | /** use writable mmap */ |
| 324 | #define MDB_WRITEMAP 0x80000 |
| 325 | /** use asynchronous msync when #MDB_WRITEMAP is used */ |
| 326 | #define MDB_MAPASYNC 0x100000 |
| 327 | /** tie reader locktable slots to #MDB_txn objects instead of to threads */ |
| 328 | #define MDB_NOTLS 0x200000 |
| 329 | /** don't do any locking, caller must manage their own locks */ |
| 330 | #define MDB_NOLOCK 0x400000 |
| 331 | /** don't do readahead (no effect on Windows) */ |
| 332 | #define MDB_NORDAHEAD 0x800000 |
| 333 | /** don't initialize malloc'd memory before writing to datafile */ |
| 334 | #define MDB_NOMEMINIT 0x1000000 |
| 335 | /** use the previous snapshot rather than the latest one */ |
| 336 | #define MDB_PREVSNAPSHOT 0x2000000 |
| 337 | /** @} */ |
| 338 | |
| 339 | /** @defgroup mdb_dbi_open Database Flags |
| 340 | * @{ |
| 341 | */ |
| 342 | /** use reverse string keys */ |
| 343 | #define MDB_REVERSEKEY 0x02 |
| 344 | /** use sorted duplicates */ |
| 345 | #define MDB_DUPSORT 0x04 |
| 346 | /** numeric keys in native byte order, either unsigned int or #mdb_size_t. |
| 347 | * (lmdb expects 32-bit int <= size_t <= 32/64-bit mdb_size_t.) |
| 348 | * The keys must all be of the same size. */ |
| 349 | #define MDB_INTEGERKEY 0x08 |
| 350 | /** with #MDB_DUPSORT, sorted dup items have fixed size */ |
| 351 | #define MDB_DUPFIXED 0x10 |
| 352 | /** with #MDB_DUPSORT, dups are #MDB_INTEGERKEY-style integers */ |
| 353 | #define MDB_INTEGERDUP 0x20 |
| 354 | /** with #MDB_DUPSORT, use reverse string dups */ |
| 355 | #define MDB_REVERSEDUP 0x40 |
| 356 | /** create DB if not already existing */ |
| 357 | #define MDB_CREATE 0x40000 |
| 358 | /** @} */ |
| 359 | |
| 360 | /** @defgroup mdb_put Write Flags |
| 361 | * @{ |
| 362 | */ |
| 363 | /** For put: Don't write if the key already exists. */ |
| 364 | #define MDB_NOOVERWRITE 0x10 |
| 365 | /** Only for #MDB_DUPSORT<br> |
| 366 | * For put: don't write if the key and data pair already exist.<br> |
| 367 | * For mdb_cursor_del: remove all duplicate data items. |
| 368 | */ |
| 369 | #define MDB_NODUPDATA 0x20 |
| 370 | /** For mdb_cursor_put: overwrite the current key/data pair */ |
| 371 | #define MDB_CURRENT 0x40 |
| 372 | /** For put: Just reserve space for data, don't copy it. Return a |
| 373 | * pointer to the reserved space. |
| 374 | */ |
| 375 | #define MDB_RESERVE 0x10000 |
| 376 | /** Data is being appended, don't split full pages. */ |
| 377 | #define MDB_APPEND 0x20000 |
| 378 | /** Duplicate data is being appended, don't split full pages. */ |
| 379 | #define MDB_APPENDDUP 0x40000 |
| 380 | /** Store multiple data items in one call. Only for #MDB_DUPFIXED. */ |
| 381 | #define MDB_MULTIPLE 0x80000 |
| 382 | /* @} */ |
| 383 | |
| 384 | /** @defgroup mdb_copy Copy Flags |
| 385 | * @{ |
| 386 | */ |
| 387 | /** Compacting copy: Omit free space from copy, and renumber all |
| 388 | * pages sequentially. |
| 389 | */ |
| 390 | #define MDB_CP_COMPACT 0x01 |
| 391 | /* @} */ |
| 392 | |
| 393 | /** @brief Cursor Get operations. |
| 394 | * |
| 395 | * This is the set of all operations for retrieving data |
| 396 | * using a cursor. |
| 397 | */ |
| 398 | typedef enum MDB_cursor_op { |
| 399 | MDB_FIRST, /**< Position at first key/data item */ |
| 400 | MDB_FIRST_DUP, /**< Position at first data item of current key. |
| 401 | Only for #MDB_DUPSORT */ |
| 402 | MDB_GET_BOTH, /**< Position at key/data pair. Only for #MDB_DUPSORT */ |
| 403 | MDB_GET_BOTH_RANGE, /**< position at key, nearest data. Only for #MDB_DUPSORT */ |
| 404 | MDB_GET_CURRENT, /**< Return key/data at current cursor position */ |
| 405 | MDB_GET_MULTIPLE, /**< Return up to a page of duplicate data items |
| 406 | from current cursor position. Move cursor to prepare |
| 407 | for #MDB_NEXT_MULTIPLE. Only for #MDB_DUPFIXED */ |
| 408 | MDB_LAST, /**< Position at last key/data item */ |
| 409 | MDB_LAST_DUP, /**< Position at last data item of current key. |
| 410 | Only for #MDB_DUPSORT */ |
| 411 | MDB_NEXT, /**< Position at next data item */ |
| 412 | MDB_NEXT_DUP, /**< Position at next data item of current key. |
| 413 | Only for #MDB_DUPSORT */ |
| 414 | MDB_NEXT_MULTIPLE, /**< Return up to a page of duplicate data items |
| 415 | from next cursor position. Move cursor to prepare |
| 416 | for #MDB_NEXT_MULTIPLE. Only for #MDB_DUPFIXED */ |
| 417 | MDB_NEXT_NODUP, /**< Position at first data item of next key */ |
| 418 | MDB_PREV, /**< Position at previous data item */ |
| 419 | MDB_PREV_DUP, /**< Position at previous data item of current key. |
| 420 | Only for #MDB_DUPSORT */ |
| 421 | MDB_PREV_NODUP, /**< Position at last data item of previous key */ |
| 422 | MDB_SET, /**< Position at specified key */ |
| 423 | MDB_SET_KEY, /**< Position at specified key, return key + data */ |
| 424 | MDB_SET_RANGE, /**< Position at first key greater than or equal to specified key. */ |
| 425 | MDB_PREV_MULTIPLE /**< Position at previous page and return up to |
| 426 | a page of duplicate data items. Only for #MDB_DUPFIXED */ |
| 427 | } MDB_cursor_op; |
| 428 | |
| 429 | /** @defgroup errors Return Codes |
| 430 | * |
| 431 | * BerkeleyDB uses -30800 to -30999, we'll go under them |
| 432 | * @{ |
| 433 | */ |
| 434 | /** Successful result */ |
| 435 | #define MDB_SUCCESS 0 |
| 436 | /** key/data pair already exists */ |
| 437 | #define MDB_KEYEXIST (-30799) |
| 438 | /** key/data pair not found (EOF) */ |
| 439 | #define MDB_NOTFOUND (-30798) |
| 440 | /** Requested page not found - this usually indicates corruption */ |
| 441 | #define MDB_PAGE_NOTFOUND (-30797) |
| 442 | /** Located page was wrong type */ |
| 443 | #define MDB_CORRUPTED (-30796) |
| 444 | /** Update of meta page failed or environment had fatal error */ |
| 445 | #define MDB_PANIC (-30795) |
| 446 | /** Environment version mismatch */ |
| 447 | #define MDB_VERSION_MISMATCH (-30794) |
| 448 | /** File is not a valid LMDB file */ |
| 449 | #define MDB_INVALID (-30793) |
| 450 | /** Environment mapsize reached */ |
| 451 | #define MDB_MAP_FULL (-30792) |
| 452 | /** Environment maxdbs reached */ |
| 453 | #define MDB_DBS_FULL (-30791) |
| 454 | /** Environment maxreaders reached */ |
| 455 | #define MDB_READERS_FULL (-30790) |
| 456 | /** Too many TLS keys in use - Windows only */ |
| 457 | #define MDB_TLS_FULL (-30789) |
| 458 | /** Txn has too many dirty pages */ |
| 459 | #define MDB_TXN_FULL (-30788) |
| 460 | /** Cursor stack too deep - internal error */ |
| 461 | #define MDB_CURSOR_FULL (-30787) |
| 462 | /** Page has not enough space - internal error */ |
| 463 | #define MDB_PAGE_FULL (-30786) |
| 464 | /** Database contents grew beyond environment mapsize */ |
| 465 | #define MDB_MAP_RESIZED (-30785) |
| 466 | /** Operation and DB incompatible, or DB type changed. This can mean: |
| 467 | * <ul> |
| 468 | * <li>The operation expects an #MDB_DUPSORT / #MDB_DUPFIXED database. |
| 469 | * <li>Opening a named DB when the unnamed DB has #MDB_DUPSORT / #MDB_INTEGERKEY. |
| 470 | * <li>Accessing a data record as a database, or vice versa. |
| 471 | * <li>The database was dropped and recreated with different flags. |
| 472 | * </ul> |
| 473 | */ |
| 474 | #define MDB_INCOMPATIBLE (-30784) |
| 475 | /** Invalid reuse of reader locktable slot */ |
| 476 | #define MDB_BAD_RSLOT (-30783) |
| 477 | /** Transaction must abort, has a child, or is invalid */ |
| 478 | #define MDB_BAD_TXN (-30782) |
| 479 | /** Unsupported size of key/DB name/data, or wrong DUPFIXED size */ |
| 480 | #define MDB_BAD_VALSIZE (-30781) |
| 481 | /** The specified DBI was changed unexpectedly */ |
| 482 | #define MDB_BAD_DBI (-30780) |
| 483 | /** Unexpected problem - txn should abort */ |
| 484 | #define MDB_PROBLEM (-30779) |
| 485 | /** The last defined error code */ |
| 486 | #define MDB_LAST_ERRCODE MDB_PROBLEM |
| 487 | /** @} */ |
| 488 | |
| 489 | /** @brief Statistics for a database in the environment */ |
| 490 | typedef struct MDB_stat { |
| 491 | unsigned int ms_psize; /**< Size of a database page. |
| 492 | This is currently the same for all databases. */ |
| 493 | unsigned int ms_depth; /**< Depth (height) of the B-tree */ |
| 494 | mdb_size_t ms_branch_pages; /**< Number of internal (non-leaf) pages */ |
| 495 | mdb_size_t ms_leaf_pages; /**< Number of leaf pages */ |
| 496 | mdb_size_t ms_overflow_pages; /**< Number of overflow pages */ |
| 497 | mdb_size_t ms_entries; /**< Number of data items */ |
| 498 | } MDB_stat; |
| 499 | |
| 500 | /** @brief Information about the environment */ |
| 501 | typedef struct MDB_envinfo { |
| 502 | void *me_mapaddr; /**< Address of map, if fixed */ |
| 503 | mdb_size_t me_mapsize; /**< Size of the data memory map */ |
| 504 | mdb_size_t me_last_pgno; /**< ID of the last used page */ |
| 505 | mdb_size_t me_last_txnid; /**< ID of the last committed transaction */ |
| 506 | unsigned int me_maxreaders; /**< max reader slots in the environment */ |
| 507 | unsigned int me_numreaders; /**< max reader slots used in the environment */ |
| 508 | } MDB_envinfo; |
| 509 | |
| 510 | /** @brief Return the LMDB library version information. |
| 511 | * |
| 512 | * @param[out] major if non-NULL, the library major version number is copied here |
| 513 | * @param[out] minor if non-NULL, the library minor version number is copied here |
| 514 | * @param[out] patch if non-NULL, the library patch version number is copied here |
| 515 | * @retval "version string" The library version as a string |
| 516 | */ |
| 517 | char *mdb_version(int *major, int *minor, int *patch); |
| 518 | |
| 519 | /** @brief Return a string describing a given error code. |
| 520 | * |
| 521 | * This function is a superset of the ANSI C X3.159-1989 (ANSI C) strerror(3) |
| 522 | * function. If the error code is greater than or equal to 0, then the string |
| 523 | * returned by the system function strerror(3) is returned. If the error code |
| 524 | * is less than 0, an error string corresponding to the LMDB library error is |
| 525 | * returned. See @ref errors for a list of LMDB-specific error codes. |
| 526 | * @param[in] err The error code |
| 527 | * @retval "error message" The description of the error |
| 528 | */ |
| 529 | char *mdb_strerror(int err); |
| 530 | |
| 531 | /** @brief Create an LMDB environment handle. |
| 532 | * |
| 533 | * This function allocates memory for a #MDB_env structure. To release |
| 534 | * the allocated memory and discard the handle, call #mdb_env_close(). |
| 535 | * Before the handle may be used, it must be opened using #mdb_env_open(). |
| 536 | * Various other options may also need to be set before opening the handle, |
| 537 | * e.g. #mdb_env_set_mapsize(), #mdb_env_set_maxreaders(), #mdb_env_set_maxdbs(), |
| 538 | * depending on usage requirements. |
| 539 | * @param[out] env The address where the new handle will be stored |
| 540 | * @return A non-zero error value on failure and 0 on success. |
| 541 | */ |
| 542 | int mdb_env_create(MDB_env **env); |
| 543 | |
| 544 | /** @brief Open an environment handle. |
| 545 | * |
| 546 | * If this function fails, #mdb_env_close() must be called to discard the #MDB_env handle. |
| 547 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 548 | * @param[in] path The directory in which the database files reside. This |
| 549 | * directory must already exist and be writable. |
| 550 | * @param[in] flags Special options for this environment. This parameter |
| 551 | * must be set to 0 or by bitwise OR'ing together one or more of the |
| 552 | * values described here. |
| 553 | * Flags set by mdb_env_set_flags() are also used. |
| 554 | * <ul> |
| 555 | * <li>#MDB_FIXEDMAP |
| 556 | * use a fixed address for the mmap region. This flag must be specified |
| 557 | * when creating the environment, and is stored persistently in the environment. |
| 558 | * If successful, the memory map will always reside at the same virtual address |
| 559 | * and pointers used to reference data items in the database will be constant |
| 560 | * across multiple invocations. This option may not always work, depending on |
| 561 | * how the operating system has allocated memory to shared libraries and other uses. |
| 562 | * The feature is highly experimental. |
| 563 | * <li>#MDB_NOSUBDIR |
| 564 | * By default, LMDB creates its environment in a directory whose |
| 565 | * pathname is given in \b path, and creates its data and lock files |
| 566 | * under that directory. With this option, \b path is used as-is for |
| 567 | * the database main data file. The database lock file is the \b path |
| 568 | * with "-lock" appended. |
| 569 | * <li>#MDB_RDONLY |
| 570 | * Open the environment in read-only mode. No write operations will be |
| 571 | * allowed. LMDB will still modify the lock file - except on read-only |
| 572 | * filesystems, where LMDB does not use locks. |
| 573 | * <li>#MDB_WRITEMAP |
| 574 | * Use a writeable memory map unless MDB_RDONLY is set. This uses |
| 575 | * fewer mallocs but loses protection from application bugs |
| 576 | * like wild pointer writes and other bad updates into the database. |
| 577 | * This may be slightly faster for DBs that fit entirely in RAM, but |
| 578 | * is slower for DBs larger than RAM. |
| 579 | * Incompatible with nested transactions. |
| 580 | * Do not mix processes with and without MDB_WRITEMAP on the same |
| 581 | * environment. This can defeat durability (#mdb_env_sync etc). |
| 582 | * <li>#MDB_NOMETASYNC |
| 583 | * Flush system buffers to disk only once per transaction, omit the |
| 584 | * metadata flush. Defer that until the system flushes files to disk, |
| 585 | * or next non-MDB_RDONLY commit or #mdb_env_sync(). This optimization |
| 586 | * maintains database integrity, but a system crash may undo the last |
| 587 | * committed transaction. I.e. it preserves the ACI (atomicity, |
| 588 | * consistency, isolation) but not D (durability) database property. |
| 589 | * This flag may be changed at any time using #mdb_env_set_flags(). |
| 590 | * <li>#MDB_NOSYNC |
| 591 | * Don't flush system buffers to disk when committing a transaction. |
| 592 | * This optimization means a system crash can corrupt the database or |
| 593 | * lose the last transactions if buffers are not yet flushed to disk. |
| 594 | * The risk is governed by how often the system flushes dirty buffers |
| 595 | * to disk and how often #mdb_env_sync() is called. However, if the |
| 596 | * filesystem preserves write order and the #MDB_WRITEMAP flag is not |
| 597 | * used, transactions exhibit ACI (atomicity, consistency, isolation) |
| 598 | * properties and only lose D (durability). I.e. database integrity |
| 599 | * is maintained, but a system crash may undo the final transactions. |
| 600 | * Note that (#MDB_NOSYNC | #MDB_WRITEMAP) leaves the system with no |
| 601 | * hint for when to write transactions to disk, unless #mdb_env_sync() |
| 602 | * is called. (#MDB_MAPASYNC | #MDB_WRITEMAP) may be preferable. |
| 603 | * This flag may be changed at any time using #mdb_env_set_flags(). |
| 604 | * <li>#MDB_MAPASYNC |
| 605 | * When using #MDB_WRITEMAP, use asynchronous flushes to disk. |
| 606 | * As with #MDB_NOSYNC, a system crash can then corrupt the |
| 607 | * database or lose the last transactions. Calling #mdb_env_sync() |
| 608 | * ensures on-disk database integrity until next commit. |
| 609 | * This flag may be changed at any time using #mdb_env_set_flags(). |
| 610 | * <li>#MDB_NOTLS |
| 611 | * Don't use Thread-Local Storage. Tie reader locktable slots to |
| 612 | * #MDB_txn objects instead of to threads. I.e. #mdb_txn_reset() keeps |
| 613 | * the slot reseved for the #MDB_txn object. A thread may use parallel |
| 614 | * read-only transactions. A read-only transaction may span threads if |
| 615 | * the user synchronizes its use. Applications that multiplex many |
| 616 | * user threads over individual OS threads need this option. Such an |
| 617 | * application must also serialize the write transactions in an OS |
| 618 | * thread, since LMDB's write locking is unaware of the user threads. |
| 619 | * <li>#MDB_NOLOCK |
| 620 | * Don't do any locking. If concurrent access is anticipated, the |
| 621 | * caller must manage all concurrency itself. For proper operation |
| 622 | * the caller must enforce single-writer semantics, and must ensure |
| 623 | * that no readers are using old transactions while a writer is |
| 624 | * active. The simplest approach is to use an exclusive lock so that |
| 625 | * no readers may be active at all when a writer begins. |
| 626 | * <li>#MDB_NORDAHEAD |
| 627 | * Turn off readahead. Most operating systems perform readahead on |
| 628 | * read requests by default. This option turns it off if the OS |
| 629 | * supports it. Turning it off may help random read performance |
| 630 | * when the DB is larger than RAM and system RAM is full. |
| 631 | * The option is not implemented on Windows. |
| 632 | * <li>#MDB_NOMEMINIT |
| 633 | * Don't initialize malloc'd memory before writing to unused spaces |
| 634 | * in the data file. By default, memory for pages written to the data |
| 635 | * file is obtained using malloc. While these pages may be reused in |
| 636 | * subsequent transactions, freshly malloc'd pages will be initialized |
| 637 | * to zeroes before use. This avoids persisting leftover data from other |
| 638 | * code (that used the heap and subsequently freed the memory) into the |
| 639 | * data file. Note that many other system libraries may allocate |
| 640 | * and free memory from the heap for arbitrary uses. E.g., stdio may |
| 641 | * use the heap for file I/O buffers. This initialization step has a |
| 642 | * modest performance cost so some applications may want to disable |
| 643 | * it using this flag. This option can be a problem for applications |
| 644 | * which handle sensitive data like passwords, and it makes memory |
| 645 | * checkers like Valgrind noisy. This flag is not needed with #MDB_WRITEMAP, |
| 646 | * which writes directly to the mmap instead of using malloc for pages. The |
| 647 | * initialization is also skipped if #MDB_RESERVE is used; the |
| 648 | * caller is expected to overwrite all of the memory that was |
| 649 | * reserved in that case. |
| 650 | * This flag may be changed at any time using #mdb_env_set_flags(). |
| 651 | * <li>#MDB_PREVSNAPSHOT |
| 652 | * Open the environment with the previous snapshot rather than the latest |
| 653 | * one. This loses the latest transaction, but may help work around some |
| 654 | * types of corruption. If opened with write access, this must be the |
| 655 | * only process using the environment. This flag is automatically reset |
| 656 | * after a write transaction is successfully committed. |
| 657 | * </ul> |
| 658 | * @param[in] mode The UNIX permissions to set on created files and semaphores. |
| 659 | * This parameter is ignored on Windows. |
| 660 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 661 | * errors are: |
| 662 | * <ul> |
| 663 | * <li>#MDB_VERSION_MISMATCH - the version of the LMDB library doesn't match the |
| 664 | * version that created the database environment. |
| 665 | * <li>#MDB_INVALID - the environment file headers are corrupted. |
| 666 | * <li>ENOENT - the directory specified by the path parameter doesn't exist. |
| 667 | * <li>EACCES - the user didn't have permission to access the environment files. |
| 668 | * <li>EAGAIN - the environment was locked by another process. |
| 669 | * </ul> |
| 670 | */ |
| 671 | int mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode); |
| 672 | |
| 673 | /** @brief Copy an LMDB environment to the specified path. |
| 674 | * |
| 675 | * This function may be used to make a backup of an existing environment. |
| 676 | * No lockfile is created, since it gets recreated at need. |
| 677 | * @note This call can trigger significant file size growth if run in |
| 678 | * parallel with write transactions, because it employs a read-only |
| 679 | * transaction. See long-lived transactions under @ref caveats_sec. |
| 680 | * @param[in] env An environment handle returned by #mdb_env_create(). It |
| 681 | * must have already been opened successfully. |
| 682 | * @param[in] path The directory in which the copy will reside. This |
| 683 | * directory must already exist and be writable but must otherwise be |
| 684 | * empty. |
| 685 | * @return A non-zero error value on failure and 0 on success. |
| 686 | */ |
| 687 | int mdb_env_copy(MDB_env *env, const char *path); |
| 688 | |
| 689 | /** @brief Copy an LMDB environment to the specified file descriptor. |
| 690 | * |
| 691 | * This function may be used to make a backup of an existing environment. |
| 692 | * No lockfile is created, since it gets recreated at need. |
| 693 | * @note This call can trigger significant file size growth if run in |
| 694 | * parallel with write transactions, because it employs a read-only |
| 695 | * transaction. See long-lived transactions under @ref caveats_sec. |
| 696 | * @param[in] env An environment handle returned by #mdb_env_create(). It |
| 697 | * must have already been opened successfully. |
| 698 | * @param[in] fd The filedescriptor to write the copy to. It must |
| 699 | * have already been opened for Write access. |
| 700 | * @return A non-zero error value on failure and 0 on success. |
| 701 | */ |
| 702 | int mdb_env_copyfd(MDB_env *env, mdb_filehandle_t fd); |
| 703 | |
| 704 | /** @brief Copy an LMDB environment to the specified path, with options. |
| 705 | * |
| 706 | * This function may be used to make a backup of an existing environment. |
| 707 | * No lockfile is created, since it gets recreated at need. |
| 708 | * @note This call can trigger significant file size growth if run in |
| 709 | * parallel with write transactions, because it employs a read-only |
| 710 | * transaction. See long-lived transactions under @ref caveats_sec. |
| 711 | * @param[in] env An environment handle returned by #mdb_env_create(). It |
| 712 | * must have already been opened successfully. |
| 713 | * @param[in] path The directory in which the copy will reside. This |
| 714 | * directory must already exist and be writable but must otherwise be |
| 715 | * empty. |
| 716 | * @param[in] flags Special options for this operation. This parameter |
| 717 | * must be set to 0 or by bitwise OR'ing together one or more of the |
| 718 | * values described here. |
| 719 | * <ul> |
| 720 | * <li>#MDB_CP_COMPACT - Perform compaction while copying: omit free |
| 721 | * pages and sequentially renumber all pages in output. This option |
| 722 | * consumes more CPU and runs more slowly than the default. |
| 723 | * Currently it fails if the environment has suffered a page leak. |
| 724 | * </ul> |
| 725 | * @return A non-zero error value on failure and 0 on success. |
| 726 | */ |
| 727 | int mdb_env_copy2(MDB_env *env, const char *path, unsigned int flags); |
| 728 | |
| 729 | /** @brief Copy an LMDB environment to the specified file descriptor, |
| 730 | * with options. |
| 731 | * |
| 732 | * This function may be used to make a backup of an existing environment. |
| 733 | * No lockfile is created, since it gets recreated at need. See |
| 734 | * #mdb_env_copy2() for further details. |
| 735 | * @note This call can trigger significant file size growth if run in |
| 736 | * parallel with write transactions, because it employs a read-only |
| 737 | * transaction. See long-lived transactions under @ref caveats_sec. |
| 738 | * @param[in] env An environment handle returned by #mdb_env_create(). It |
| 739 | * must have already been opened successfully. |
| 740 | * @param[in] fd The filedescriptor to write the copy to. It must |
| 741 | * have already been opened for Write access. |
| 742 | * @param[in] flags Special options for this operation. |
| 743 | * See #mdb_env_copy2() for options. |
| 744 | * @return A non-zero error value on failure and 0 on success. |
| 745 | */ |
| 746 | int mdb_env_copyfd2(MDB_env *env, mdb_filehandle_t fd, unsigned int flags); |
| 747 | |
| 748 | /** @brief Return statistics about the LMDB environment. |
| 749 | * |
| 750 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 751 | * @param[out] stat The address of an #MDB_stat structure |
| 752 | * where the statistics will be copied |
| 753 | */ |
| 754 | int mdb_env_stat(MDB_env *env, MDB_stat *stat); |
| 755 | |
| 756 | /** @brief Return information about the LMDB environment. |
| 757 | * |
| 758 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 759 | * @param[out] stat The address of an #MDB_envinfo structure |
| 760 | * where the information will be copied |
| 761 | */ |
| 762 | int mdb_env_info(MDB_env *env, MDB_envinfo *stat); |
| 763 | |
| 764 | /** @brief Flush the data buffers to disk. |
| 765 | * |
| 766 | * Data is always written to disk when #mdb_txn_commit() is called, |
| 767 | * but the operating system may keep it buffered. LMDB always flushes |
| 768 | * the OS buffers upon commit as well, unless the environment was |
| 769 | * opened with #MDB_NOSYNC or in part #MDB_NOMETASYNC. This call is |
| 770 | * not valid if the environment was opened with #MDB_RDONLY. |
| 771 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 772 | * @param[in] force If non-zero, force a synchronous flush. Otherwise |
| 773 | * if the environment has the #MDB_NOSYNC flag set the flushes |
| 774 | * will be omitted, and with #MDB_MAPASYNC they will be asynchronous. |
| 775 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 776 | * errors are: |
| 777 | * <ul> |
| 778 | * <li>EACCES - the environment is read-only. |
| 779 | * <li>EINVAL - an invalid parameter was specified. |
| 780 | * <li>EIO - an error occurred during synchronization. |
| 781 | * </ul> |
| 782 | */ |
| 783 | int mdb_env_sync(MDB_env *env, int force); |
| 784 | |
| 785 | /** @brief Close the environment and release the memory map. |
| 786 | * |
| 787 | * Only a single thread may call this function. All transactions, databases, |
| 788 | * and cursors must already be closed before calling this function. Attempts to |
| 789 | * use any such handles after calling this function will cause a SIGSEGV. |
| 790 | * The environment handle will be freed and must not be used again after this call. |
| 791 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 792 | */ |
| 793 | void mdb_env_close(MDB_env *env); |
| 794 | |
| 795 | /** @brief Set environment flags. |
| 796 | * |
| 797 | * This may be used to set some flags in addition to those from |
| 798 | * #mdb_env_open(), or to unset these flags. If several threads |
| 799 | * change the flags at the same time, the result is undefined. |
| 800 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 801 | * @param[in] flags The flags to change, bitwise OR'ed together |
| 802 | * @param[in] onoff A non-zero value sets the flags, zero clears them. |
| 803 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 804 | * errors are: |
| 805 | * <ul> |
| 806 | * <li>EINVAL - an invalid parameter was specified. |
| 807 | * </ul> |
| 808 | */ |
| 809 | int mdb_env_set_flags(MDB_env *env, unsigned int flags, int onoff); |
| 810 | |
| 811 | /** @brief Get environment flags. |
| 812 | * |
| 813 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 814 | * @param[out] flags The address of an integer to store the flags |
| 815 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 816 | * errors are: |
| 817 | * <ul> |
| 818 | * <li>EINVAL - an invalid parameter was specified. |
| 819 | * </ul> |
| 820 | */ |
| 821 | int mdb_env_get_flags(MDB_env *env, unsigned int *flags); |
| 822 | |
| 823 | /** @brief Return the path that was used in #mdb_env_open(). |
| 824 | * |
| 825 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 826 | * @param[out] path Address of a string pointer to contain the path. This |
| 827 | * is the actual string in the environment, not a copy. It should not be |
| 828 | * altered in any way. |
| 829 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 830 | * errors are: |
| 831 | * <ul> |
| 832 | * <li>EINVAL - an invalid parameter was specified. |
| 833 | * </ul> |
| 834 | */ |
| 835 | int mdb_env_get_path(MDB_env *env, const char **path); |
| 836 | |
| 837 | /** @brief Return the filedescriptor for the given environment. |
| 838 | * |
| 839 | * This function may be called after fork(), so the descriptor can be |
| 840 | * closed before exec*(). Other LMDB file descriptors have FD_CLOEXEC. |
| 841 | * (Until LMDB 0.9.18, only the lockfile had that.) |
| 842 | * |
| 843 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 844 | * @param[out] fd Address of a mdb_filehandle_t to contain the descriptor. |
| 845 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 846 | * errors are: |
| 847 | * <ul> |
| 848 | * <li>EINVAL - an invalid parameter was specified. |
| 849 | * </ul> |
| 850 | */ |
| 851 | int mdb_env_get_fd(MDB_env *env, mdb_filehandle_t *fd); |
| 852 | |
| 853 | /** @brief Set the size of the memory map to use for this environment. |
| 854 | * |
| 855 | * The size should be a multiple of the OS page size. The default is |
| 856 | * 10485760 bytes. The size of the memory map is also the maximum size |
| 857 | * of the database. The value should be chosen as large as possible, |
| 858 | * to accommodate future growth of the database. |
| 859 | * This function should be called after #mdb_env_create() and before #mdb_env_open(). |
| 860 | * It may be called at later times if no transactions are active in |
| 861 | * this process. Note that the library does not check for this condition, |
| 862 | * the caller must ensure it explicitly. |
| 863 | * |
| 864 | * The new size takes effect immediately for the current process but |
| 865 | * will not be persisted to any others until a write transaction has been |
| 866 | * committed by the current process. Also, only mapsize increases are |
| 867 | * persisted into the environment. |
| 868 | * |
| 869 | * If the mapsize is increased by another process, and data has grown |
| 870 | * beyond the range of the current mapsize, #mdb_txn_begin() will |
| 871 | * return #MDB_MAP_RESIZED. This function may be called with a size |
| 872 | * of zero to adopt the new size. |
| 873 | * |
| 874 | * Any attempt to set a size smaller than the space already consumed |
| 875 | * by the environment will be silently changed to the current size of the used space. |
| 876 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 877 | * @param[in] size The size in bytes |
| 878 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 879 | * errors are: |
| 880 | * <ul> |
| 881 | * <li>EINVAL - an invalid parameter was specified, or the environment has |
| 882 | * an active write transaction. |
| 883 | * </ul> |
| 884 | */ |
| 885 | int mdb_env_set_mapsize(MDB_env *env, mdb_size_t size); |
| 886 | |
| 887 | /** @brief Set the maximum number of threads/reader slots for the environment. |
| 888 | * |
| 889 | * This defines the number of slots in the lock table that is used to track readers in the |
| 890 | * the environment. The default is 126. |
| 891 | * Starting a read-only transaction normally ties a lock table slot to the |
| 892 | * current thread until the environment closes or the thread exits. If |
| 893 | * MDB_NOTLS is in use, #mdb_txn_begin() instead ties the slot to the |
| 894 | * MDB_txn object until it or the #MDB_env object is destroyed. |
| 895 | * This function may only be called after #mdb_env_create() and before #mdb_env_open(). |
| 896 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 897 | * @param[in] readers The maximum number of reader lock table slots |
| 898 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 899 | * errors are: |
| 900 | * <ul> |
| 901 | * <li>EINVAL - an invalid parameter was specified, or the environment is already open. |
| 902 | * </ul> |
| 903 | */ |
| 904 | int mdb_env_set_maxreaders(MDB_env *env, unsigned int readers); |
| 905 | |
| 906 | /** @brief Get the maximum number of threads/reader slots for the environment. |
| 907 | * |
| 908 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 909 | * @param[out] readers Address of an integer to store the number of readers |
| 910 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 911 | * errors are: |
| 912 | * <ul> |
| 913 | * <li>EINVAL - an invalid parameter was specified. |
| 914 | * </ul> |
| 915 | */ |
| 916 | int mdb_env_get_maxreaders(MDB_env *env, unsigned int *readers); |
| 917 | |
| 918 | /** @brief Set the maximum number of named databases for the environment. |
| 919 | * |
| 920 | * This function is only needed if multiple databases will be used in the |
| 921 | * environment. Simpler applications that use the environment as a single |
| 922 | * unnamed database can ignore this option. |
| 923 | * This function may only be called after #mdb_env_create() and before #mdb_env_open(). |
| 924 | * |
| 925 | * Currently a moderate number of slots are cheap but a huge number gets |
| 926 | * expensive: 7-120 words per transaction, and every #mdb_dbi_open() |
| 927 | * does a linear search of the opened slots. |
| 928 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 929 | * @param[in] dbs The maximum number of databases |
| 930 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 931 | * errors are: |
| 932 | * <ul> |
| 933 | * <li>EINVAL - an invalid parameter was specified, or the environment is already open. |
| 934 | * </ul> |
| 935 | */ |
| 936 | int mdb_env_set_maxdbs(MDB_env *env, MDB_dbi dbs); |
| 937 | |
| 938 | /** @brief Get the maximum size of keys and #MDB_DUPSORT data we can write. |
| 939 | * |
| 940 | * Depends on the compile-time constant #MDB_MAXKEYSIZE. Default 511. |
| 941 | * See @ref MDB_val. |
| 942 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 943 | * @return The maximum size of a key we can write |
| 944 | */ |
| 945 | int mdb_env_get_maxkeysize(MDB_env *env); |
| 946 | |
| 947 | /** @brief Set application information associated with the #MDB_env. |
| 948 | * |
| 949 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 950 | * @param[in] ctx An arbitrary pointer for whatever the application needs. |
| 951 | * @return A non-zero error value on failure and 0 on success. |
| 952 | */ |
| 953 | int mdb_env_set_userctx(MDB_env *env, void *ctx); |
| 954 | |
| 955 | /** @brief Get the application information associated with the #MDB_env. |
| 956 | * |
| 957 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 958 | * @return The pointer set by #mdb_env_set_userctx(). |
| 959 | */ |
| 960 | void *mdb_env_get_userctx(MDB_env *env); |
| 961 | |
| 962 | /** @brief A callback function for most LMDB assert() failures, |
| 963 | * called before printing the message and aborting. |
| 964 | * |
| 965 | * @param[in] env An environment handle returned by #mdb_env_create(). |
| 966 | * @param[in] msg The assertion message, not including newline. |
| 967 | */ |
| 968 | typedef void MDB_assert_func(MDB_env *env, const char *msg); |
| 969 | |
| 970 | /** Set or reset the assert() callback of the environment. |
| 971 | * Disabled if liblmdb is buillt with NDEBUG. |
| 972 | * @note This hack should become obsolete as lmdb's error handling matures. |
| 973 | * @param[in] env An environment handle returned by #mdb_env_create(). |
| 974 | * @param[in] func An #MDB_assert_func function, or 0. |
| 975 | * @return A non-zero error value on failure and 0 on success. |
| 976 | */ |
| 977 | int mdb_env_set_assert(MDB_env *env, MDB_assert_func *func); |
| 978 | |
| 979 | /** @brief Create a transaction for use with the environment. |
| 980 | * |
| 981 | * The transaction handle may be discarded using #mdb_txn_abort() or #mdb_txn_commit(). |
| 982 | * @note A transaction and its cursors must only be used by a single |
| 983 | * thread, and a thread may only have a single transaction at a time. |
| 984 | * If #MDB_NOTLS is in use, this does not apply to read-only transactions. |
| 985 | * @note Cursors may not span transactions. |
| 986 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 987 | * @param[in] parent If this parameter is non-NULL, the new transaction |
| 988 | * will be a nested transaction, with the transaction indicated by \b parent |
| 989 | * as its parent. Transactions may be nested to any level. A parent |
| 990 | * transaction and its cursors may not issue any other operations than |
| 991 | * mdb_txn_commit and mdb_txn_abort while it has active child transactions. |
| 992 | * @param[in] flags Special options for this transaction. This parameter |
| 993 | * must be set to 0 or by bitwise OR'ing together one or more of the |
| 994 | * values described here. |
| 995 | * <ul> |
| 996 | * <li>#MDB_RDONLY |
| 997 | * This transaction will not perform any write operations. |
| 998 | * <li>#MDB_NOSYNC |
| 999 | * Don't flush system buffers to disk when committing this transaction. |
| 1000 | * <li>#MDB_NOMETASYNC |
| 1001 | * Flush system buffers but omit metadata flush when committing this transaction. |
| 1002 | * </ul> |
| 1003 | * @param[out] txn Address where the new #MDB_txn handle will be stored |
| 1004 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1005 | * errors are: |
| 1006 | * <ul> |
| 1007 | * <li>#MDB_PANIC - a fatal error occurred earlier and the environment |
| 1008 | * must be shut down. |
| 1009 | * <li>#MDB_MAP_RESIZED - another process wrote data beyond this MDB_env's |
| 1010 | * mapsize and this environment's map must be resized as well. |
| 1011 | * See #mdb_env_set_mapsize(). |
| 1012 | * <li>#MDB_READERS_FULL - a read-only transaction was requested and |
| 1013 | * the reader lock table is full. See #mdb_env_set_maxreaders(). |
| 1014 | * <li>ENOMEM - out of memory. |
| 1015 | * </ul> |
| 1016 | */ |
| 1017 | int mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **txn); |
| 1018 | |
| 1019 | /** @brief Returns the transaction's #MDB_env |
| 1020 | * |
| 1021 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1022 | */ |
| 1023 | MDB_env *mdb_txn_env(MDB_txn *txn); |
| 1024 | |
| 1025 | /** @brief Return the transaction's ID. |
| 1026 | * |
| 1027 | * This returns the identifier associated with this transaction. For a |
| 1028 | * read-only transaction, this corresponds to the snapshot being read; |
| 1029 | * concurrent readers will frequently have the same transaction ID. |
| 1030 | * |
| 1031 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1032 | * @return A transaction ID, valid if input is an active transaction. |
| 1033 | */ |
| 1034 | mdb_size_t mdb_txn_id(MDB_txn *txn); |
| 1035 | |
| 1036 | /** @brief Commit all the operations of a transaction into the database. |
| 1037 | * |
| 1038 | * The transaction handle is freed. It and its cursors must not be used |
| 1039 | * again after this call, except with #mdb_cursor_renew(). |
| 1040 | * @note Earlier documentation incorrectly said all cursors would be freed. |
| 1041 | * Only write-transactions free cursors. |
| 1042 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1043 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1044 | * errors are: |
| 1045 | * <ul> |
| 1046 | * <li>EINVAL - an invalid parameter was specified. |
| 1047 | * <li>ENOSPC - no more disk space. |
| 1048 | * <li>EIO - a low-level I/O error occurred while writing. |
| 1049 | * <li>ENOMEM - out of memory. |
| 1050 | * </ul> |
| 1051 | */ |
| 1052 | int mdb_txn_commit(MDB_txn *txn); |
| 1053 | |
| 1054 | /** @brief Abandon all the operations of the transaction instead of saving them. |
| 1055 | * |
| 1056 | * The transaction handle is freed. It and its cursors must not be used |
| 1057 | * again after this call, except with #mdb_cursor_renew(). |
| 1058 | * @note Earlier documentation incorrectly said all cursors would be freed. |
| 1059 | * Only write-transactions free cursors. |
| 1060 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1061 | */ |
| 1062 | void mdb_txn_abort(MDB_txn *txn); |
| 1063 | |
| 1064 | /** @brief Reset a read-only transaction. |
| 1065 | * |
| 1066 | * Abort the transaction like #mdb_txn_abort(), but keep the transaction |
| 1067 | * handle. #mdb_txn_renew() may reuse the handle. This saves allocation |
| 1068 | * overhead if the process will start a new read-only transaction soon, |
| 1069 | * and also locking overhead if #MDB_NOTLS is in use. The reader table |
| 1070 | * lock is released, but the table slot stays tied to its thread or |
| 1071 | * #MDB_txn. Use mdb_txn_abort() to discard a reset handle, and to free |
| 1072 | * its lock table slot if MDB_NOTLS is in use. |
| 1073 | * Cursors opened within the transaction must not be used |
| 1074 | * again after this call, except with #mdb_cursor_renew(). |
| 1075 | * Reader locks generally don't interfere with writers, but they keep old |
| 1076 | * versions of database pages allocated. Thus they prevent the old pages |
| 1077 | * from being reused when writers commit new data, and so under heavy load |
| 1078 | * the database size may grow much more rapidly than otherwise. |
| 1079 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1080 | */ |
| 1081 | void mdb_txn_reset(MDB_txn *txn); |
| 1082 | |
| 1083 | /** @brief Renew a read-only transaction. |
| 1084 | * |
| 1085 | * This acquires a new reader lock for a transaction handle that had been |
| 1086 | * released by #mdb_txn_reset(). It must be called before a reset transaction |
| 1087 | * may be used again. |
| 1088 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1089 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1090 | * errors are: |
| 1091 | * <ul> |
| 1092 | * <li>#MDB_PANIC - a fatal error occurred earlier and the environment |
| 1093 | * must be shut down. |
| 1094 | * <li>EINVAL - an invalid parameter was specified. |
| 1095 | * </ul> |
| 1096 | */ |
| 1097 | int mdb_txn_renew(MDB_txn *txn); |
| 1098 | |
| 1099 | /** Compat with version <= 0.9.4, avoid clash with libmdb from MDB Tools project */ |
| 1100 | #define mdb_open(txn,name,flags,dbi) mdb_dbi_open(txn,name,flags,dbi) |
| 1101 | /** Compat with version <= 0.9.4, avoid clash with libmdb from MDB Tools project */ |
| 1102 | #define mdb_close(env,dbi) mdb_dbi_close(env,dbi) |
| 1103 | |
| 1104 | /** @brief Open a database in the environment. |
| 1105 | * |
| 1106 | * A database handle denotes the name and parameters of a database, |
| 1107 | * independently of whether such a database exists. |
| 1108 | * The database handle may be discarded by calling #mdb_dbi_close(). |
| 1109 | * The old database handle is returned if the database was already open. |
| 1110 | * The handle may only be closed once. |
| 1111 | * |
| 1112 | * The database handle will be private to the current transaction until |
| 1113 | * the transaction is successfully committed. If the transaction is |
| 1114 | * aborted the handle will be closed automatically. |
| 1115 | * After a successful commit the handle will reside in the shared |
| 1116 | * environment, and may be used by other transactions. |
| 1117 | * |
| 1118 | * This function must not be called from multiple concurrent |
| 1119 | * transactions in the same process. A transaction that uses |
| 1120 | * this function must finish (either commit or abort) before |
| 1121 | * any other transaction in the process may use this function. |
| 1122 | * |
| 1123 | * To use named databases (with name != NULL), #mdb_env_set_maxdbs() |
| 1124 | * must be called before opening the environment. Database names are |
| 1125 | * keys in the unnamed database, and may be read but not written. |
| 1126 | * |
| 1127 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1128 | * @param[in] name The name of the database to open. If only a single |
| 1129 | * database is needed in the environment, this value may be NULL. |
| 1130 | * @param[in] flags Special options for this database. This parameter |
| 1131 | * must be set to 0 or by bitwise OR'ing together one or more of the |
| 1132 | * values described here. |
| 1133 | * <ul> |
| 1134 | * <li>#MDB_REVERSEKEY |
| 1135 | * Keys are strings to be compared in reverse order, from the end |
| 1136 | * of the strings to the beginning. By default, Keys are treated as strings and |
| 1137 | * compared from beginning to end. |
| 1138 | * <li>#MDB_DUPSORT |
| 1139 | * Duplicate keys may be used in the database. (Or, from another perspective, |
| 1140 | * keys may have multiple data items, stored in sorted order.) By default |
| 1141 | * keys must be unique and may have only a single data item. |
| 1142 | * <li>#MDB_INTEGERKEY |
| 1143 | * Keys are binary integers in native byte order, either unsigned int |
| 1144 | * or #mdb_size_t, and will be sorted as such. |
| 1145 | * (lmdb expects 32-bit int <= size_t <= 32/64-bit mdb_size_t.) |
| 1146 | * The keys must all be of the same size. |
| 1147 | * <li>#MDB_DUPFIXED |
| 1148 | * This flag may only be used in combination with #MDB_DUPSORT. This option |
| 1149 | * tells the library that the data items for this database are all the same |
| 1150 | * size, which allows further optimizations in storage and retrieval. When |
| 1151 | * all data items are the same size, the #MDB_GET_MULTIPLE, #MDB_NEXT_MULTIPLE |
| 1152 | * and #MDB_PREV_MULTIPLE cursor operations may be used to retrieve multiple |
| 1153 | * items at once. |
| 1154 | * <li>#MDB_INTEGERDUP |
| 1155 | * This option specifies that duplicate data items are binary integers, |
| 1156 | * similar to #MDB_INTEGERKEY keys. |
| 1157 | * <li>#MDB_REVERSEDUP |
| 1158 | * This option specifies that duplicate data items should be compared as |
| 1159 | * strings in reverse order. |
| 1160 | * <li>#MDB_CREATE |
| 1161 | * Create the named database if it doesn't exist. This option is not |
| 1162 | * allowed in a read-only transaction or a read-only environment. |
| 1163 | * </ul> |
| 1164 | * @param[out] dbi Address where the new #MDB_dbi handle will be stored |
| 1165 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1166 | * errors are: |
| 1167 | * <ul> |
| 1168 | * <li>#MDB_NOTFOUND - the specified database doesn't exist in the environment |
| 1169 | * and #MDB_CREATE was not specified. |
| 1170 | * <li>#MDB_DBS_FULL - too many databases have been opened. See #mdb_env_set_maxdbs(). |
| 1171 | * </ul> |
| 1172 | */ |
| 1173 | int mdb_dbi_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi); |
| 1174 | |
| 1175 | /** @brief Retrieve statistics for a database. |
| 1176 | * |
| 1177 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1178 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1179 | * @param[out] stat The address of an #MDB_stat structure |
| 1180 | * where the statistics will be copied |
| 1181 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1182 | * errors are: |
| 1183 | * <ul> |
| 1184 | * <li>EINVAL - an invalid parameter was specified. |
| 1185 | * </ul> |
| 1186 | */ |
| 1187 | int mdb_stat(MDB_txn *txn, MDB_dbi dbi, MDB_stat *stat); |
| 1188 | |
| 1189 | /** @brief Retrieve the DB flags for a database handle. |
| 1190 | * |
| 1191 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1192 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1193 | * @param[out] flags Address where the flags will be returned. |
| 1194 | * @return A non-zero error value on failure and 0 on success. |
| 1195 | */ |
| 1196 | int mdb_dbi_flags(MDB_txn *txn, MDB_dbi dbi, unsigned int *flags); |
| 1197 | |
| 1198 | /** @brief Close a database handle. Normally unnecessary. Use with care: |
| 1199 | * |
| 1200 | * This call is not mutex protected. Handles should only be closed by |
| 1201 | * a single thread, and only if no other threads are going to reference |
| 1202 | * the database handle or one of its cursors any further. Do not close |
| 1203 | * a handle if an existing transaction has modified its database. |
| 1204 | * Doing so can cause misbehavior from database corruption to errors |
| 1205 | * like MDB_BAD_VALSIZE (since the DB name is gone). |
| 1206 | * |
| 1207 | * Closing a database handle is not necessary, but lets #mdb_dbi_open() |
| 1208 | * reuse the handle value. Usually it's better to set a bigger |
| 1209 | * #mdb_env_set_maxdbs(), unless that value would be large. |
| 1210 | * |
| 1211 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 1212 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1213 | */ |
| 1214 | void mdb_dbi_close(MDB_env *env, MDB_dbi dbi); |
| 1215 | |
| 1216 | /** @brief Empty or delete+close a database. |
| 1217 | * |
| 1218 | * See #mdb_dbi_close() for restrictions about closing the DB handle. |
| 1219 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1220 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1221 | * @param[in] del 0 to empty the DB, 1 to delete it from the |
| 1222 | * environment and close the DB handle. |
| 1223 | * @return A non-zero error value on failure and 0 on success. |
| 1224 | */ |
| 1225 | int mdb_drop(MDB_txn *txn, MDB_dbi dbi, int del); |
| 1226 | |
| 1227 | /** @brief Set a custom key comparison function for a database. |
| 1228 | * |
| 1229 | * The comparison function is called whenever it is necessary to compare a |
| 1230 | * key specified by the application with a key currently stored in the database. |
| 1231 | * If no comparison function is specified, and no special key flags were specified |
| 1232 | * with #mdb_dbi_open(), the keys are compared lexically, with shorter keys collating |
| 1233 | * before longer keys. |
| 1234 | * @warning This function must be called before any data access functions are used, |
| 1235 | * otherwise data corruption may occur. The same comparison function must be used by every |
| 1236 | * program accessing the database, every time the database is used. |
| 1237 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1238 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1239 | * @param[in] cmp A #MDB_cmp_func function |
| 1240 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1241 | * errors are: |
| 1242 | * <ul> |
| 1243 | * <li>EINVAL - an invalid parameter was specified. |
| 1244 | * </ul> |
| 1245 | */ |
| 1246 | int mdb_set_compare(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp); |
| 1247 | |
| 1248 | /** @brief Set a custom data comparison function for a #MDB_DUPSORT database. |
| 1249 | * |
| 1250 | * This comparison function is called whenever it is necessary to compare a data |
| 1251 | * item specified by the application with a data item currently stored in the database. |
| 1252 | * This function only takes effect if the database was opened with the #MDB_DUPSORT |
| 1253 | * flag. |
| 1254 | * If no comparison function is specified, and no special key flags were specified |
| 1255 | * with #mdb_dbi_open(), the data items are compared lexically, with shorter items collating |
| 1256 | * before longer items. |
| 1257 | * @warning This function must be called before any data access functions are used, |
| 1258 | * otherwise data corruption may occur. The same comparison function must be used by every |
| 1259 | * program accessing the database, every time the database is used. |
| 1260 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1261 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1262 | * @param[in] cmp A #MDB_cmp_func function |
| 1263 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1264 | * errors are: |
| 1265 | * <ul> |
| 1266 | * <li>EINVAL - an invalid parameter was specified. |
| 1267 | * </ul> |
| 1268 | */ |
| 1269 | int mdb_set_dupsort(MDB_txn *txn, MDB_dbi dbi, MDB_cmp_func *cmp); |
| 1270 | |
| 1271 | /** @brief Set a relocation function for a #MDB_FIXEDMAP database. |
| 1272 | * |
| 1273 | * @todo The relocation function is called whenever it is necessary to move the data |
| 1274 | * of an item to a different position in the database (e.g. through tree |
| 1275 | * balancing operations, shifts as a result of adds or deletes, etc.). It is |
| 1276 | * intended to allow address/position-dependent data items to be stored in |
| 1277 | * a database in an environment opened with the #MDB_FIXEDMAP option. |
| 1278 | * Currently the relocation feature is unimplemented and setting |
| 1279 | * this function has no effect. |
| 1280 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1281 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1282 | * @param[in] rel A #MDB_rel_func function |
| 1283 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1284 | * errors are: |
| 1285 | * <ul> |
| 1286 | * <li>EINVAL - an invalid parameter was specified. |
| 1287 | * </ul> |
| 1288 | */ |
| 1289 | int mdb_set_relfunc(MDB_txn *txn, MDB_dbi dbi, MDB_rel_func *rel); |
| 1290 | |
| 1291 | /** @brief Set a context pointer for a #MDB_FIXEDMAP database's relocation function. |
| 1292 | * |
| 1293 | * See #mdb_set_relfunc and #MDB_rel_func for more details. |
| 1294 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1295 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1296 | * @param[in] ctx An arbitrary pointer for whatever the application needs. |
| 1297 | * It will be passed to the callback function set by #mdb_set_relfunc |
| 1298 | * as its \b relctx parameter whenever the callback is invoked. |
| 1299 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1300 | * errors are: |
| 1301 | * <ul> |
| 1302 | * <li>EINVAL - an invalid parameter was specified. |
| 1303 | * </ul> |
| 1304 | */ |
| 1305 | int mdb_set_relctx(MDB_txn *txn, MDB_dbi dbi, void *ctx); |
| 1306 | |
| 1307 | /** @brief Get items from a database. |
| 1308 | * |
| 1309 | * This function retrieves key/data pairs from the database. The address |
| 1310 | * and length of the data associated with the specified \b key are returned |
| 1311 | * in the structure to which \b data refers. |
| 1312 | * If the database supports duplicate keys (#MDB_DUPSORT) then the |
| 1313 | * first data item for the key will be returned. Retrieval of other |
| 1314 | * items requires the use of #mdb_cursor_get(). |
| 1315 | * |
| 1316 | * @note The memory pointed to by the returned values is owned by the |
| 1317 | * database. The caller need not dispose of the memory, and may not |
| 1318 | * modify it in any way. For values returned in a read-only transaction |
| 1319 | * any modification attempts will cause a SIGSEGV. |
| 1320 | * @note Values returned from the database are valid only until a |
| 1321 | * subsequent update operation, or the end of the transaction. |
| 1322 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1323 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1324 | * @param[in] key The key to search for in the database |
| 1325 | * @param[out] data The data corresponding to the key |
| 1326 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1327 | * errors are: |
| 1328 | * <ul> |
| 1329 | * <li>#MDB_NOTFOUND - the key was not in the database. |
| 1330 | * <li>EINVAL - an invalid parameter was specified. |
| 1331 | * </ul> |
| 1332 | */ |
| 1333 | int mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data); |
| 1334 | |
| 1335 | /** @brief Store items into a database. |
| 1336 | * |
| 1337 | * This function stores key/data pairs in the database. The default behavior |
| 1338 | * is to enter the new key/data pair, replacing any previously existing key |
| 1339 | * if duplicates are disallowed, or adding a duplicate data item if |
| 1340 | * duplicates are allowed (#MDB_DUPSORT). |
| 1341 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1342 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1343 | * @param[in] key The key to store in the database |
| 1344 | * @param[in,out] data The data to store |
| 1345 | * @param[in] flags Special options for this operation. This parameter |
| 1346 | * must be set to 0 or by bitwise OR'ing together one or more of the |
| 1347 | * values described here. |
| 1348 | * <ul> |
| 1349 | * <li>#MDB_NODUPDATA - enter the new key/data pair only if it does not |
| 1350 | * already appear in the database. This flag may only be specified |
| 1351 | * if the database was opened with #MDB_DUPSORT. The function will |
| 1352 | * return #MDB_KEYEXIST if the key/data pair already appears in the |
| 1353 | * database. |
| 1354 | * <li>#MDB_NOOVERWRITE - enter the new key/data pair only if the key |
| 1355 | * does not already appear in the database. The function will return |
| 1356 | * #MDB_KEYEXIST if the key already appears in the database, even if |
| 1357 | * the database supports duplicates (#MDB_DUPSORT). The \b data |
| 1358 | * parameter will be set to point to the existing item. |
| 1359 | * <li>#MDB_RESERVE - reserve space for data of the given size, but |
| 1360 | * don't copy the given data. Instead, return a pointer to the |
| 1361 | * reserved space, which the caller can fill in later - before |
| 1362 | * the next update operation or the transaction ends. This saves |
| 1363 | * an extra memcpy if the data is being generated later. |
| 1364 | * LMDB does nothing else with this memory, the caller is expected |
| 1365 | * to modify all of the space requested. This flag must not be |
| 1366 | * specified if the database was opened with #MDB_DUPSORT. |
| 1367 | * <li>#MDB_APPEND - append the given key/data pair to the end of the |
| 1368 | * database. This option allows fast bulk loading when keys are |
| 1369 | * already known to be in the correct order. Loading unsorted keys |
| 1370 | * with this flag will cause a #MDB_KEYEXIST error. |
| 1371 | * <li>#MDB_APPENDDUP - as above, but for sorted dup data. |
| 1372 | * </ul> |
| 1373 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1374 | * errors are: |
| 1375 | * <ul> |
| 1376 | * <li>#MDB_MAP_FULL - the database is full, see #mdb_env_set_mapsize(). |
| 1377 | * <li>#MDB_TXN_FULL - the transaction has too many dirty pages. |
| 1378 | * <li>EACCES - an attempt was made to write in a read-only transaction. |
| 1379 | * <li>EINVAL - an invalid parameter was specified. |
| 1380 | * </ul> |
| 1381 | */ |
| 1382 | int mdb_put(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data, |
| 1383 | unsigned int flags); |
| 1384 | |
| 1385 | /** @brief Delete items from a database. |
| 1386 | * |
| 1387 | * This function removes key/data pairs from the database. |
| 1388 | * If the database does not support sorted duplicate data items |
| 1389 | * (#MDB_DUPSORT) the data parameter is ignored. |
| 1390 | * If the database supports sorted duplicates and the data parameter |
| 1391 | * is NULL, all of the duplicate data items for the key will be |
| 1392 | * deleted. Otherwise, if the data parameter is non-NULL |
| 1393 | * only the matching data item will be deleted. |
| 1394 | * This function will return #MDB_NOTFOUND if the specified key/data |
| 1395 | * pair is not in the database. |
| 1396 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1397 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1398 | * @param[in] key The key to delete from the database |
| 1399 | * @param[in] data The data to delete |
| 1400 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1401 | * errors are: |
| 1402 | * <ul> |
| 1403 | * <li>EACCES - an attempt was made to write in a read-only transaction. |
| 1404 | * <li>EINVAL - an invalid parameter was specified. |
| 1405 | * </ul> |
| 1406 | */ |
| 1407 | int mdb_del(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data); |
| 1408 | |
| 1409 | /** @brief Create a cursor handle. |
| 1410 | * |
| 1411 | * A cursor is associated with a specific transaction and database. |
| 1412 | * A cursor cannot be used when its database handle is closed. Nor |
| 1413 | * when its transaction has ended, except with #mdb_cursor_renew(). |
| 1414 | * It can be discarded with #mdb_cursor_close(). |
| 1415 | * A cursor in a write-transaction can be closed before its transaction |
| 1416 | * ends, and will otherwise be closed when its transaction ends. |
| 1417 | * A cursor in a read-only transaction must be closed explicitly, before |
| 1418 | * or after its transaction ends. It can be reused with |
| 1419 | * #mdb_cursor_renew() before finally closing it. |
| 1420 | * @note Earlier documentation said that cursors in every transaction |
| 1421 | * were closed when the transaction committed or aborted. |
| 1422 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1423 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1424 | * @param[out] cursor Address where the new #MDB_cursor handle will be stored |
| 1425 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1426 | * errors are: |
| 1427 | * <ul> |
| 1428 | * <li>EINVAL - an invalid parameter was specified. |
| 1429 | * </ul> |
| 1430 | */ |
| 1431 | int mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **cursor); |
| 1432 | |
| 1433 | /** @brief Close a cursor handle. |
| 1434 | * |
| 1435 | * The cursor handle will be freed and must not be used again after this call. |
| 1436 | * Its transaction must still be live if it is a write-transaction. |
| 1437 | * @param[in] cursor A cursor handle returned by #mdb_cursor_open() |
| 1438 | */ |
| 1439 | void mdb_cursor_close(MDB_cursor *cursor); |
| 1440 | |
| 1441 | /** @brief Renew a cursor handle. |
| 1442 | * |
| 1443 | * A cursor is associated with a specific transaction and database. |
| 1444 | * Cursors that are only used in read-only |
| 1445 | * transactions may be re-used, to avoid unnecessary malloc/free overhead. |
| 1446 | * The cursor may be associated with a new read-only transaction, and |
| 1447 | * referencing the same database handle as it was created with. |
| 1448 | * This may be done whether the previous transaction is live or dead. |
| 1449 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1450 | * @param[in] cursor A cursor handle returned by #mdb_cursor_open() |
| 1451 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1452 | * errors are: |
| 1453 | * <ul> |
| 1454 | * <li>EINVAL - an invalid parameter was specified. |
| 1455 | * </ul> |
| 1456 | */ |
| 1457 | int mdb_cursor_renew(MDB_txn *txn, MDB_cursor *cursor); |
| 1458 | |
| 1459 | /** @brief Return the cursor's transaction handle. |
| 1460 | * |
| 1461 | * @param[in] cursor A cursor handle returned by #mdb_cursor_open() |
| 1462 | */ |
| 1463 | MDB_txn *mdb_cursor_txn(MDB_cursor *cursor); |
| 1464 | |
| 1465 | /** @brief Return the cursor's database handle. |
| 1466 | * |
| 1467 | * @param[in] cursor A cursor handle returned by #mdb_cursor_open() |
| 1468 | */ |
| 1469 | MDB_dbi mdb_cursor_dbi(MDB_cursor *cursor); |
| 1470 | |
| 1471 | /** @brief Retrieve by cursor. |
| 1472 | * |
| 1473 | * This function retrieves key/data pairs from the database. The address and length |
| 1474 | * of the key are returned in the object to which \b key refers (except for the |
| 1475 | * case of the #MDB_SET option, in which the \b key object is unchanged), and |
| 1476 | * the address and length of the data are returned in the object to which \b data |
| 1477 | * refers. |
| 1478 | * See #mdb_get() for restrictions on using the output values. |
| 1479 | * @param[in] cursor A cursor handle returned by #mdb_cursor_open() |
| 1480 | * @param[in,out] key The key for a retrieved item |
| 1481 | * @param[in,out] data The data of a retrieved item |
| 1482 | * @param[in] op A cursor operation #MDB_cursor_op |
| 1483 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1484 | * errors are: |
| 1485 | * <ul> |
| 1486 | * <li>#MDB_NOTFOUND - no matching key found. |
| 1487 | * <li>EINVAL - an invalid parameter was specified. |
| 1488 | * </ul> |
| 1489 | */ |
| 1490 | int mdb_cursor_get(MDB_cursor *cursor, MDB_val *key, MDB_val *data, |
| 1491 | MDB_cursor_op op); |
| 1492 | |
| 1493 | /** @brief Store by cursor. |
| 1494 | * |
| 1495 | * This function stores key/data pairs into the database. |
| 1496 | * The cursor is positioned at the new item, or on failure usually near it. |
| 1497 | * @note Earlier documentation incorrectly said errors would leave the |
| 1498 | * state of the cursor unchanged. |
| 1499 | * @param[in] cursor A cursor handle returned by #mdb_cursor_open() |
| 1500 | * @param[in] key The key operated on. |
| 1501 | * @param[in] data The data operated on. |
| 1502 | * @param[in] flags Options for this operation. This parameter |
| 1503 | * must be set to 0 or one of the values described here. |
| 1504 | * <ul> |
| 1505 | * <li>#MDB_CURRENT - replace the item at the current cursor position. |
| 1506 | * The \b key parameter must still be provided, and must match it. |
| 1507 | * If using sorted duplicates (#MDB_DUPSORT) the data item must still |
| 1508 | * sort into the same place. This is intended to be used when the |
| 1509 | * new data is the same size as the old. Otherwise it will simply |
| 1510 | * perform a delete of the old record followed by an insert. |
| 1511 | * <li>#MDB_NODUPDATA - enter the new key/data pair only if it does not |
| 1512 | * already appear in the database. This flag may only be specified |
| 1513 | * if the database was opened with #MDB_DUPSORT. The function will |
| 1514 | * return #MDB_KEYEXIST if the key/data pair already appears in the |
| 1515 | * database. |
| 1516 | * <li>#MDB_NOOVERWRITE - enter the new key/data pair only if the key |
| 1517 | * does not already appear in the database. The function will return |
| 1518 | * #MDB_KEYEXIST if the key already appears in the database, even if |
| 1519 | * the database supports duplicates (#MDB_DUPSORT). |
| 1520 | * <li>#MDB_RESERVE - reserve space for data of the given size, but |
| 1521 | * don't copy the given data. Instead, return a pointer to the |
| 1522 | * reserved space, which the caller can fill in later - before |
| 1523 | * the next update operation or the transaction ends. This saves |
| 1524 | * an extra memcpy if the data is being generated later. This flag |
| 1525 | * must not be specified if the database was opened with #MDB_DUPSORT. |
| 1526 | * <li>#MDB_APPEND - append the given key/data pair to the end of the |
| 1527 | * database. No key comparisons are performed. This option allows |
| 1528 | * fast bulk loading when keys are already known to be in the |
| 1529 | * correct order. Loading unsorted keys with this flag will cause |
| 1530 | * a #MDB_KEYEXIST error. |
| 1531 | * <li>#MDB_APPENDDUP - as above, but for sorted dup data. |
| 1532 | * <li>#MDB_MULTIPLE - store multiple contiguous data elements in a |
| 1533 | * single request. This flag may only be specified if the database |
| 1534 | * was opened with #MDB_DUPFIXED. The \b data argument must be an |
| 1535 | * array of two MDB_vals. The mv_size of the first MDB_val must be |
| 1536 | * the size of a single data element. The mv_data of the first MDB_val |
| 1537 | * must point to the beginning of the array of contiguous data elements. |
| 1538 | * The mv_size of the second MDB_val must be the count of the number |
| 1539 | * of data elements to store. On return this field will be set to |
| 1540 | * the count of the number of elements actually written. The mv_data |
| 1541 | * of the second MDB_val is unused. |
| 1542 | * </ul> |
| 1543 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1544 | * errors are: |
| 1545 | * <ul> |
| 1546 | * <li>#MDB_MAP_FULL - the database is full, see #mdb_env_set_mapsize(). |
| 1547 | * <li>#MDB_TXN_FULL - the transaction has too many dirty pages. |
| 1548 | * <li>EACCES - an attempt was made to write in a read-only transaction. |
| 1549 | * <li>EINVAL - an invalid parameter was specified. |
| 1550 | * </ul> |
| 1551 | */ |
| 1552 | int mdb_cursor_put(MDB_cursor *cursor, MDB_val *key, MDB_val *data, |
| 1553 | unsigned int flags); |
| 1554 | |
| 1555 | /** @brief Delete current key/data pair |
| 1556 | * |
| 1557 | * This function deletes the key/data pair to which the cursor refers. |
| 1558 | * This does not invalidate the cursor, so operations such as MDB_NEXT |
| 1559 | * can still be used on it. |
| 1560 | * Both MDB_NEXT and MDB_GET_CURRENT will return the same record after |
| 1561 | * this operation. |
| 1562 | * @param[in] cursor A cursor handle returned by #mdb_cursor_open() |
| 1563 | * @param[in] flags Options for this operation. This parameter |
| 1564 | * must be set to 0 or one of the values described here. |
| 1565 | * <ul> |
| 1566 | * <li>#MDB_NODUPDATA - delete all of the data items for the current key. |
| 1567 | * This flag may only be specified if the database was opened with #MDB_DUPSORT. |
| 1568 | * </ul> |
| 1569 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1570 | * errors are: |
| 1571 | * <ul> |
| 1572 | * <li>EACCES - an attempt was made to write in a read-only transaction. |
| 1573 | * <li>EINVAL - an invalid parameter was specified. |
| 1574 | * </ul> |
| 1575 | */ |
| 1576 | int mdb_cursor_del(MDB_cursor *cursor, unsigned int flags); |
| 1577 | |
| 1578 | /** @brief Return count of duplicates for current key. |
| 1579 | * |
| 1580 | * This call is only valid on databases that support sorted duplicate |
| 1581 | * data items #MDB_DUPSORT. |
| 1582 | * @param[in] cursor A cursor handle returned by #mdb_cursor_open() |
| 1583 | * @param[out] countp Address where the count will be stored |
| 1584 | * @return A non-zero error value on failure and 0 on success. Some possible |
| 1585 | * errors are: |
| 1586 | * <ul> |
| 1587 | * <li>EINVAL - cursor is not initialized, or an invalid parameter was specified. |
| 1588 | * </ul> |
| 1589 | */ |
| 1590 | int mdb_cursor_count(MDB_cursor *cursor, mdb_size_t *countp); |
| 1591 | |
| 1592 | /** @brief Compare two data items according to a particular database. |
| 1593 | * |
| 1594 | * This returns a comparison as if the two data items were keys in the |
| 1595 | * specified database. |
| 1596 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1597 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1598 | * @param[in] a The first item to compare |
| 1599 | * @param[in] b The second item to compare |
| 1600 | * @return < 0 if a < b, 0 if a == b, > 0 if a > b |
| 1601 | */ |
| 1602 | int mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b); |
| 1603 | |
| 1604 | /** @brief Compare two data items according to a particular database. |
| 1605 | * |
| 1606 | * This returns a comparison as if the two items were data items of |
| 1607 | * the specified database. The database must have the #MDB_DUPSORT flag. |
| 1608 | * @param[in] txn A transaction handle returned by #mdb_txn_begin() |
| 1609 | * @param[in] dbi A database handle returned by #mdb_dbi_open() |
| 1610 | * @param[in] a The first item to compare |
| 1611 | * @param[in] b The second item to compare |
| 1612 | * @return < 0 if a < b, 0 if a == b, > 0 if a > b |
| 1613 | */ |
| 1614 | int mdb_dcmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b); |
| 1615 | |
| 1616 | /** @brief A callback function used to print a message from the library. |
| 1617 | * |
| 1618 | * @param[in] msg The string to be printed. |
| 1619 | * @param[in] ctx An arbitrary context pointer for the callback. |
| 1620 | * @return < 0 on failure, >= 0 on success. |
| 1621 | */ |
| 1622 | typedef int (MDB_msg_func)(const char *msg, void *ctx); |
| 1623 | |
| 1624 | /** @brief Dump the entries in the reader lock table. |
| 1625 | * |
| 1626 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 1627 | * @param[in] func A #MDB_msg_func function |
| 1628 | * @param[in] ctx Anything the message function needs |
| 1629 | * @return < 0 on failure, >= 0 on success. |
| 1630 | */ |
| 1631 | int mdb_reader_list(MDB_env *env, MDB_msg_func *func, void *ctx); |
| 1632 | |
| 1633 | /** @brief Check for stale entries in the reader lock table. |
| 1634 | * |
| 1635 | * @param[in] env An environment handle returned by #mdb_env_create() |
| 1636 | * @param[out] dead Number of stale slots that were cleared |
| 1637 | * @return 0 on success, non-zero on failure. |
| 1638 | */ |
| 1639 | int mdb_reader_check(MDB_env *env, int *dead); |
| 1640 | /** @} */ |
| 1641 | |
| 1642 | #ifdef __cplusplus |
| 1643 | } |
| 1644 | #endif |
| 1645 | /** @page tools LMDB Command Line Tools |
| 1646 | The following describes the command line tools that are available for LMDB. |
| 1647 | \li \ref mdb_copy_1 |
| 1648 | \li \ref mdb_dump_1 |
| 1649 | \li \ref mdb_load_1 |
| 1650 | \li \ref mdb_stat_1 |
| 1651 | */ |
| 1652 | |
| 1653 | #endif /* _LMDB_H_ */ |
| 1654 | |