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) .max_dbs(3000)
15 .open(path)?;
16
17 let db = env.create_database(None)?;
19
20 let mut wtxn = env.write_txn()?;
22 db.clear(&mut wtxn)?;
23 wtxn.commit()?;
24
25 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 println!();
42
43 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 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}