use anyhow::Result;
use crate::{catalog::MATDB_REVS, Db, Value};
impl Db {
pub(crate) fn finish_transaction(&mut self) -> Result<()> {
if !self.written_anything_this_tx {
return Ok(());
}
if let Some(prev) = self.previous_main_root {
self.insert_key(
MATDB_REVS.into(),
vec![Value::Int(self.this_tx_id as i64 - 1)],
vec![
Value::Int(self.this_tx_id as i64 - 1),
Value::Int(prev as i64),
],
)?;
}
self.transaction_finish_freelist_append()?;
self.append_footer()?;
self.flush()?;
if let Some(file) = &self.file {
file.sync_all().unwrap();
}
#[cfg(debug_assertions)]
super::write_op::did_we_leak_memory(self).unwrap();
self.previous_main_root = Some(self.main_tree_root);
self.this_tx_id += 1;
self.written_anything_this_tx = false;
Ok(())
}
}