mirror of
https://github.com/isar/libmdbx.git
synced 2024-12-30 03:14:14 +08:00
60 lines
1.6 KiB
C++
60 lines
1.6 KiB
C++
#include "mdbx.h++"
|
|
|
|
#include <iostream>
|
|
|
|
static void logger_nofmt(MDBX_log_level_t loglevel, const char *function,
|
|
int line, const char *msg, unsigned length) noexcept {
|
|
(void)length;
|
|
(void)loglevel;
|
|
std::cout << function << ":" << line << " " << msg;
|
|
}
|
|
|
|
static char log_buffer[1024];
|
|
|
|
int main(int argc, const char *argv[]) {
|
|
(void)argc;
|
|
(void)argv;
|
|
|
|
mdbx_setup_debug_nofmt(MDBX_LOG_NOTICE, MDBX_DBG_ASSERT, logger_nofmt,
|
|
log_buffer, sizeof(log_buffer));
|
|
|
|
mdbx::path db_filename = "test-cursor-closing";
|
|
mdbx::env::remove(db_filename);
|
|
|
|
mdbx::env_managed env(
|
|
db_filename, mdbx::env_managed::create_parameters(),
|
|
mdbx::env::operate_parameters(42, 0, mdbx::env::nested_transactions));
|
|
|
|
{
|
|
auto txn = env.start_write();
|
|
auto table = txn.create_map("dummy", mdbx::key_mode::usual,
|
|
mdbx::value_mode::single);
|
|
auto cursor_1 = txn.open_cursor(table);
|
|
auto cursor_2 = cursor_1.clone();
|
|
|
|
auto nested = env.start_write(txn);
|
|
auto nested_cursor_1 = nested.open_cursor(table);
|
|
auto nested_cursor_2 = nested_cursor_1.clone();
|
|
auto nested_cursor_3 = cursor_1.clone();
|
|
|
|
auto deep = env.start_write(nested);
|
|
auto deep_cursor_1 = deep.open_cursor(table);
|
|
auto deep_cursor_2 = nested_cursor_1.clone();
|
|
auto deep_cursor_3 = cursor_1.clone();
|
|
deep_cursor_1.close();
|
|
deep.commit();
|
|
deep_cursor_2.close();
|
|
|
|
nested_cursor_1.close();
|
|
nested.abort();
|
|
nested_cursor_2.close();
|
|
|
|
cursor_1.close();
|
|
txn.commit();
|
|
cursor_2.close();
|
|
}
|
|
|
|
std::cout << "OK\n";
|
|
return EXIT_SUCCESS;
|
|
}
|