From 07309427fd3b42f93965e44fe9e58040baaaba82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Wed, 18 Sep 2024 07:41:11 +0300 Subject: [PATCH] =?UTF-8?q?mdbx++:=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20`mdbx::txn::?= =?UTF-8?q?put=5Fmultiple=5Fsamelength()`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mdbx.h++ | 34 +++++++++++++------------ test/extra/dupfix_multiple.c++ | 45 ++++++++++++++++++++++------------ 2 files changed, 48 insertions(+), 31 deletions(-) diff --git a/mdbx.h++ b/mdbx.h++ index 91ac0b70..8ccbc9d4 100644 --- a/mdbx.h++ +++ b/mdbx.h++ @@ -4669,25 +4669,26 @@ public: return append(map, kv.key, kv.value, multivalue_order_preserved); } - size_t put_multiple(map_handle map, const slice &key, - const size_t value_length, const void *values_array, - size_t values_count, put_mode mode, - bool allow_partial = false); + size_t put_multiple_samelength(map_handle map, const slice &key, + const size_t value_length, + const void *values_array, size_t values_count, + put_mode mode, bool allow_partial = false); template - size_t put_multiple(map_handle map, const slice &key, - const VALUE *values_array, size_t values_count, - put_mode mode, bool allow_partial = false) { + size_t put_multiple_samelength(map_handle map, const slice &key, + const VALUE *values_array, size_t values_count, + put_mode mode, bool allow_partial = false) { static_assert(::std::is_standard_layout::value && !::std::is_pointer::value && !::std::is_array::value, "Must be a standard layout type!"); - return put_multiple(map, key, sizeof(VALUE), values_array, values_count, - mode, allow_partial); + return put_multiple_samelength(map, key, sizeof(VALUE), values_array, + values_count, mode, allow_partial); } template - void put_multiple(map_handle map, const slice &key, - const ::std::vector &vector, put_mode mode) { - put_multiple(map, key, vector.data(), vector.size(), mode); + void put_multiple_samelength(map_handle map, const slice &key, + const ::std::vector &vector, + put_mode mode) { + put_multiple_samelength(map, key, vector.data(), vector.size(), mode); } inline ptrdiff_t estimate(map_handle map, const pair &from, @@ -6913,10 +6914,11 @@ inline void txn::append(map_handle map, const slice &key, const slice &value, : MDBX_APPEND)); } -inline size_t txn::put_multiple(map_handle map, const slice &key, - const size_t value_length, - const void *values_array, size_t values_count, - put_mode mode, bool allow_partial) { +inline size_t txn::put_multiple_samelength(map_handle map, const slice &key, + const size_t value_length, + const void *values_array, + size_t values_count, put_mode mode, + bool allow_partial) { MDBX_val args[2] = {{const_cast(values_array), value_length}, {nullptr, values_count}}; const int err = ::mdbx_put(handle_, map.dbi, const_cast(&key), args, diff --git a/test/extra/dupfix_multiple.c++ b/test/extra/dupfix_multiple.c++ index 5a70be88..77b9e0d9 100644 --- a/test/extra/dupfix_multiple.c++ +++ b/test/extra/dupfix_multiple.c++ @@ -50,13 +50,20 @@ int main(int argc, const char *argv[]) { const uint64_t array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 42, 17, 99, 0, 33, 333}; txn = env.start_write(); - txn.put_multiple(map, buffer::key_from_u64(13), array + 3, 4, mdbx::upsert); - txn.put_multiple(map, buffer::key_from_u64(10), array + 0, 1, mdbx::upsert); - txn.put_multiple(map, buffer::key_from_u64(12), array + 2, 3, mdbx::upsert); - txn.put_multiple(map, buffer::key_from_u64(15), array + 5, 6, mdbx::upsert); - txn.put_multiple(map, buffer::key_from_u64(14), array + 4, 5, mdbx::upsert); - txn.put_multiple(map, buffer::key_from_u64(11), array + 1, 2, mdbx::upsert); - txn.put_multiple(map, buffer::key_from_u64(16), array + 6, 7, mdbx::upsert); + txn.put_multiple_samelength(map, buffer::key_from_u64(13), array + 3, 4, + mdbx::upsert); + txn.put_multiple_samelength(map, buffer::key_from_u64(10), array + 0, 1, + mdbx::upsert); + txn.put_multiple_samelength(map, buffer::key_from_u64(12), array + 2, 3, + mdbx::upsert); + txn.put_multiple_samelength(map, buffer::key_from_u64(15), array + 5, 6, + mdbx::upsert); + txn.put_multiple_samelength(map, buffer::key_from_u64(14), array + 4, 5, + mdbx::upsert); + txn.put_multiple_samelength(map, buffer::key_from_u64(11), array + 1, 2, + mdbx::upsert); + txn.put_multiple_samelength(map, buffer::key_from_u64(16), array + 6, 7, + mdbx::upsert); txn.commit(); txn = env.start_read(); @@ -119,21 +126,29 @@ int main(int argc, const char *argv[]) { txn.abort(); txn = env.start_write(); - txn.put_multiple(map, buffer::key_from_u64(7), array + 3, 4, mdbx::update); + txn.put_multiple_samelength(map, buffer::key_from_u64(7), array + 3, 4, + mdbx::update); txn.upsert(map, buffer::key_from_u64(10), buffer::key_from_u64(14)); - txn.put_multiple(map, buffer::key_from_u64(11), array + 4, 5, mdbx::upsert); - txn.put_multiple(map, buffer::key_from_u64(12), array + 0, 1, mdbx::update); + txn.put_multiple_samelength(map, buffer::key_from_u64(11), array + 4, 5, + mdbx::upsert); + txn.put_multiple_samelength(map, buffer::key_from_u64(12), array + 0, 1, + mdbx::update); txn.update(map, buffer::key_from_u64(13), buffer::key_from_u64(18)); - txn.put_multiple(map, buffer::key_from_u64(14), array + 2, 3, mdbx::update); + txn.put_multiple_samelength(map, buffer::key_from_u64(14), array + 2, 3, + mdbx::update); txn.update(map, buffer::key_from_u64(15), buffer::key_from_u64(13)); - txn.put_multiple(map, buffer::key_from_u64(16), array + 6, 9, mdbx::update); + txn.put_multiple_samelength(map, buffer::key_from_u64(16), array + 6, 9, + mdbx::update); txn.update(map, buffer::key_from_u64(21), buffer::key_from_u64(17)); txn.update(map, buffer::key_from_u64(22), buffer::key_from_u64(15)); - txn.put_multiple(map, buffer::key_from_u64(23), array + 1, 2, mdbx::update); + txn.put_multiple_samelength(map, buffer::key_from_u64(23), array + 1, 2, + mdbx::update); txn.update(map, buffer::key_from_u64(24), buffer::key_from_u64(16)); - txn.put_multiple(map, buffer::key_from_u64(25), array + 5, 6, mdbx::update); + txn.put_multiple_samelength(map, buffer::key_from_u64(25), array + 5, 6, + mdbx::update); txn.upsert(map, buffer::key_from_u64(26), buffer::key_from_u64(12)); - txn.put_multiple(map, buffer::key_from_u64(27), array + 12, 3, mdbx::update); + txn.put_multiple_samelength(map, buffer::key_from_u64(27), array + 12, 3, + mdbx::update); txn.commit(); txn = env.start_read();