Trait TxRwApi

Source
pub trait TxRwApi<'tx>: TxRwRefApi<'tx> {
    // Required methods
    fn rollback(self) -> Result<()>;
    fn commit(self) -> Result<()>;
}
Expand description

RW transaction API + Commit

Required Methods§

Source

fn rollback(self) -> Result<()>

Closes the transaction and ignores all previous updates.

use bbolt_rs::*;

fn main() -> Result<()> {
  let mut db = Bolt::open_mem()?;

  db.update(|mut tx| {
    let mut b = tx.create_bucket_if_not_exists("test")?;
    b.put("key", "value")?;
    Ok(())
  })?;

  let mut tx = db.begin_rw()?;
  let mut b = tx.bucket_mut("test").unwrap();
  b.put("key", "new value")?;
  tx.rollback()?;

  db.view(|tx| {
    let b = tx.bucket("test").unwrap();
    assert_eq!(Some(b"value".as_slice()), b.get("key"));
    Ok(())
  })?;

  Ok(())
}
Source

fn commit(self) -> Result<()>

commit writes all changes to disk and updates the meta page. Returns an error if a disk write error occurs

use bbolt_rs::*;

fn main() -> Result<()> {
  let mut db = Bolt::open_mem()?;

  let mut tx = db.begin_rw()?;
  tx.create_bucket_if_not_exists("test1")?;
  tx.create_bucket_if_not_exists("test2")?;
  tx.create_bucket_if_not_exists("test3")?;
  tx.commit()?;

  db.view(|tx| {
    let mut c = tx.cursor();
    assert_eq!(Some((b"test1".as_slice(), None)), c.first());
    assert_eq!(Some((b"test2".as_slice(), None)), c.next());
    assert_eq!(Some((b"test3".as_slice(), None)), c.next());
    Ok(())
  })?;

  Ok(())
}

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<'tx> TxRwApi<'tx> for TxRwImpl<'tx>