native_db_32bit/
snapshot.rs1use crate::db_type::Result;
2use crate::{Database, DatabaseBuilder};
3use redb::ReadableTable;
4use std::path::Path;
5
6impl Database<'_> {
7 pub fn snapshot<'a>(&self, builder: &'a DatabaseBuilder, path: &Path) -> Result<Database<'a>> {
8 let new_db = builder.create(path)?;
10 let r = self.instance.begin_read()?;
11 let w = new_db.instance.begin_write()?;
12 {
13 for (_, primary_table_definition) in &self.primary_table_definitions {
15 let table = r.open_table(primary_table_definition.redb)?;
16 let mut new_table = w.open_table(primary_table_definition.redb)?;
17 for result in table.iter()? {
18 let (key, value) = result?;
19 new_table.insert(key.value(), value.value())?;
20 }
21
22 for (_, secondary_table_definition) in &primary_table_definition.secondary_tables {
24 let table = r.open_table(secondary_table_definition.redb)?;
25 let mut new_table = w.open_table(secondary_table_definition.redb)?;
26 for result in table.iter()? {
27 let (key, value) = result?;
28 new_table.insert(key.value(), value.value())?;
29 }
30 }
31 }
32 }
33 w.commit()?;
34 Ok(new_db)
35 }
36}