Skip to content

Instantly share code, notes, and snippets.

@jnrbsn
Created September 21, 2024 21:29
Show Gist options
  • Save jnrbsn/88a0fcebb6a14d3f0ff22945a213c603 to your computer and use it in GitHub Desktop.
Save jnrbsn/88a0fcebb6a14d3f0ff22945a213c603 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include "liblmdb/lmdb.h"
void
check_err(int err)
{
if (err != 0) {
fprintf(stderr, "ERROR (%d): %s\n", err, mdb_strerror(err));
exit(EXIT_FAILURE);
}
}
int
main(void)
{
int err = 0;
MDB_env *env;
check_err(mdb_env_create(&env));
check_err(mdb_env_open(env, "./db", 0, 0644));
MDB_txn *txn_rw;
MDB_dbi dbi;
MDB_val key = { .mv_size = 4, .mv_data = "foo" };
MDB_val val1 = { .mv_size = 4, .mv_data = "bar" };
check_err(mdb_txn_begin(env, NULL, 0, &txn_rw));
check_err(mdb_dbi_open(txn_rw, NULL, 0, &dbi));
check_err(mdb_put(txn_rw, dbi, &key, &val1, 0));
check_err(mdb_txn_commit(txn_rw));
MDB_txn *txn_ro;
MDB_val val2;
check_err(mdb_txn_begin(env, NULL, MDB_RDONLY, &txn_ro));
check_err(mdb_get(txn_ro, dbi, &key, &val2));
mdb_txn_reset(txn_ro);
printf("%s -> %s\n", (char *) key.mv_data, (char *) val2.mv_data);
MDB_val val3 = { .mv_size = 12, .mv_data = "hello world" };
check_err(mdb_txn_begin(env, NULL, 0, &txn_rw));
check_err(mdb_put(txn_rw, dbi, &key, &val3, 0));
check_err(mdb_txn_commit(txn_rw));
MDB_val val4;
check_err(mdb_txn_renew(txn_ro));
check_err(mdb_get(txn_ro, dbi, &key, &val4));
mdb_txn_reset(txn_ro);
printf("%s -> %s\n", (char *) key.mv_data, (char *) val4.mv_data);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment