matdb 0.1.0

An experimental embedded SQL-like DBMS
Documentation
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(())
    }
}