sqlx_scylladb_core/
transaction.rs

1use std::borrow::Cow;
2
3use futures_core::future::BoxFuture;
4use sqlx::TransactionManager;
5
6use crate::{ScyllaDB, ScyllaDBConnection};
7
8/// Implementation of [sqlx::TransactionManager] for ScyllaDB.
9pub struct ScyllaDBTransactionManager {}
10
11impl TransactionManager for ScyllaDBTransactionManager {
12    type Database = ScyllaDB;
13
14    fn begin<'conn>(
15        conn: &'conn mut ScyllaDBConnection,
16        statement: Option<Cow<'static, str>>,
17    ) -> BoxFuture<'conn, Result<(), sqlx::Error>> {
18        Box::pin(async {
19            conn.begin_transaction(statement).await?;
20
21            Ok(())
22        })
23    }
24
25    fn commit(conn: &mut ScyllaDBConnection) -> BoxFuture<'_, Result<(), sqlx::Error>> {
26        Box::pin(async {
27            conn.commit_transaction().await?;
28
29            Ok(())
30        })
31    }
32
33    fn rollback(conn: &mut ScyllaDBConnection) -> BoxFuture<'_, Result<(), sqlx::Error>> {
34        Box::pin(async {
35            let _ = conn.rollback_transaction();
36
37            Ok(())
38        })
39    }
40
41    fn start_rollback(conn: &mut ScyllaDBConnection) {
42        let _ = conn.rollback_transaction();
43    }
44
45    fn get_transaction_depth(conn: &ScyllaDBConnection) -> usize {
46        conn.get_transaction_depth()
47    }
48}