sqlx_core_oldapi/odbc/
transaction.rs1use crate::error::Error;
2use crate::odbc::{Odbc, OdbcConnection};
3use crate::transaction::TransactionManager;
4use futures_core::future::BoxFuture;
5
6pub struct OdbcTransactionManager;
7
8impl TransactionManager for OdbcTransactionManager {
9 type Database = Odbc;
10
11 fn begin(
12 conn: &mut <Self::Database as crate::database::Database>::Connection,
13 ) -> BoxFuture<'_, Result<(), Error>> {
14 Box::pin(async move { conn.begin_blocking().await })
15 }
16
17 fn commit(
18 conn: &mut <Self::Database as crate::database::Database>::Connection,
19 ) -> BoxFuture<'_, Result<(), Error>> {
20 Box::pin(async move { conn.commit_blocking().await })
21 }
22
23 fn rollback(
24 conn: &mut <Self::Database as crate::database::Database>::Connection,
25 ) -> BoxFuture<'_, Result<(), Error>> {
26 Box::pin(async move { conn.rollback_blocking().await })
27 }
28
29 fn start_rollback(conn: &mut OdbcConnection) {
30 if let Ok(conn) = conn.conn.lock() {
31 if conn.rollback().is_ok() {
32 let _ = conn.set_autocommit(true);
33 }
34 }
35 }
36}