From 4269a1fe7a6074328bb974aed6f16725e653bdcf Mon Sep 17 00:00:00 2001 From: Nikita Sivukhin Date: Wed, 30 Jul 2025 00:44:45 +0400 Subject: [PATCH] add helper WalSession RAII-wrapper --- packages/turso-sync/src/wal_session.rs | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 packages/turso-sync/src/wal_session.rs diff --git a/packages/turso-sync/src/wal_session.rs b/packages/turso-sync/src/wal_session.rs new file mode 100644 index 000000000..88846de51 --- /dev/null +++ b/packages/turso-sync/src/wal_session.rs @@ -0,0 +1,40 @@ +use crate::Result; + +pub struct WalSession<'a> { + conn: &'a turso::Connection, + in_txn: bool, +} + +impl<'a> WalSession<'a> { + pub fn new(conn: &'a turso::Connection) -> Self { + Self { + conn, + in_txn: false, + } + } + pub fn begin(&mut self) -> Result<()> { + assert!(!self.in_txn); + self.conn.wal_insert_begin()?; + self.in_txn = true; + Ok(()) + } + pub fn end(&mut self) -> Result<()> { + assert!(self.in_txn); + self.conn.wal_insert_end()?; + self.in_txn = false; + Ok(()) + } + pub fn in_txn(&self) -> bool { + self.in_txn + } +} + +impl<'a> Drop for WalSession<'a> { + fn drop(&mut self) { + if self.in_txn { + let _ = self + .end() + .inspect_err(|e| tracing::error!("failed to close WAL session: {}", e)); + } + } +}