libsql 0.9.30

The libSQL database library
Documentation
use crate::{
    connection::Conn,
    params::Params,
    transaction::Tx, Result, TransactionBehavior,
};

use super::connection::SyncedConnection;

pub struct SyncedTx(SyncedConnection);

impl SyncedTx {
    pub(crate) async fn begin(
        conn: SyncedConnection,
        tx_behavior: TransactionBehavior,
    ) -> Result<Self> {
        conn.execute(
            match tx_behavior {
                TransactionBehavior::Deferred => "BEGIN DEFERRED",
                TransactionBehavior::Immediate => "BEGIN IMMEDIATE",
                TransactionBehavior::Exclusive => "BEGIN EXCLUSIVE",
                TransactionBehavior::ReadOnly => "BEGIN READONLY",
            },
            Params::None,
        )
        .await?;
        Ok(Self(conn.clone()))
    }
}

#[async_trait::async_trait]
impl Tx for SyncedTx {
    async fn commit(&mut self) -> Result<()> {
        self.0.execute("COMMIT", Params::None).await?;
        Ok(())
    }

    async fn rollback(&mut self) -> Result<()> {
        self.0.execute("ROLLBACK", Params::None).await?;
        Ok(())
    }
}