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 | |