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,167 @@
|
|
|
1
|
+
#include "envmou_query.hpp"
|
|
2
|
+
#include "envmou.hpp"
|
|
3
|
+
|
|
4
|
+
namespace mdbxmou {
|
|
5
|
+
|
|
6
|
+
void async_query::Execute()
|
|
7
|
+
{
|
|
8
|
+
try {
|
|
9
|
+
// стартуем транзакцию
|
|
10
|
+
auto txn = start_transaction();
|
|
11
|
+
for (auto& req : query_)
|
|
12
|
+
{
|
|
13
|
+
mdbx::map_handle dbi{};
|
|
14
|
+
auto db_mode = req.db_mod;
|
|
15
|
+
if (db_mode.val & db_mode::accede) {
|
|
16
|
+
dbi = txn.open_map_accede(req.db);
|
|
17
|
+
} else if (db_mode.val & db_mode::create) {
|
|
18
|
+
dbi = txn.create_map(req.db, req.key_mod, req.val_mod);
|
|
19
|
+
} else {
|
|
20
|
+
dbi = txn.open_map(req.db, req.key_mod, req.val_mod);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
auto mode = req.mode;
|
|
24
|
+
if (mode.val & query_mode::get) {
|
|
25
|
+
do_get(txn, dbi, req);
|
|
26
|
+
} else if (mode.val & query_mode::del) {
|
|
27
|
+
do_del(txn, dbi, req);
|
|
28
|
+
} else {
|
|
29
|
+
do_put(txn, dbi, req);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
txn.commit();
|
|
34
|
+
} catch (const std::exception& e) {
|
|
35
|
+
SetError(e.what());
|
|
36
|
+
} catch (...) {
|
|
37
|
+
SetError("async_query::Execute");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
static Napi::Value write_row(Napi::Env env, const query_line& row)
|
|
42
|
+
{
|
|
43
|
+
auto& param = row.item;
|
|
44
|
+
auto key_mode = row.key_mod;
|
|
45
|
+
auto key_flag = row.key_flag;
|
|
46
|
+
auto mode = row.mode;
|
|
47
|
+
auto js_arr = Napi::Array::New(env, param.size());
|
|
48
|
+
for (std::size_t j = 0; j < param.size(); ++j) {
|
|
49
|
+
const auto& item = param[j];
|
|
50
|
+
Napi::Object js_item = Napi::Object::New(env);
|
|
51
|
+
if (key_mode.val & key_mode::ordinal) {
|
|
52
|
+
js_item.Set("key", (key_flag.val & base_flag::number) ?
|
|
53
|
+
Napi::Number::New(env, item.id_buf) : Napi::BigInt::New(env, item.id_buf));
|
|
54
|
+
} else {
|
|
55
|
+
js_item.Set("key", (key_flag.val & base_flag::string) ?
|
|
56
|
+
Napi::String::New(env, item.key_buf.data(), item.key_buf.size()) :
|
|
57
|
+
Napi::Buffer<char>::Copy(env, item.key_buf.data(), item.key_buf.size()));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// все методы которые должны показать value в результате
|
|
61
|
+
const auto mask{query_mode::get|query_mode::upsert|
|
|
62
|
+
query_mode::update|query_mode::insert_unique};
|
|
63
|
+
if (mode.val & mask)
|
|
64
|
+
{
|
|
65
|
+
auto& val_buf = item.val_buf;
|
|
66
|
+
if (val_buf.empty()) {
|
|
67
|
+
js_item.Set("value", env.Null());
|
|
68
|
+
} else {
|
|
69
|
+
auto value_flag = row.value_flag;
|
|
70
|
+
js_item.Set("value", (value_flag.val & base_flag::string) ?
|
|
71
|
+
Napi::String::New(env, val_buf.data(), val_buf.size()) :
|
|
72
|
+
Napi::Buffer<char>::Copy(env, val_buf.data(), val_buf.size()));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// выдадим флаги удаления и успешности
|
|
77
|
+
if (mode.val & query_mode::del) {
|
|
78
|
+
js_item.Set("found", Napi::Boolean::New(env, item.found));
|
|
79
|
+
}
|
|
80
|
+
js_arr.Set(j, js_item);
|
|
81
|
+
}
|
|
82
|
+
return js_arr;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
void async_query::OnOK()
|
|
86
|
+
{
|
|
87
|
+
--env_;
|
|
88
|
+
|
|
89
|
+
Napi::Env env = Env();
|
|
90
|
+
|
|
91
|
+
if (single_) {
|
|
92
|
+
if (query_.size() == 1) {
|
|
93
|
+
const auto& row = query_[0];
|
|
94
|
+
deferred_.Resolve(write_row(env, row));
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
Napi::Array result = Napi::Array::New(env, query_.size());
|
|
100
|
+
for (std::size_t i = 0; i < query_.size(); ++i) {
|
|
101
|
+
Napi::Object js_row = Napi::Object::New(env);
|
|
102
|
+
const auto& row = query_[i];
|
|
103
|
+
if (!row.db.empty()) {
|
|
104
|
+
js_row.Set("db", Napi::String::New(env, row.db_name));
|
|
105
|
+
}
|
|
106
|
+
result.Set(i, write_row(env, row));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
deferred_.Resolve(result);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
void async_query::OnError(const Napi::Error& e)
|
|
113
|
+
{
|
|
114
|
+
--env_;
|
|
115
|
+
|
|
116
|
+
deferred_.Reject(e.Value());
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
txnmou_managed async_query::start_transaction()
|
|
120
|
+
{
|
|
121
|
+
MDBX_txn *ptr;
|
|
122
|
+
mdbx::error::success_or_throw(::mdbx_txn_begin(env_, nullptr, txn_mode_, &ptr));
|
|
123
|
+
return { ptr };
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
void async_query::do_del(txnmou_managed& txn,
|
|
127
|
+
mdbx::map_handle dbi, query_line& arg0)
|
|
128
|
+
{
|
|
129
|
+
auto key_mode = arg0.key_mod;
|
|
130
|
+
for (auto& q : arg0.item)
|
|
131
|
+
{
|
|
132
|
+
auto key = mdbx::is_ordinal(key_mode) ?
|
|
133
|
+
keymou{q.id_buf} : keymou{q.key_buf};
|
|
134
|
+
q.found = txn.erase(dbi, key);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
void async_query::do_get(const txnmou_managed& txn,
|
|
139
|
+
mdbx::map_handle dbi, query_line& arg0)
|
|
140
|
+
{
|
|
141
|
+
auto key_mode = arg0.key_mod;
|
|
142
|
+
for (auto& q : arg0.item)
|
|
143
|
+
{
|
|
144
|
+
auto key = mdbx::is_ordinal(key_mode) ?
|
|
145
|
+
keymou{q.id_buf} : keymou{q.key_buf};
|
|
146
|
+
mdbx::slice abs{};
|
|
147
|
+
valuemou val{txn.get(dbi, key, abs)};
|
|
148
|
+
q.set(val);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
void async_query::do_put(txnmou_managed& txn,
|
|
153
|
+
mdbx::map_handle dbi, query_line& arg0)
|
|
154
|
+
{
|
|
155
|
+
auto mode = arg0.mode;
|
|
156
|
+
// очищаем put флаги
|
|
157
|
+
auto key_mode = arg0.key_mod;
|
|
158
|
+
for (auto& q : arg0.item)
|
|
159
|
+
{
|
|
160
|
+
auto key = mdbx::is_ordinal(key_mode) ?
|
|
161
|
+
keymou{q.id_buf} : keymou{q.key_buf};
|
|
162
|
+
mdbx::slice val{q.val_buf.data(), q.val_buf.size()};
|
|
163
|
+
txn.put(dbi, key, val, mode);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
} // namespace mdbxmou
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "querymou.hpp"
|
|
4
|
+
|
|
5
|
+
namespace mdbxmou {
|
|
6
|
+
|
|
7
|
+
class envmou;
|
|
8
|
+
|
|
9
|
+
class async_query
|
|
10
|
+
: public Napi::AsyncWorker
|
|
11
|
+
{
|
|
12
|
+
Napi::Promise::Deferred deferred_;
|
|
13
|
+
envmou& env_;
|
|
14
|
+
txn_mode txn_mode_{};
|
|
15
|
+
// действия для выполнения
|
|
16
|
+
query_request query_{};
|
|
17
|
+
// упрощенный режим 1 массив
|
|
18
|
+
bool single_{false};
|
|
19
|
+
|
|
20
|
+
public:
|
|
21
|
+
async_query(Napi::Env env, envmou& e,
|
|
22
|
+
txn_mode txn_mode, query_request query, bool single = false)
|
|
23
|
+
: Napi::AsyncWorker{env}
|
|
24
|
+
, deferred_{Napi::Promise::Deferred::New(env)}
|
|
25
|
+
, env_{e}
|
|
26
|
+
, txn_mode_{txn_mode}
|
|
27
|
+
, query_{std::move(query)}
|
|
28
|
+
, single_{single}
|
|
29
|
+
{ }
|
|
30
|
+
|
|
31
|
+
void Execute() override;
|
|
32
|
+
|
|
33
|
+
void OnOK() override;
|
|
34
|
+
|
|
35
|
+
void OnError(const Napi::Error& e) override;
|
|
36
|
+
|
|
37
|
+
Napi::Promise GetPromise() const {
|
|
38
|
+
return deferred_.Promise();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
txnmou_managed start_transaction();
|
|
42
|
+
|
|
43
|
+
void do_del(txnmou_managed& txn,
|
|
44
|
+
mdbx::map_handle dbi, query_line& arg0);
|
|
45
|
+
|
|
46
|
+
void do_get(const txnmou_managed& txn,
|
|
47
|
+
mdbx::map_handle dbi, query_line& arg0);
|
|
48
|
+
|
|
49
|
+
void do_put(txnmou_managed& txn,
|
|
50
|
+
mdbx::map_handle dbi, query_line& arg0);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
} // namespace mdbxmou
|