@ohos-ports/lmdb 2.8.6-beta.0

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.
Files changed (125) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +580 -0
  3. package/SECURITY.md +12 -0
  4. package/bin/download-prebuilds.js +15 -0
  5. package/binding.gyp +113 -0
  6. package/build/Release/lmdb.node +0 -0
  7. package/caching.js +212 -0
  8. package/dependencies/lmdb/libraries/liblmdb/COPYRIGHT +20 -0
  9. package/dependencies/lmdb/libraries/liblmdb/Doxyfile +1631 -0
  10. package/dependencies/lmdb/libraries/liblmdb/LICENSE +47 -0
  11. package/dependencies/lmdb/libraries/liblmdb/Makefile +136 -0
  12. package/dependencies/lmdb/libraries/liblmdb/chacha8.c +183 -0
  13. package/dependencies/lmdb/libraries/liblmdb/chacha8.h +14 -0
  14. package/dependencies/lmdb/libraries/liblmdb/crypto.c +121 -0
  15. package/dependencies/lmdb/libraries/liblmdb/intro.doc +192 -0
  16. package/dependencies/lmdb/libraries/liblmdb/lmdb.h +1817 -0
  17. package/dependencies/lmdb/libraries/liblmdb/mdb.c +12555 -0
  18. package/dependencies/lmdb/libraries/liblmdb/mdb_copy.1 +74 -0
  19. package/dependencies/lmdb/libraries/liblmdb/mdb_copy.c +106 -0
  20. package/dependencies/lmdb/libraries/liblmdb/mdb_drop.1 +53 -0
  21. package/dependencies/lmdb/libraries/liblmdb/mdb_drop.c +154 -0
  22. package/dependencies/lmdb/libraries/liblmdb/mdb_dump.1 +94 -0
  23. package/dependencies/lmdb/libraries/liblmdb/mdb_dump.c +333 -0
  24. package/dependencies/lmdb/libraries/liblmdb/mdb_load.1 +97 -0
  25. package/dependencies/lmdb/libraries/liblmdb/mdb_load.c +530 -0
  26. package/dependencies/lmdb/libraries/liblmdb/mdb_stat.1 +83 -0
  27. package/dependencies/lmdb/libraries/liblmdb/mdb_stat.c +276 -0
  28. package/dependencies/lmdb/libraries/liblmdb/midl-sparse.c +452 -0
  29. package/dependencies/lmdb/libraries/liblmdb/midl.c +452 -0
  30. package/dependencies/lmdb/libraries/liblmdb/midl.h +208 -0
  31. package/dependencies/lmdb/libraries/liblmdb/module.c +101 -0
  32. package/dependencies/lmdb/libraries/liblmdb/module.h +16 -0
  33. package/dependencies/lmdb/libraries/liblmdb/mtest.c +178 -0
  34. package/dependencies/lmdb/libraries/liblmdb/mtest2.c +124 -0
  35. package/dependencies/lmdb/libraries/liblmdb/mtest3.c +133 -0
  36. package/dependencies/lmdb/libraries/liblmdb/mtest4.c +168 -0
  37. package/dependencies/lmdb/libraries/liblmdb/mtest5.c +135 -0
  38. package/dependencies/lmdb/libraries/liblmdb/mtest6.c +141 -0
  39. package/dependencies/lmdb/libraries/liblmdb/mtest_enc.c +190 -0
  40. package/dependencies/lmdb/libraries/liblmdb/mtest_enc2.c +189 -0
  41. package/dependencies/lmdb/libraries/liblmdb/mtest_remap.c +177 -0
  42. package/dependencies/lmdb/libraries/liblmdb/sample-bdb.txt +73 -0
  43. package/dependencies/lmdb/libraries/liblmdb/sample-mdb.txt +62 -0
  44. package/dependencies/lmdb/libraries/liblmdb/tooltag +27 -0
  45. package/dependencies/lmdb-data-v1/libraries/liblmdb/CHANGES +266 -0
  46. package/dependencies/lmdb-data-v1/libraries/liblmdb/COPYRIGHT +20 -0
  47. package/dependencies/lmdb-data-v1/libraries/liblmdb/Doxyfile +1631 -0
  48. package/dependencies/lmdb-data-v1/libraries/liblmdb/LICENSE +47 -0
  49. package/dependencies/lmdb-data-v1/libraries/liblmdb/intro.doc +192 -0
  50. package/dependencies/lmdb-data-v1/libraries/liblmdb/lmdb.h +1608 -0
  51. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb.c +10320 -0
  52. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_copy.1 +55 -0
  53. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_copy.c +82 -0
  54. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_dump.1 +75 -0
  55. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_dump.c +319 -0
  56. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_load.1 +84 -0
  57. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_load.c +496 -0
  58. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_stat.1 +64 -0
  59. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_stat.c +263 -0
  60. package/dependencies/lmdb-data-v1/libraries/liblmdb/midl.c +359 -0
  61. package/dependencies/lmdb-data-v1/libraries/liblmdb/midl.h +186 -0
  62. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest.c +177 -0
  63. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest2.c +124 -0
  64. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest3.c +133 -0
  65. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest4.c +168 -0
  66. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest5.c +135 -0
  67. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest6.c +141 -0
  68. package/dependencies/lmdb-data-v1/libraries/liblmdb/sample-bdb.txt +73 -0
  69. package/dependencies/lmdb-data-v1/libraries/liblmdb/sample-mdb.txt +62 -0
  70. package/dependencies/lmdb-data-v1/libraries/liblmdb/tooltag +22 -0
  71. package/dependencies/lz4/LICENSE +11 -0
  72. package/dependencies/lz4/lib/LICENSE +24 -0
  73. package/dependencies/lz4/lib/Makefile +225 -0
  74. package/dependencies/lz4/lib/README.md +169 -0
  75. package/dependencies/lz4/lib/dll/example/Makefile +63 -0
  76. package/dependencies/lz4/lib/dll/example/README.md +69 -0
  77. package/dependencies/lz4/lib/dll/example/fullbench-dll.sln +25 -0
  78. package/dependencies/lz4/lib/dll/example/fullbench-dll.vcxproj +182 -0
  79. package/dependencies/lz4/lib/dll/liblz4.def +62 -0
  80. package/dependencies/lz4/lib/liblz4-dll.rc.in +35 -0
  81. package/dependencies/lz4/lib/liblz4.pc.in +14 -0
  82. package/dependencies/lz4/lib/lz4.c +2722 -0
  83. package/dependencies/lz4/lib/lz4.h +842 -0
  84. package/dependencies/lz4/lib/lz4file.c +311 -0
  85. package/dependencies/lz4/lib/lz4file.h +93 -0
  86. package/dependencies/lz4/lib/lz4frame.c +2078 -0
  87. package/dependencies/lz4/lib/lz4frame.h +692 -0
  88. package/dependencies/lz4/lib/lz4frame_static.h +47 -0
  89. package/dependencies/lz4/lib/lz4hc.c +1631 -0
  90. package/dependencies/lz4/lib/lz4hc.h +413 -0
  91. package/dependencies/lz4/lib/xxhash.c +1030 -0
  92. package/dependencies/lz4/lib/xxhash.h +328 -0
  93. package/dependencies/v8/v8-fast-api-calls-v16.h +791 -0
  94. package/dependencies/v8/v8-fast-api-calls.h +888 -0
  95. package/dict/dict.txt +1 -0
  96. package/dict/dict2.txt +1 -0
  97. package/dist/index.cjs +2950 -0
  98. package/dist/index.cjs.map +1 -0
  99. package/index.d.cts +420 -0
  100. package/index.d.ts +450 -0
  101. package/index.js +38 -0
  102. package/keys.js +116 -0
  103. package/level.js +27 -0
  104. package/native.js +85 -0
  105. package/node-index.js +32 -0
  106. package/open.js +448 -0
  107. package/package.json +124 -0
  108. package/read.js +833 -0
  109. package/rollup.config.js +12 -0
  110. package/src/compression.cpp +225 -0
  111. package/src/cursor.cpp +395 -0
  112. package/src/dbi.cpp +382 -0
  113. package/src/env.cpp +1030 -0
  114. package/src/lmdb-js.cpp +64 -0
  115. package/src/lmdb-js.h +633 -0
  116. package/src/misc.cpp +593 -0
  117. package/src/ordered-binary.cpp +46 -0
  118. package/src/txn.cpp +210 -0
  119. package/src/v8-functions.cpp +170 -0
  120. package/src/windows.c +35 -0
  121. package/src/writer.cpp +537 -0
  122. package/util/RangeIterable.js +236 -0
  123. package/util/set-optional-deps.cjs +14 -0
  124. package/util/when.js +8 -0
  125. package/write.js +912 -0
@@ -0,0 +1,168 @@
1
+ /* mtest4.c - memory-mapped database tester/toy */
2
+ /*
3
+ * Copyright 2011-2021 Howard Chu, Symas Corp.
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted only as authorized by the OpenLDAP
8
+ * Public License.
9
+ *
10
+ * A copy of this license is available in the file LICENSE in the
11
+ * top-level directory of the distribution or, alternatively, at
12
+ * <http://www.OpenLDAP.org/license.html>.
13
+ */
14
+
15
+ /* Tests for sorted duplicate DBs with fixed-size keys */
16
+ #include <stdio.h>
17
+ #include <stdlib.h>
18
+ #include <string.h>
19
+ #include <time.h>
20
+ #include "lmdb.h"
21
+
22
+ #define E(expr) CHECK((rc = (expr)) == MDB_SUCCESS, #expr)
23
+ #define RES(err, expr) ((rc = expr) == (err) || (CHECK(!rc, #expr), 0))
24
+ #define CHECK(test, msg) ((test) ? (void)0 : ((void)fprintf(stderr, \
25
+ "%s:%d: %s: %s\n", __FILE__, __LINE__, msg, mdb_strerror(rc)), abort()))
26
+
27
+ int main(int argc,char * argv[])
28
+ {
29
+ int i = 0, j = 0, rc;
30
+ MDB_env *env;
31
+ MDB_dbi dbi;
32
+ MDB_val key, data;
33
+ MDB_txn *txn;
34
+ MDB_stat mst;
35
+ MDB_cursor *cursor;
36
+ int count;
37
+ int *values;
38
+ char sval[8];
39
+ char kval[sizeof(int)];
40
+
41
+ memset(sval, 0, sizeof(sval));
42
+
43
+ count = 510;
44
+ values = (int *)malloc(count*sizeof(int));
45
+
46
+ for(i = 0;i<count;i++) {
47
+ values[i] = i*5;
48
+ }
49
+
50
+ E(mdb_env_create(&env));
51
+ E(mdb_env_set_mapsize(env, 10485760));
52
+ E(mdb_env_set_maxdbs(env, 4));
53
+ E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
54
+
55
+ E(mdb_txn_begin(env, NULL, 0, &txn));
56
+ E(mdb_dbi_open(txn, "id4", MDB_CREATE|MDB_DUPSORT|MDB_DUPFIXED, &dbi));
57
+
58
+ key.mv_size = sizeof(int);
59
+ key.mv_data = kval;
60
+ data.mv_size = sizeof(sval);
61
+ data.mv_data = sval;
62
+
63
+ printf("Adding %d values\n", count);
64
+ strcpy(kval, "001");
65
+ for (i=0;i<count;i++) {
66
+ sprintf(sval, "%07x", values[i]);
67
+ if (RES(MDB_KEYEXIST, mdb_put(txn, dbi, &key, &data, MDB_NODUPDATA)))
68
+ j++;
69
+ }
70
+ if (j) printf("%d duplicates skipped\n", j);
71
+ E(mdb_txn_commit(txn));
72
+ E(mdb_env_stat(env, &mst));
73
+
74
+ /* there should be one full page of dups now.
75
+ */
76
+ E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
77
+ E(mdb_cursor_open(txn, dbi, &cursor));
78
+ while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
79
+ printf("key: %p %.*s, data: %p %.*s\n",
80
+ key.mv_data, (int) key.mv_size, (char *) key.mv_data,
81
+ data.mv_data, (int) data.mv_size, (char *) data.mv_data);
82
+ }
83
+ CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
84
+ mdb_cursor_close(cursor);
85
+ mdb_txn_abort(txn);
86
+
87
+ /* test all 3 branches of split code:
88
+ * 1: new key in lower half
89
+ * 2: new key at split point
90
+ * 3: new key in upper half
91
+ */
92
+
93
+ key.mv_size = sizeof(int);
94
+ key.mv_data = kval;
95
+ data.mv_size = sizeof(sval);
96
+ data.mv_data = sval;
97
+
98
+ sprintf(sval, "%07x", values[3]+1);
99
+ E(mdb_txn_begin(env, NULL, 0, &txn));
100
+ (void)RES(MDB_KEYEXIST, mdb_put(txn, dbi, &key, &data, MDB_NODUPDATA));
101
+ mdb_txn_abort(txn);
102
+
103
+ sprintf(sval, "%07x", values[255]+1);
104
+ E(mdb_txn_begin(env, NULL, 0, &txn));
105
+ (void)RES(MDB_KEYEXIST, mdb_put(txn, dbi, &key, &data, MDB_NODUPDATA));
106
+ mdb_txn_abort(txn);
107
+
108
+ sprintf(sval, "%07x", values[500]+1);
109
+ E(mdb_txn_begin(env, NULL, 0, &txn));
110
+ (void)RES(MDB_KEYEXIST, mdb_put(txn, dbi, &key, &data, MDB_NODUPDATA));
111
+ E(mdb_txn_commit(txn));
112
+
113
+ /* Try MDB_NEXT_MULTIPLE */
114
+ E(mdb_txn_begin(env, NULL, 0, &txn));
115
+ E(mdb_cursor_open(txn, dbi, &cursor));
116
+ while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT_MULTIPLE)) == 0) {
117
+ printf("key: %.*s, data: %.*s\n",
118
+ (int) key.mv_size, (char *) key.mv_data,
119
+ (int) data.mv_size, (char *) data.mv_data);
120
+ }
121
+ CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
122
+ mdb_cursor_close(cursor);
123
+ mdb_txn_abort(txn);
124
+ j=0;
125
+
126
+ for (i= count - 1; i > -1; i-= (rand()%3)) {
127
+ j++;
128
+ txn=NULL;
129
+ E(mdb_txn_begin(env, NULL, 0, &txn));
130
+ sprintf(sval, "%07x", values[i]);
131
+ key.mv_size = sizeof(int);
132
+ key.mv_data = kval;
133
+ data.mv_size = sizeof(sval);
134
+ data.mv_data = sval;
135
+ if (RES(MDB_NOTFOUND, mdb_del(txn, dbi, &key, &data))) {
136
+ j--;
137
+ mdb_txn_abort(txn);
138
+ } else {
139
+ E(mdb_txn_commit(txn));
140
+ }
141
+ }
142
+ free(values);
143
+ printf("Deleted %d values\n", j);
144
+
145
+ E(mdb_env_stat(env, &mst));
146
+ E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
147
+ E(mdb_cursor_open(txn, dbi, &cursor));
148
+ printf("Cursor next\n");
149
+ while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
150
+ printf("key: %.*s, data: %.*s\n",
151
+ (int) key.mv_size, (char *) key.mv_data,
152
+ (int) data.mv_size, (char *) data.mv_data);
153
+ }
154
+ CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
155
+ printf("Cursor prev\n");
156
+ while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_PREV)) == 0) {
157
+ printf("key: %.*s, data: %.*s\n",
158
+ (int) key.mv_size, (char *) key.mv_data,
159
+ (int) data.mv_size, (char *) data.mv_data);
160
+ }
161
+ CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
162
+ mdb_cursor_close(cursor);
163
+ mdb_txn_abort(txn);
164
+
165
+ mdb_dbi_close(env, dbi);
166
+ mdb_env_close(env);
167
+ return 0;
168
+ }
@@ -0,0 +1,135 @@
1
+ /* mtest5.c - memory-mapped database tester/toy */
2
+ /*
3
+ * Copyright 2011-2021 Howard Chu, Symas Corp.
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted only as authorized by the OpenLDAP
8
+ * Public License.
9
+ *
10
+ * A copy of this license is available in the file LICENSE in the
11
+ * top-level directory of the distribution or, alternatively, at
12
+ * <http://www.OpenLDAP.org/license.html>.
13
+ */
14
+
15
+ /* Tests for sorted duplicate DBs using cursor_put */
16
+ #include <stdio.h>
17
+ #include <stdlib.h>
18
+ #include <string.h>
19
+ #include <time.h>
20
+ #include "lmdb.h"
21
+
22
+ #define E(expr) CHECK((rc = (expr)) == MDB_SUCCESS, #expr)
23
+ #define RES(err, expr) ((rc = expr) == (err) || (CHECK(!rc, #expr), 0))
24
+ #define CHECK(test, msg) ((test) ? (void)0 : ((void)fprintf(stderr, \
25
+ "%s:%d: %s: %s\n", __FILE__, __LINE__, msg, mdb_strerror(rc)), abort()))
26
+
27
+ int main(int argc,char * argv[])
28
+ {
29
+ int i = 0, j = 0, rc;
30
+ MDB_env *env;
31
+ MDB_dbi dbi;
32
+ MDB_val key, data;
33
+ MDB_txn *txn;
34
+ MDB_stat mst;
35
+ MDB_cursor *cursor;
36
+ int count;
37
+ int *values;
38
+ char sval[32];
39
+ char kval[sizeof(int)];
40
+
41
+ srand(time(NULL));
42
+
43
+ memset(sval, 0, sizeof(sval));
44
+
45
+ count = (rand()%384) + 64;
46
+ values = (int *)malloc(count*sizeof(int));
47
+
48
+ for(i = 0;i<count;i++) {
49
+ values[i] = rand()%1024;
50
+ }
51
+
52
+ E(mdb_env_create(&env));
53
+ E(mdb_env_set_mapsize(env, 10485760));
54
+ E(mdb_env_set_maxdbs(env, 4));
55
+ E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
56
+
57
+ E(mdb_txn_begin(env, NULL, 0, &txn));
58
+ E(mdb_dbi_open(txn, "id2", MDB_CREATE|MDB_DUPSORT, &dbi));
59
+ E(mdb_cursor_open(txn, dbi, &cursor));
60
+
61
+ key.mv_size = sizeof(int);
62
+ key.mv_data = kval;
63
+ data.mv_size = sizeof(sval);
64
+ data.mv_data = sval;
65
+
66
+ printf("Adding %d values\n", count);
67
+ for (i=0;i<count;i++) {
68
+ if (!(i & 0x0f))
69
+ sprintf(kval, "%03x", values[i]);
70
+ sprintf(sval, "%03x %d foo bar", values[i], values[i]);
71
+ if (RES(MDB_KEYEXIST, mdb_cursor_put(cursor, &key, &data, MDB_NODUPDATA)))
72
+ j++;
73
+ }
74
+ if (j) printf("%d duplicates skipped\n", j);
75
+ mdb_cursor_close(cursor);
76
+ E(mdb_txn_commit(txn));
77
+ E(mdb_env_stat(env, &mst));
78
+
79
+ E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
80
+ E(mdb_cursor_open(txn, dbi, &cursor));
81
+ while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
82
+ printf("key: %p %.*s, data: %p %.*s\n",
83
+ key.mv_data, (int) key.mv_size, (char *) key.mv_data,
84
+ data.mv_data, (int) data.mv_size, (char *) data.mv_data);
85
+ }
86
+ CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
87
+ mdb_cursor_close(cursor);
88
+ mdb_txn_abort(txn);
89
+
90
+ j=0;
91
+
92
+ for (i= count - 1; i > -1; i-= (rand()%5)) {
93
+ j++;
94
+ txn=NULL;
95
+ E(mdb_txn_begin(env, NULL, 0, &txn));
96
+ sprintf(kval, "%03x", values[i & ~0x0f]);
97
+ sprintf(sval, "%03x %d foo bar", values[i], values[i]);
98
+ key.mv_size = sizeof(int);
99
+ key.mv_data = kval;
100
+ data.mv_size = sizeof(sval);
101
+ data.mv_data = sval;
102
+ if (RES(MDB_NOTFOUND, mdb_del(txn, dbi, &key, &data))) {
103
+ j--;
104
+ mdb_txn_abort(txn);
105
+ } else {
106
+ E(mdb_txn_commit(txn));
107
+ }
108
+ }
109
+ free(values);
110
+ printf("Deleted %d values\n", j);
111
+
112
+ E(mdb_env_stat(env, &mst));
113
+ E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
114
+ E(mdb_cursor_open(txn, dbi, &cursor));
115
+ printf("Cursor next\n");
116
+ while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
117
+ printf("key: %.*s, data: %.*s\n",
118
+ (int) key.mv_size, (char *) key.mv_data,
119
+ (int) data.mv_size, (char *) data.mv_data);
120
+ }
121
+ CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
122
+ printf("Cursor prev\n");
123
+ while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_PREV)) == 0) {
124
+ printf("key: %.*s, data: %.*s\n",
125
+ (int) key.mv_size, (char *) key.mv_data,
126
+ (int) data.mv_size, (char *) data.mv_data);
127
+ }
128
+ CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
129
+ mdb_cursor_close(cursor);
130
+ mdb_txn_abort(txn);
131
+
132
+ mdb_dbi_close(env, dbi);
133
+ mdb_env_close(env);
134
+ return 0;
135
+ }
@@ -0,0 +1,141 @@
1
+ /* mtest6.c - memory-mapped database tester/toy */
2
+ /*
3
+ * Copyright 2011-2021 Howard Chu, Symas Corp.
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted only as authorized by the OpenLDAP
8
+ * Public License.
9
+ *
10
+ * A copy of this license is available in the file LICENSE in the
11
+ * top-level directory of the distribution or, alternatively, at
12
+ * <http://www.OpenLDAP.org/license.html>.
13
+ */
14
+
15
+ /* Tests for DB splits and merges */
16
+ #include <stdio.h>
17
+ #include <stdlib.h>
18
+ #include <string.h>
19
+ #include <time.h>
20
+ #include "lmdb.h"
21
+
22
+ #define E(expr) CHECK((rc = (expr)) == MDB_SUCCESS, #expr)
23
+ #define RES(err, expr) ((rc = expr) == (err) || (CHECK(!rc, #expr), 0))
24
+ #define CHECK(test, msg) ((test) ? (void)0 : ((void)fprintf(stderr, \
25
+ "%s:%d: %s: %s\n", __FILE__, __LINE__, msg, mdb_strerror(rc)), abort()))
26
+
27
+ char dkbuf[1024];
28
+
29
+ int main(int argc,char * argv[])
30
+ {
31
+ int i = 0, j = 0, rc;
32
+ MDB_env *env;
33
+ MDB_dbi dbi;
34
+ MDB_val key, data, sdata;
35
+ MDB_txn *txn;
36
+ MDB_stat mst;
37
+ MDB_cursor *cursor;
38
+ int count;
39
+ int *values;
40
+ long kval;
41
+ char *sval;
42
+
43
+ srand(time(NULL));
44
+
45
+ E(mdb_env_create(&env));
46
+ E(mdb_env_set_mapsize(env, 10485760));
47
+ E(mdb_env_set_maxdbs(env, 4));
48
+ E(mdb_env_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664));
49
+
50
+ E(mdb_txn_begin(env, NULL, 0, &txn));
51
+ E(mdb_dbi_open(txn, "id6", MDB_CREATE|MDB_INTEGERKEY, &dbi));
52
+ E(mdb_cursor_open(txn, dbi, &cursor));
53
+ E(mdb_stat(txn, dbi, &mst));
54
+
55
+ sval = calloc(1, mst.ms_psize / 4);
56
+ key.mv_size = sizeof(long);
57
+ key.mv_data = &kval;
58
+ sdata.mv_size = mst.ms_psize / 4 - 30;
59
+ sdata.mv_data = sval;
60
+
61
+ printf("Adding 12 values, should yield 3 splits\n");
62
+ for (i=0;i<12;i++) {
63
+ kval = i*5;
64
+ sprintf(sval, "%08x", kval);
65
+ data = sdata;
66
+ (void)RES(MDB_KEYEXIST, mdb_cursor_put(cursor, &key, &data, MDB_NOOVERWRITE));
67
+ }
68
+ printf("Adding 12 more values, should yield 3 splits\n");
69
+ for (i=0;i<12;i++) {
70
+ kval = i*5+4;
71
+ sprintf(sval, "%08x", kval);
72
+ data = sdata;
73
+ (void)RES(MDB_KEYEXIST, mdb_cursor_put(cursor, &key, &data, MDB_NOOVERWRITE));
74
+ }
75
+ printf("Adding 12 more values, should yield 3 splits\n");
76
+ for (i=0;i<12;i++) {
77
+ kval = i*5+1;
78
+ sprintf(sval, "%08x", kval);
79
+ data = sdata;
80
+ (void)RES(MDB_KEYEXIST, mdb_cursor_put(cursor, &key, &data, MDB_NOOVERWRITE));
81
+ }
82
+ E(mdb_cursor_get(cursor, &key, &data, MDB_FIRST));
83
+
84
+ do {
85
+ printf("key: %p %s, data: %p %.*s\n",
86
+ key.mv_data, mdb_dkey(&key, dkbuf),
87
+ data.mv_data, (int) data.mv_size, (char *) data.mv_data);
88
+ } while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0);
89
+ CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
90
+ mdb_cursor_close(cursor);
91
+ mdb_txn_commit(txn);
92
+
93
+ #if 0
94
+ j=0;
95
+
96
+ for (i= count - 1; i > -1; i-= (rand()%5)) {
97
+ j++;
98
+ txn=NULL;
99
+ E(mdb_txn_begin(env, NULL, 0, &txn));
100
+ sprintf(kval, "%03x", values[i & ~0x0f]);
101
+ sprintf(sval, "%03x %d foo bar", values[i], values[i]);
102
+ key.mv_size = sizeof(int);
103
+ key.mv_data = kval;
104
+ data.mv_size = sizeof(sval);
105
+ data.mv_data = sval;
106
+ if (RES(MDB_NOTFOUND, mdb_del(txn, dbi, &key, &data))) {
107
+ j--;
108
+ mdb_txn_abort(txn);
109
+ } else {
110
+ E(mdb_txn_commit(txn));
111
+ }
112
+ }
113
+ free(values);
114
+ printf("Deleted %d values\n", j);
115
+
116
+ E(mdb_env_stat(env, &mst));
117
+ E(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn));
118
+ E(mdb_cursor_open(txn, dbi, &cursor));
119
+ printf("Cursor next\n");
120
+ while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
121
+ printf("key: %.*s, data: %.*s\n",
122
+ (int) key.mv_size, (char *) key.mv_data,
123
+ (int) data.mv_size, (char *) data.mv_data);
124
+ }
125
+ CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
126
+ printf("Cursor prev\n");
127
+ while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_PREV)) == 0) {
128
+ printf("key: %.*s, data: %.*s\n",
129
+ (int) key.mv_size, (char *) key.mv_data,
130
+ (int) data.mv_size, (char *) data.mv_data);
131
+ }
132
+ CHECK(rc == MDB_NOTFOUND, "mdb_cursor_get");
133
+ mdb_cursor_close(cursor);
134
+ mdb_txn_abort(txn);
135
+
136
+ mdb_dbi_close(env, dbi);
137
+ #endif
138
+ mdb_env_close(env);
139
+
140
+ return 0;
141
+ }
@@ -0,0 +1,73 @@
1
+ /* sample-bdb.txt - BerkeleyDB toy/sample
2
+ *
3
+ * Do a line-by-line comparison of this and sample-mdb.txt
4
+ */
5
+ /*
6
+ * Copyright 2012-2021 Howard Chu, Symas Corp.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted only as authorized by the OpenLDAP
11
+ * Public License.
12
+ *
13
+ * A copy of this license is available in the file LICENSE in the
14
+ * top-level directory of the distribution or, alternatively, at
15
+ * <http://www.OpenLDAP.org/license.html>.
16
+ */
17
+ #include <stdio.h>
18
+ #include <string.h>
19
+ #include <db.h>
20
+
21
+ int main(int argc,char * argv[])
22
+ {
23
+ int rc;
24
+ DB_ENV *env;
25
+ DB *dbi;
26
+ DBT key, data;
27
+ DB_TXN *txn;
28
+ DBC *cursor;
29
+ char sval[32], kval[32];
30
+
31
+ /* Note: Most error checking omitted for simplicity */
32
+
33
+ #define FLAGS (DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_TXN|DB_INIT_MPOOL|DB_CREATE|DB_THREAD)
34
+ rc = db_env_create(&env, 0);
35
+ rc = env->open(env, "./testdb", FLAGS, 0664);
36
+ rc = db_create(&dbi, env, 0);
37
+ rc = env->txn_begin(env, NULL, &txn, 0);
38
+ rc = dbi->open(dbi, txn, "test.bdb", NULL, DB_BTREE, DB_CREATE, 0664);
39
+
40
+ memset(&key, 0, sizeof(DBT));
41
+ memset(&data, 0, sizeof(DBT));
42
+ key.size = sizeof(int);
43
+ key.data = sval;
44
+ data.size = sizeof(sval);
45
+ data.data = sval;
46
+
47
+ sprintf(sval, "%03x %d foo bar", 32, 3141592);
48
+ rc = dbi->put(dbi, txn, &key, &data, 0);
49
+ rc = txn->commit(txn, 0);
50
+ if (rc) {
51
+ fprintf(stderr, "txn->commit: (%d) %s\n", rc, db_strerror(rc));
52
+ goto leave;
53
+ }
54
+ rc = env->txn_begin(env, NULL, &txn, 0);
55
+ rc = dbi->cursor(dbi, txn, &cursor, 0);
56
+ key.flags = DB_DBT_USERMEM;
57
+ key.data = kval;
58
+ key.ulen = sizeof(kval);
59
+ data.flags = DB_DBT_USERMEM;
60
+ data.data = sval;
61
+ data.ulen = sizeof(sval);
62
+ while ((rc = cursor->c_get(cursor, &key, &data, DB_NEXT)) == 0) {
63
+ printf("key: %p %.*s, data: %p %.*s\n",
64
+ key.data, (int) key.size, (char *) key.data,
65
+ data.data, (int) data.size, (char *) data.data);
66
+ }
67
+ rc = cursor->c_close(cursor);
68
+ rc = txn->abort(txn);
69
+ leave:
70
+ rc = dbi->close(dbi, 0);
71
+ rc = env->close(env, 0);
72
+ return rc;
73
+ }
@@ -0,0 +1,62 @@
1
+ /* sample-mdb.txt - MDB toy/sample
2
+ *
3
+ * Do a line-by-line comparison of this and sample-bdb.txt
4
+ */
5
+ /*
6
+ * Copyright 2012-2021 Howard Chu, Symas Corp.
7
+ * All rights reserved.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted only as authorized by the OpenLDAP
11
+ * Public License.
12
+ *
13
+ * A copy of this license is available in the file LICENSE in the
14
+ * top-level directory of the distribution or, alternatively, at
15
+ * <http://www.OpenLDAP.org/license.html>.
16
+ */
17
+ #include <stdio.h>
18
+ #include "lmdb.h"
19
+
20
+ int main(int argc,char * argv[])
21
+ {
22
+ int rc;
23
+ MDB_env *env;
24
+ MDB_dbi dbi;
25
+ MDB_val key, data;
26
+ MDB_txn *txn;
27
+ MDB_cursor *cursor;
28
+ char sval[32];
29
+
30
+ /* Note: Most error checking omitted for simplicity */
31
+
32
+ rc = mdb_env_create(&env);
33
+ rc = mdb_env_open(env, "./testdb", 0, 0664);
34
+ rc = mdb_txn_begin(env, NULL, 0, &txn);
35
+ rc = mdb_dbi_open(txn, NULL, 0, &dbi);
36
+
37
+ key.mv_size = sizeof(int);
38
+ key.mv_data = sval;
39
+ data.mv_size = sizeof(sval);
40
+ data.mv_data = sval;
41
+
42
+ sprintf(sval, "%03x %d foo bar", 32, 3141592);
43
+ rc = mdb_put(txn, dbi, &key, &data, 0);
44
+ rc = mdb_txn_commit(txn);
45
+ if (rc) {
46
+ fprintf(stderr, "mdb_txn_commit: (%d) %s\n", rc, mdb_strerror(rc));
47
+ goto leave;
48
+ }
49
+ rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn);
50
+ rc = mdb_cursor_open(txn, dbi, &cursor);
51
+ while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) {
52
+ printf("key: %p %.*s, data: %p %.*s\n",
53
+ key.mv_data, (int) key.mv_size, (char *) key.mv_data,
54
+ data.mv_data, (int) data.mv_size, (char *) data.mv_data);
55
+ }
56
+ mdb_cursor_close(cursor);
57
+ mdb_txn_abort(txn);
58
+ leave:
59
+ mdb_dbi_close(env, dbi);
60
+ mdb_env_close(env);
61
+ return 0;
62
+ }
@@ -0,0 +1,22 @@
1
+ <tagfile>
2
+ <compound kind="page">
3
+ <name>mdb_copy_1</name>
4
+ <title>mdb_copy - environment copy tool</title>
5
+ <filename>mdb_copy.1</filename>
6
+ </compound>
7
+ <compound kind="page">
8
+ <name>mdb_dump_1</name>
9
+ <title>mdb_dump - environment export tool</title>
10
+ <filename>mdb_dump.1</filename>
11
+ </compound>
12
+ <compound kind="page">
13
+ <name>mdb_load_1</name>
14
+ <title>mdb_load - environment import tool</title>
15
+ <filename>mdb_load.1</filename>
16
+ </compound>
17
+ <compound kind="page">
18
+ <name>mdb_stat_1</name>
19
+ <title>mdb_stat - environment status tool</title>
20
+ <filename>mdb_stat.1</filename>
21
+ </compound>
22
+ </tagfile>
@@ -0,0 +1,11 @@
1
+ This repository uses 2 different licenses :
2
+ - all files in the `lib` directory use a BSD 2-Clause license
3
+ - all other files use a GPLv2 license, unless explicitly stated otherwise
4
+
5
+ Relevant license is reminded at the top of each source file,
6
+ and with presence of COPYING or LICENSE file in associated directories.
7
+
8
+ This model is selected to emphasize that
9
+ files in the `lib` directory are designed to be included into 3rd party applications,
10
+ while all other files, in `programs`, `tests` or `examples`,
11
+ receive more limited attention and support for such scenario.
@@ -0,0 +1,24 @@
1
+ LZ4 Library
2
+ Copyright (c) 2011-2020, Yann Collet
3
+ All rights reserved.
4
+
5
+ Redistribution and use in source and binary forms, with or without modification,
6
+ are permitted provided that the following conditions are met:
7
+
8
+ * Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ * Redistributions in binary form must reproduce the above copyright notice, this
12
+ list of conditions and the following disclaimer in the documentation and/or
13
+ other materials provided with the distribution.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
19
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
22
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.