43 lines
1.4 KiB
Odin
43 lines
1.4 KiB
Odin
package examples
|
|
|
|
import "core:fmt"
|
|
import "core:os"
|
|
import "core:sys/posix"
|
|
import mdb "../../lmdb"
|
|
|
|
// 0o660
|
|
DB_MODE :: posix.mode_t{.IWGRP, .IRGRP, .IWUSR, .IRUSR}
|
|
DB_PATH :: "out/debug/lmdb_example_db"
|
|
|
|
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.
|
|
os.make_directory(DB_PATH)
|
|
// Open the database files (creates them if they don't already exist)
|
|
mdb.panic_on_err(mdb.env_open(environment, DB_PATH, {}, DB_MODE))
|
|
|
|
// Transactions
|
|
txn_handle: ^mdb.Txn
|
|
db_handle: mdb.Dbi
|
|
// Put transaction
|
|
key := 7
|
|
key_val := mdb.blittable_val(&key)
|
|
put_data := 12
|
|
put_data_val := mdb.blittable_val(&put_data)
|
|
mdb.panic_on_err(mdb.txn_begin(environment, nil, {}, &txn_handle))
|
|
mdb.panic_on_err(mdb.dbi_open(txn_handle, nil, {}, &db_handle))
|
|
mdb.panic_on_err(mdb.put(txn_handle, db_handle, &key_val, &put_data_val, {}))
|
|
mdb.panic_on_err(mdb.txn_commit(txn_handle))
|
|
|
|
// Get transaction
|
|
data_val: mdb.Val
|
|
mdb.panic_on_err(mdb.txn_begin(environment, nil, {}, &txn_handle))
|
|
mdb.panic_on_err(mdb.get(txn_handle, db_handle, &key_val, &data_val))
|
|
data_cpy := mdb.blittable_copy(&data_val, int)
|
|
mdb.panic_on_err(mdb.txn_commit(txn_handle))
|
|
fmt.println("Get result:", data_cpy)
|
|
}
|