mdbxmou 0.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +32 -0
- package/.github/workflows/publish.yml +27 -0
- package/.gitmodules +3 -0
- package/CMakeLists.txt +53 -0
- package/LICENSE +201 -0
- package/README.md +639 -0
- package/build.js +11 -0
- package/deps/libmdbx/.clang-format +3 -0
- package/deps/libmdbx/.cmake-format.yaml +3 -0
- package/deps/libmdbx/.le.ini +40 -0
- package/deps/libmdbx/CMakeLists.txt +1269 -0
- package/deps/libmdbx/COPYRIGHT +159 -0
- package/deps/libmdbx/ChangeLog.md +2786 -0
- package/deps/libmdbx/GNUmakefile +950 -0
- package/deps/libmdbx/LICENSE +177 -0
- package/deps/libmdbx/Makefile +16 -0
- package/deps/libmdbx/NOTICE +39 -0
- package/deps/libmdbx/README.md +863 -0
- package/deps/libmdbx/TODO.md +43 -0
- package/deps/libmdbx/cmake/compiler.cmake +1221 -0
- package/deps/libmdbx/cmake/profile.cmake +58 -0
- package/deps/libmdbx/cmake/utils.cmake +524 -0
- package/deps/libmdbx/conanfile.py +323 -0
- package/deps/libmdbx/docs/Doxyfile.in +2734 -0
- package/deps/libmdbx/docs/_preface.md +47 -0
- package/deps/libmdbx/docs/_restrictions.md +248 -0
- package/deps/libmdbx/docs/_starting.md +245 -0
- package/deps/libmdbx/docs/_toc.md +34 -0
- package/deps/libmdbx/docs/header.html +96 -0
- package/deps/libmdbx/example/CMakeLists.txt +6 -0
- package/deps/libmdbx/example/README.md +1 -0
- package/deps/libmdbx/example/example-mdbx.c +154 -0
- package/deps/libmdbx/example/sample-bdb.txt +77 -0
- package/deps/libmdbx/mdbx.h +6655 -0
- package/deps/libmdbx/mdbx.h++ +6428 -0
- package/deps/libmdbx/packages/buildroot/0001-package-libmdbx-new-package-library-database.patch +173 -0
- package/deps/libmdbx/src/alloy.c +54 -0
- package/deps/libmdbx/src/api-cold.c +543 -0
- package/deps/libmdbx/src/api-copy.c +912 -0
- package/deps/libmdbx/src/api-cursor.c +754 -0
- package/deps/libmdbx/src/api-dbi.c +315 -0
- package/deps/libmdbx/src/api-env.c +1434 -0
- package/deps/libmdbx/src/api-extra.c +165 -0
- package/deps/libmdbx/src/api-key-transform.c +197 -0
- package/deps/libmdbx/src/api-misc.c +286 -0
- package/deps/libmdbx/src/api-opts.c +575 -0
- package/deps/libmdbx/src/api-range-estimate.c +365 -0
- package/deps/libmdbx/src/api-txn-data.c +454 -0
- package/deps/libmdbx/src/api-txn.c +921 -0
- package/deps/libmdbx/src/atomics-ops.h +364 -0
- package/deps/libmdbx/src/atomics-types.h +97 -0
- package/deps/libmdbx/src/audit.c +109 -0
- package/deps/libmdbx/src/bits.md +34 -0
- package/deps/libmdbx/src/chk.c +1796 -0
- package/deps/libmdbx/src/cogs.c +309 -0
- package/deps/libmdbx/src/cogs.h +506 -0
- package/deps/libmdbx/src/coherency.c +170 -0
- package/deps/libmdbx/src/config.h.in +88 -0
- package/deps/libmdbx/src/cursor.c +2396 -0
- package/deps/libmdbx/src/cursor.h +391 -0
- package/deps/libmdbx/src/dbi.c +717 -0
- package/deps/libmdbx/src/dbi.h +142 -0
- package/deps/libmdbx/src/debug_begin.h +36 -0
- package/deps/libmdbx/src/debug_end.h +15 -0
- package/deps/libmdbx/src/dpl.c +486 -0
- package/deps/libmdbx/src/dpl.h +134 -0
- package/deps/libmdbx/src/dxb.c +1335 -0
- package/deps/libmdbx/src/env.c +607 -0
- package/deps/libmdbx/src/essentials.h +125 -0
- package/deps/libmdbx/src/gc-get.c +1345 -0
- package/deps/libmdbx/src/gc-put.c +970 -0
- package/deps/libmdbx/src/gc.h +40 -0
- package/deps/libmdbx/src/global.c +474 -0
- package/deps/libmdbx/src/internals.h +585 -0
- package/deps/libmdbx/src/layout-dxb.h +288 -0
- package/deps/libmdbx/src/layout-lck.h +289 -0
- package/deps/libmdbx/src/lck-posix.c +859 -0
- package/deps/libmdbx/src/lck-windows.c +607 -0
- package/deps/libmdbx/src/lck.c +174 -0
- package/deps/libmdbx/src/lck.h +110 -0
- package/deps/libmdbx/src/logging_and_debug.c +250 -0
- package/deps/libmdbx/src/logging_and_debug.h +159 -0
- package/deps/libmdbx/src/man1/mdbx_chk.1 +106 -0
- package/deps/libmdbx/src/man1/mdbx_copy.1 +95 -0
- package/deps/libmdbx/src/man1/mdbx_drop.1 +48 -0
- package/deps/libmdbx/src/man1/mdbx_dump.1 +101 -0
- package/deps/libmdbx/src/man1/mdbx_load.1 +105 -0
- package/deps/libmdbx/src/man1/mdbx_stat.1 +86 -0
- package/deps/libmdbx/src/mdbx.c++ +1837 -0
- package/deps/libmdbx/src/meta.c +656 -0
- package/deps/libmdbx/src/meta.h +168 -0
- package/deps/libmdbx/src/mvcc-readers.c +414 -0
- package/deps/libmdbx/src/node.c +365 -0
- package/deps/libmdbx/src/node.h +102 -0
- package/deps/libmdbx/src/ntdll.def +1246 -0
- package/deps/libmdbx/src/options.h +534 -0
- package/deps/libmdbx/src/osal.c +3485 -0
- package/deps/libmdbx/src/osal.h +587 -0
- package/deps/libmdbx/src/page-get.c +483 -0
- package/deps/libmdbx/src/page-iov.c +185 -0
- package/deps/libmdbx/src/page-iov.h +34 -0
- package/deps/libmdbx/src/page-ops.c +744 -0
- package/deps/libmdbx/src/page-ops.h +142 -0
- package/deps/libmdbx/src/pnl.c +236 -0
- package/deps/libmdbx/src/pnl.h +146 -0
- package/deps/libmdbx/src/preface.h +990 -0
- package/deps/libmdbx/src/proto.h +105 -0
- package/deps/libmdbx/src/refund.c +212 -0
- package/deps/libmdbx/src/sort.h +484 -0
- package/deps/libmdbx/src/spill.c +431 -0
- package/deps/libmdbx/src/spill.h +74 -0
- package/deps/libmdbx/src/table.c +107 -0
- package/deps/libmdbx/src/tls.c +551 -0
- package/deps/libmdbx/src/tls.h +43 -0
- package/deps/libmdbx/src/tools/chk.c +673 -0
- package/deps/libmdbx/src/tools/copy.c +166 -0
- package/deps/libmdbx/src/tools/drop.c +199 -0
- package/deps/libmdbx/src/tools/dump.c +515 -0
- package/deps/libmdbx/src/tools/load.c +831 -0
- package/deps/libmdbx/src/tools/stat.c +516 -0
- package/deps/libmdbx/src/tools/wingetopt.c +87 -0
- package/deps/libmdbx/src/tools/wingetopt.h +30 -0
- package/deps/libmdbx/src/tree-ops.c +1554 -0
- package/deps/libmdbx/src/tree-search.c +140 -0
- package/deps/libmdbx/src/txl.c +99 -0
- package/deps/libmdbx/src/txl.h +26 -0
- package/deps/libmdbx/src/txn.c +1083 -0
- package/deps/libmdbx/src/unaligned.h +205 -0
- package/deps/libmdbx/src/utils.c +32 -0
- package/deps/libmdbx/src/utils.h +76 -0
- package/deps/libmdbx/src/version.c.in +44 -0
- package/deps/libmdbx/src/walk.c +290 -0
- package/deps/libmdbx/src/walk.h +20 -0
- package/deps/libmdbx/src/windows-import.c +152 -0
- package/deps/libmdbx/src/windows-import.h +128 -0
- package/deps/libmdbx/test/CMakeLists.txt +317 -0
- package/deps/libmdbx/test/append.c++ +237 -0
- package/deps/libmdbx/test/base.h++ +92 -0
- package/deps/libmdbx/test/battery-tmux.sh +64 -0
- package/deps/libmdbx/test/cases.c++ +118 -0
- package/deps/libmdbx/test/chrono.c++ +134 -0
- package/deps/libmdbx/test/chrono.h++ +85 -0
- package/deps/libmdbx/test/config.c++ +643 -0
- package/deps/libmdbx/test/config.h++ +334 -0
- package/deps/libmdbx/test/copy.c++ +62 -0
- package/deps/libmdbx/test/dead.c++ +39 -0
- package/deps/libmdbx/test/dump-load.sh +40 -0
- package/deps/libmdbx/test/extra/crunched_delete.c++ +409 -0
- package/deps/libmdbx/test/extra/cursor_closing.c++ +410 -0
- package/deps/libmdbx/test/extra/dbi.c++ +229 -0
- package/deps/libmdbx/test/extra/doubtless_positioning.c++ +253 -0
- package/deps/libmdbx/test/extra/dupfix_addodd.c +94 -0
- package/deps/libmdbx/test/extra/dupfix_multiple.c++ +311 -0
- package/deps/libmdbx/test/extra/early_close_dbi.c++ +137 -0
- package/deps/libmdbx/test/extra/hex_base64_base58.c++ +118 -0
- package/deps/libmdbx/test/extra/maindb_ordinal.c++ +61 -0
- package/deps/libmdbx/test/extra/open.c++ +96 -0
- package/deps/libmdbx/test/extra/pcrf/README.md +2 -0
- package/deps/libmdbx/test/extra/pcrf/pcrf_test.c +380 -0
- package/deps/libmdbx/test/extra/probe.c++ +10 -0
- package/deps/libmdbx/test/extra/txn.c++ +407 -0
- package/deps/libmdbx/test/extra/upsert_alldups.c +193 -0
- package/deps/libmdbx/test/fork.c++ +263 -0
- package/deps/libmdbx/test/hill.c++ +447 -0
- package/deps/libmdbx/test/jitter.c++ +197 -0
- package/deps/libmdbx/test/keygen.c++ +393 -0
- package/deps/libmdbx/test/keygen.h++ +130 -0
- package/deps/libmdbx/test/log.c++ +358 -0
- package/deps/libmdbx/test/log.h++ +91 -0
- package/deps/libmdbx/test/main.c++ +706 -0
- package/deps/libmdbx/test/nested.c++ +318 -0
- package/deps/libmdbx/test/osal-unix.c++ +647 -0
- package/deps/libmdbx/test/osal-windows.c++ +440 -0
- package/deps/libmdbx/test/osal.h++ +41 -0
- package/deps/libmdbx/test/stochastic.sh +690 -0
- package/deps/libmdbx/test/stub/LICENSE +24 -0
- package/deps/libmdbx/test/stub/README.md +8 -0
- package/deps/libmdbx/test/stub/pthread_barrier.c +104 -0
- package/deps/libmdbx/test/stub/pthread_barrier.h +77 -0
- package/deps/libmdbx/test/test.c++ +1551 -0
- package/deps/libmdbx/test/test.h++ +298 -0
- package/deps/libmdbx/test/tmux.conf +3 -0
- package/deps/libmdbx/test/try.c++ +30 -0
- package/deps/libmdbx/test/ttl.c++ +240 -0
- package/deps/libmdbx/test/utils.c++ +203 -0
- package/deps/libmdbx/test/utils.h++ +326 -0
- package/deps/libmdbx/test/valgrind_suppress.txt +536 -0
- package/lib/mdbx_evn_async.js +211 -0
- package/lib/mdbx_worker.js +195 -0
- package/lib/nativemou.js +6 -0
- package/package.json +38 -0
- package/src/async/envmou_close.cpp +34 -0
- package/src/async/envmou_close.hpp +32 -0
- package/src/async/envmou_copy_to.cpp +29 -0
- package/src/async/envmou_copy_to.hpp +38 -0
- package/src/async/envmou_keys.cpp +201 -0
- package/src/async/envmou_keys.hpp +50 -0
- package/src/async/envmou_open.cpp +38 -0
- package/src/async/envmou_open.hpp +33 -0
- package/src/async/envmou_query.cpp +167 -0
- package/src/async/envmou_query.hpp +53 -0
- package/src/dbimou.cpp +522 -0
- package/src/dbimou.hpp +82 -0
- package/src/env_arg0.hpp +24 -0
- package/src/envmou.cpp +445 -0
- package/src/envmou.hpp +116 -0
- package/src/modulemou.cpp +113 -0
- package/src/querymou.cpp +177 -0
- package/src/querymou.hpp +93 -0
- package/src/txnmou.cpp +254 -0
- package/src/txnmou.hpp +122 -0
- package/src/typemou.hpp +239 -0
- package/src/valuemou.hpp +194 -0
- package/test/async.js +67 -0
- package/test/e3.js +38 -0
- package/test/e4.js +89 -0
- package/test/e5.js +162 -0
- package/test/test-batch-ops.js +243 -0
- package/test/test-cursor-mode.js +84 -0
- package/test/test-multi-mode.js +87 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
See [example-mdbx.c](example-mdbx.c) as an example of using _libmdbx_, and do a line-by-line comparison of it with the [sample-bdb.txt](sample-bdb.txt) file.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/* MDBX usage example
|
|
2
|
+
*
|
|
3
|
+
* Do a line-by-line comparison of this and sample-bdb.txt
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* Copyright 2015-2025 Leonid Yuriev <leo@yuriev.ru>.
|
|
8
|
+
* Copyright 2017 Ilya Shipitsin <chipitsine@gmail.com>.
|
|
9
|
+
* Copyright 2012-2015 Howard Chu, Symas Corp.
|
|
10
|
+
* All rights reserved.
|
|
11
|
+
*
|
|
12
|
+
* Redistribution and use in source and binary forms, with or without
|
|
13
|
+
* modification, are permitted only as authorized by the OpenLDAP
|
|
14
|
+
* Public License.
|
|
15
|
+
*
|
|
16
|
+
* A copy of this license is available in the file LICENSE in the
|
|
17
|
+
* top-level directory of the distribution or, alternatively, at
|
|
18
|
+
* <http://www.OpenLDAP.org/license.html>.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
#if (defined(__MINGW__) || defined(__MINGW32__) || defined(__MINGW64__)) && !defined(__USE_MINGW_ANSI_STDIO)
|
|
22
|
+
#define __USE_MINGW_ANSI_STDIO 1
|
|
23
|
+
#endif /* MinGW */
|
|
24
|
+
|
|
25
|
+
#include "mdbx.h"
|
|
26
|
+
|
|
27
|
+
#include <limits.h>
|
|
28
|
+
#include <stdint.h>
|
|
29
|
+
#include <stdio.h>
|
|
30
|
+
#include <stdlib.h>
|
|
31
|
+
|
|
32
|
+
int main(int argc, char *argv[]) {
|
|
33
|
+
(void)argc;
|
|
34
|
+
(void)argv;
|
|
35
|
+
|
|
36
|
+
int rc;
|
|
37
|
+
MDBX_env *env = NULL;
|
|
38
|
+
MDBX_dbi dbi = 0;
|
|
39
|
+
MDBX_val key, data;
|
|
40
|
+
MDBX_txn *txn = NULL;
|
|
41
|
+
MDBX_cursor *cursor = NULL;
|
|
42
|
+
char sval[32];
|
|
43
|
+
|
|
44
|
+
printf("MDBX limits:\n");
|
|
45
|
+
#if UINTPTR_MAX > 0xffffFFFFul || ULONG_MAX > 0xffffFFFFul
|
|
46
|
+
const double scale_factor = 1099511627776.0;
|
|
47
|
+
const char *const scale_unit = "TiB";
|
|
48
|
+
#else
|
|
49
|
+
const double scale_factor = 1073741824.0;
|
|
50
|
+
const char *const scale_unit = "GiB";
|
|
51
|
+
#endif
|
|
52
|
+
const size_t pagesize_min = mdbx_limits_pgsize_min();
|
|
53
|
+
const size_t pagesize_max = mdbx_limits_pgsize_max();
|
|
54
|
+
const size_t pagesize_default = mdbx_default_pagesize();
|
|
55
|
+
|
|
56
|
+
printf("\tPage size: a power of 2, minimum %zu, maximum %zu bytes,"
|
|
57
|
+
" default %zu bytes.\n",
|
|
58
|
+
pagesize_min, pagesize_max, pagesize_default);
|
|
59
|
+
printf("\tKey size: minimum %zu, maximum ≈¼ pagesize (%zu bytes for default"
|
|
60
|
+
" %zuK pagesize, %zu bytes for %zuK pagesize).\n",
|
|
61
|
+
(size_t)0, mdbx_limits_keysize_max(-1, MDBX_DB_DEFAULTS), pagesize_default / 1024,
|
|
62
|
+
mdbx_limits_keysize_max(pagesize_max, MDBX_DB_DEFAULTS), pagesize_max / 1024);
|
|
63
|
+
printf("\tValue size: minimum %zu, maximum %zu (0x%08zX) bytes for maps,"
|
|
64
|
+
" ≈¼ pagesize for multimaps (%zu bytes for default %zuK pagesize,"
|
|
65
|
+
" %zu bytes for %zuK pagesize).\n",
|
|
66
|
+
(size_t)0, mdbx_limits_valsize_max(pagesize_min, MDBX_DB_DEFAULTS),
|
|
67
|
+
mdbx_limits_valsize_max(pagesize_min, MDBX_DB_DEFAULTS), mdbx_limits_valsize_max(-1, MDBX_DUPSORT),
|
|
68
|
+
pagesize_default / 1024, mdbx_limits_valsize_max(pagesize_max, MDBX_DUPSORT), pagesize_max / 1024);
|
|
69
|
+
printf("\tWrite transaction size: up to %zu (0x%zX) pages (%f %s for default "
|
|
70
|
+
"%zuK pagesize, %f %s for %zuK pagesize).\n",
|
|
71
|
+
mdbx_limits_txnsize_max(pagesize_min) / pagesize_min, mdbx_limits_txnsize_max(pagesize_min) / pagesize_min,
|
|
72
|
+
mdbx_limits_txnsize_max(-1) / scale_factor, scale_unit, pagesize_default / 1024,
|
|
73
|
+
mdbx_limits_txnsize_max(pagesize_max) / scale_factor, scale_unit, pagesize_max / 1024);
|
|
74
|
+
printf("\tDatabase size: up to %zu pages (%f %s for default %zuK "
|
|
75
|
+
"pagesize, %f %s for %zuK pagesize).\n",
|
|
76
|
+
mdbx_limits_dbsize_max(pagesize_min) / pagesize_min, mdbx_limits_dbsize_max(-1) / scale_factor, scale_unit,
|
|
77
|
+
pagesize_default / 1024, mdbx_limits_dbsize_max(pagesize_max) / scale_factor, scale_unit, pagesize_max / 1024);
|
|
78
|
+
printf("\tMaximum sub-databases: %u.\n", MDBX_MAX_DBI);
|
|
79
|
+
printf("-----\n");
|
|
80
|
+
|
|
81
|
+
rc = mdbx_env_create(&env);
|
|
82
|
+
if (rc != MDBX_SUCCESS) {
|
|
83
|
+
fprintf(stderr, "mdbx_env_create: (%d) %s\n", rc, mdbx_strerror(rc));
|
|
84
|
+
goto bailout;
|
|
85
|
+
}
|
|
86
|
+
rc = mdbx_env_open(env, "./example-db", MDBX_NOSUBDIR | MDBX_LIFORECLAIM, 0664);
|
|
87
|
+
if (rc != MDBX_SUCCESS) {
|
|
88
|
+
fprintf(stderr, "mdbx_env_open: (%d) %s\n", rc, mdbx_strerror(rc));
|
|
89
|
+
goto bailout;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
rc = mdbx_txn_begin(env, NULL, 0, &txn);
|
|
93
|
+
if (rc != MDBX_SUCCESS) {
|
|
94
|
+
fprintf(stderr, "mdbx_txn_begin: (%d) %s\n", rc, mdbx_strerror(rc));
|
|
95
|
+
goto bailout;
|
|
96
|
+
}
|
|
97
|
+
rc = mdbx_dbi_open(txn, NULL, 0, &dbi);
|
|
98
|
+
if (rc != MDBX_SUCCESS) {
|
|
99
|
+
fprintf(stderr, "mdbx_dbi_open: (%d) %s\n", rc, mdbx_strerror(rc));
|
|
100
|
+
goto bailout;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
key.iov_len = sizeof(int);
|
|
104
|
+
key.iov_base = sval;
|
|
105
|
+
data.iov_len = sizeof(sval);
|
|
106
|
+
data.iov_base = sval;
|
|
107
|
+
|
|
108
|
+
sprintf(sval, "%03x %d foo bar", 32, 3141592);
|
|
109
|
+
rc = mdbx_put(txn, dbi, &key, &data, 0);
|
|
110
|
+
if (rc != MDBX_SUCCESS) {
|
|
111
|
+
fprintf(stderr, "mdbx_put: (%d) %s\n", rc, mdbx_strerror(rc));
|
|
112
|
+
goto bailout;
|
|
113
|
+
}
|
|
114
|
+
rc = mdbx_txn_commit(txn);
|
|
115
|
+
if (rc) {
|
|
116
|
+
fprintf(stderr, "mdbx_txn_commit: (%d) %s\n", rc, mdbx_strerror(rc));
|
|
117
|
+
goto bailout;
|
|
118
|
+
}
|
|
119
|
+
txn = NULL;
|
|
120
|
+
|
|
121
|
+
rc = mdbx_txn_begin(env, NULL, MDBX_TXN_RDONLY, &txn);
|
|
122
|
+
if (rc != MDBX_SUCCESS) {
|
|
123
|
+
fprintf(stderr, "mdbx_txn_begin: (%d) %s\n", rc, mdbx_strerror(rc));
|
|
124
|
+
goto bailout;
|
|
125
|
+
}
|
|
126
|
+
rc = mdbx_cursor_open(txn, dbi, &cursor);
|
|
127
|
+
if (rc != MDBX_SUCCESS) {
|
|
128
|
+
fprintf(stderr, "mdbx_cursor_open: (%d) %s\n", rc, mdbx_strerror(rc));
|
|
129
|
+
goto bailout;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
int found = 0;
|
|
133
|
+
while ((rc = mdbx_cursor_get(cursor, &key, &data, MDBX_NEXT)) == 0) {
|
|
134
|
+
printf("key: %p %.*s, data: %p %.*s\n", key.iov_base, (int)key.iov_len, (char *)key.iov_base, data.iov_base,
|
|
135
|
+
(int)data.iov_len, (char *)data.iov_base);
|
|
136
|
+
found += 1;
|
|
137
|
+
}
|
|
138
|
+
if (rc != MDBX_NOTFOUND || found == 0) {
|
|
139
|
+
fprintf(stderr, "mdbx_cursor_get: (%d) %s\n", rc, mdbx_strerror(rc));
|
|
140
|
+
goto bailout;
|
|
141
|
+
} else {
|
|
142
|
+
rc = MDBX_SUCCESS;
|
|
143
|
+
}
|
|
144
|
+
bailout:
|
|
145
|
+
if (cursor)
|
|
146
|
+
mdbx_cursor_close(cursor);
|
|
147
|
+
if (txn)
|
|
148
|
+
mdbx_txn_abort(txn);
|
|
149
|
+
if (dbi)
|
|
150
|
+
mdbx_dbi_close(env, dbi);
|
|
151
|
+
if (env)
|
|
152
|
+
mdbx_env_close(env);
|
|
153
|
+
return (rc != MDBX_SUCCESS) ? EXIT_FAILURE : EXIT_SUCCESS;
|
|
154
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/* BerkeleyDB toy/sample
|
|
2
|
+
*
|
|
3
|
+
* Do a line-by-line comparison of this and example-mdbx.c
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* Copyright 2015-2025 Leonid Yuriev <leo@yuriev.ru>.
|
|
8
|
+
* Copyright 2012-2015 Howard Chu, Symas Corp.
|
|
9
|
+
* Copyright 2015,2016 Peter-Service R&D LLC.
|
|
10
|
+
* All rights reserved.
|
|
11
|
+
*
|
|
12
|
+
* Redistribution and use in source and binary forms, with or without
|
|
13
|
+
* modification, are permitted only as authorized by the OpenLDAP
|
|
14
|
+
* Public License.
|
|
15
|
+
*
|
|
16
|
+
* A copy of this license is available in the file LICENSE in the
|
|
17
|
+
* top-level directory of the distribution or, alternatively, at
|
|
18
|
+
* <http://www.OpenLDAP.org/license.html>.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
#include <stdio.h>
|
|
22
|
+
#include <string.h>
|
|
23
|
+
#include <db.h>
|
|
24
|
+
|
|
25
|
+
int main(int argc,char * argv[])
|
|
26
|
+
{
|
|
27
|
+
int rc;
|
|
28
|
+
DB_ENV *env;
|
|
29
|
+
DB *dbi;
|
|
30
|
+
DBT key, data;
|
|
31
|
+
DB_TXN *txn;
|
|
32
|
+
DBC *cursor;
|
|
33
|
+
char sval[32], kval[32];
|
|
34
|
+
|
|
35
|
+
/* Note: Most error checking omitted for simplicity */
|
|
36
|
+
|
|
37
|
+
#define FLAGS (DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_TXN|DB_INIT_MPOOL|DB_CREATE|DB_THREAD)
|
|
38
|
+
rc = db_env_create(&env, 0);
|
|
39
|
+
rc = env->open(env, "./testdb", FLAGS, 0664);
|
|
40
|
+
rc = db_create(&dbi, env, 0);
|
|
41
|
+
rc = env->txn_begin(env, NULL, &txn, 0);
|
|
42
|
+
rc = dbi->open(dbi, txn, "test.bdb", NULL, DB_BTREE, DB_CREATE, 0664);
|
|
43
|
+
|
|
44
|
+
memset(&key, 0, sizeof(DBT));
|
|
45
|
+
memset(&data, 0, sizeof(DBT));
|
|
46
|
+
key.size = sizeof(int);
|
|
47
|
+
key.data = sval;
|
|
48
|
+
data.size = sizeof(sval);
|
|
49
|
+
data.data = sval;
|
|
50
|
+
|
|
51
|
+
sprintf(sval, "%03x %d foo bar", 32, 3141592);
|
|
52
|
+
rc = dbi->put(dbi, txn, &key, &data, 0);
|
|
53
|
+
rc = txn->commit(txn, 0);
|
|
54
|
+
if (rc) {
|
|
55
|
+
fprintf(stderr, "txn->commit: (%d) %s\n", rc, db_strerror(rc));
|
|
56
|
+
goto leave;
|
|
57
|
+
}
|
|
58
|
+
rc = env->txn_begin(env, NULL, &txn, 0);
|
|
59
|
+
rc = dbi->cursor(dbi, txn, &cursor, 0);
|
|
60
|
+
key.flags = DB_DBT_USERMEM;
|
|
61
|
+
key.data = kval;
|
|
62
|
+
key.ulen = sizeof(kval);
|
|
63
|
+
data.flags = DB_DBT_USERMEM;
|
|
64
|
+
data.data = sval;
|
|
65
|
+
data.ulen = sizeof(sval);
|
|
66
|
+
while ((rc = cursor->c_get(cursor, &key, &data, DB_NEXT)) == 0) {
|
|
67
|
+
printf("key: %p %.*s, data: %p %.*s\n",
|
|
68
|
+
key.data, (int) key.size, (char *) key.data,
|
|
69
|
+
data.data, (int) data.size, (char *) data.data);
|
|
70
|
+
}
|
|
71
|
+
rc = cursor->c_close(cursor);
|
|
72
|
+
rc = txn->abort(txn);
|
|
73
|
+
leave:
|
|
74
|
+
rc = dbi->close(dbi, 0);
|
|
75
|
+
rc = env->close(env, 0);
|
|
76
|
+
return rc;
|
|
77
|
+
}
|