package examples import "core:fmt" import "core:os" import "core:sys/posix" import mdb "../../lmdb-odin" // 0o660 DB_MODE :: posix.mode_t{.IWGRP, .IRGRP, .IWUSR, .IRUSR} main :: proc() { environment: ^mdb.Env // Create environment for lmdb mdb.panic_on_err(mdb.env_create(&environment)) // Create directory for databases. Won't do anything if it already exists. // 0o774 gives all permissions for owner and group, read for everyone else. os.make_directory("./db", 0o774) // Open the database files (creates them if they don't already exist) mdb.panic_on_err(mdb.env_open(environment, "./db", 0, DB_MODE)) // Transactions txn_handle: ^mdb.Txn db_handle: mdb.Dbi // Put transaction key := 7 key_val := mdb.autoval(&key) put_data := 12 put_data_val := mdb.autoval(&put_data) mdb.panic_on_err(mdb.txn_begin(environment, nil, 0, &txn_handle)) mdb.panic_on_err(mdb.dbi_open(txn_handle, nil, 0, &db_handle)) mdb.panic_on_err(mdb.put(txn_handle, db_handle, &key_val.raw, &put_data_val.raw, 0)) mdb.panic_on_err(mdb.txn_commit(txn_handle)) // Get transaction get_data_val := mdb.nil_autoval(int) mdb.panic_on_err(mdb.txn_begin(environment, nil, 0, &txn_handle)) mdb.panic_on_err(mdb.get(txn_handle, db_handle, &key_val.raw, &get_data_val.raw)) mdb.panic_on_err(mdb.txn_commit(txn_handle)) data_cpy := mdb.autoval_get_data(&get_data_val)^ fmt.println("Get result:", data_cpy) }