nested/
nested.rs

1use std::error::Error;
2use std::fs;
3use std::path::Path;
4
5use smolheed::EnvOpenOptions;
6
7fn main() -> Result<(), Box<dyn Error>> {
8    let path = Path::new("target").join("heed.mdb");
9
10    fs::create_dir_all(&path)?;
11
12    let env = EnvOpenOptions::new()
13        .map_size(10 * 1024 * 1024) // 10MB
14        .max_dbs(3000)
15        .open(path)?;
16
17    // here the key will be an str and the data will be a slice of u8
18    let db = env.create_database(None)?;
19
20    // clear db
21    let mut wtxn = env.write_txn()?;
22    db.clear(&mut wtxn)?;
23    wtxn.commit()?;
24
25    // -----
26
27    let mut wtxn = env.write_txn()?;
28    let mut nwtxn = env.nested_write_txn(&mut wtxn)?;
29
30    db.put(&mut nwtxn, b"what", &[4, 5][..])?;
31    let ret = db.get(&nwtxn, b"what")?;
32    println!("nested(1) \"what\": {:?}", ret);
33
34    println!("nested(1) abort");
35    nwtxn.abort()?;
36
37    let ret = db.get(&wtxn, b"what")?;
38    println!("parent \"what\": {:?}", ret);
39
40    // ------
41    println!();
42
43    // also try with multiple levels of nesting
44    let mut nwtxn = env.nested_write_txn(&mut wtxn)?;
45    let mut nnwtxn = env.nested_write_txn(&mut nwtxn)?;
46
47    db.put(&mut nnwtxn, b"humm...", &[6, 7][..])?;
48    let ret = db.get(&nnwtxn, b"humm...")?;
49    println!("nested(2) \"humm...\": {:?}", ret);
50
51    println!("nested(2) commit");
52    nnwtxn.commit()?;
53    nwtxn.commit()?;
54
55    let ret = db.get(&wtxn, b"humm...")?;
56    println!("parent \"humm...\": {:?}", ret);
57
58    db.put(&mut wtxn, b"hello", &[2, 3][..])?;
59
60    let ret = db.get(&wtxn, b"hello")?;
61    println!("parent \"hello\": {:?}", ret);
62
63    println!("parent commit");
64    wtxn.commit()?;
65
66    // ------
67    println!();
68
69    let rtxn = env.read_txn()?;
70
71    let ret = db.get(&rtxn, b"hello")?;
72    println!("parent (reader) \"hello\": {:?}", ret);
73
74    let ret = db.get(&rtxn, b"humm...")?;
75    println!("parent (reader) \"humm...\": {:?}", ret);
76
77    Ok(())
78}