sqlx_core_oldapi/any/
transaction.rs

1use futures_util::future::BoxFuture;
2
3use crate::any::connection::AnyConnectionKind;
4use crate::any::{Any, AnyConnection};
5use crate::database::Database;
6use crate::error::Error;
7use crate::transaction::TransactionManager;
8
9pub struct AnyTransactionManager;
10
11impl TransactionManager for AnyTransactionManager {
12    type Database = Any;
13
14    fn begin(conn: &mut AnyConnection) -> BoxFuture<'_, Result<(), Error>> {
15        match &mut conn.0 {
16            #[cfg(feature = "postgres")]
17            AnyConnectionKind::Postgres(conn) => {
18                <crate::postgres::Postgres as Database>::TransactionManager::begin(conn)
19            }
20
21            #[cfg(feature = "mysql")]
22            AnyConnectionKind::MySql(conn) => {
23                <crate::mysql::MySql as Database>::TransactionManager::begin(conn)
24            }
25
26            #[cfg(feature = "sqlite")]
27            AnyConnectionKind::Sqlite(conn) => {
28                <crate::sqlite::Sqlite as Database>::TransactionManager::begin(conn)
29            }
30
31            #[cfg(feature = "mssql")]
32            AnyConnectionKind::Mssql(conn) => {
33                <crate::mssql::Mssql as Database>::TransactionManager::begin(conn)
34            }
35
36            #[cfg(feature = "odbc")]
37            AnyConnectionKind::Odbc(conn) => {
38                <crate::odbc::Odbc as Database>::TransactionManager::begin(conn)
39            }
40        }
41    }
42
43    fn commit(conn: &mut AnyConnection) -> BoxFuture<'_, Result<(), Error>> {
44        match &mut conn.0 {
45            #[cfg(feature = "postgres")]
46            AnyConnectionKind::Postgres(conn) => {
47                <crate::postgres::Postgres as Database>::TransactionManager::commit(conn)
48            }
49
50            #[cfg(feature = "mysql")]
51            AnyConnectionKind::MySql(conn) => {
52                <crate::mysql::MySql as Database>::TransactionManager::commit(conn)
53            }
54
55            #[cfg(feature = "sqlite")]
56            AnyConnectionKind::Sqlite(conn) => {
57                <crate::sqlite::Sqlite as Database>::TransactionManager::commit(conn)
58            }
59
60            #[cfg(feature = "mssql")]
61            AnyConnectionKind::Mssql(conn) => {
62                <crate::mssql::Mssql as Database>::TransactionManager::commit(conn)
63            }
64
65            #[cfg(feature = "odbc")]
66            AnyConnectionKind::Odbc(conn) => {
67                <crate::odbc::Odbc as Database>::TransactionManager::commit(conn)
68            }
69        }
70    }
71
72    fn rollback(conn: &mut AnyConnection) -> BoxFuture<'_, Result<(), Error>> {
73        match &mut conn.0 {
74            #[cfg(feature = "postgres")]
75            AnyConnectionKind::Postgres(conn) => {
76                <crate::postgres::Postgres as Database>::TransactionManager::rollback(conn)
77            }
78
79            #[cfg(feature = "mysql")]
80            AnyConnectionKind::MySql(conn) => {
81                <crate::mysql::MySql as Database>::TransactionManager::rollback(conn)
82            }
83
84            #[cfg(feature = "sqlite")]
85            AnyConnectionKind::Sqlite(conn) => {
86                <crate::sqlite::Sqlite as Database>::TransactionManager::rollback(conn)
87            }
88
89            #[cfg(feature = "mssql")]
90            AnyConnectionKind::Mssql(conn) => {
91                <crate::mssql::Mssql as Database>::TransactionManager::rollback(conn)
92            }
93
94            #[cfg(feature = "odbc")]
95            AnyConnectionKind::Odbc(conn) => {
96                <crate::odbc::Odbc as Database>::TransactionManager::rollback(conn)
97            }
98        }
99    }
100
101    fn start_rollback(conn: &mut AnyConnection) {
102        match &mut conn.0 {
103            #[cfg(feature = "postgres")]
104            AnyConnectionKind::Postgres(conn) => {
105                <crate::postgres::Postgres as Database>::TransactionManager::start_rollback(conn)
106            }
107
108            #[cfg(feature = "mysql")]
109            AnyConnectionKind::MySql(conn) => {
110                <crate::mysql::MySql as Database>::TransactionManager::start_rollback(conn)
111            }
112
113            #[cfg(feature = "sqlite")]
114            AnyConnectionKind::Sqlite(conn) => {
115                <crate::sqlite::Sqlite as Database>::TransactionManager::start_rollback(conn)
116            }
117
118            #[cfg(feature = "mssql")]
119            AnyConnectionKind::Mssql(conn) => {
120                <crate::mssql::Mssql as Database>::TransactionManager::start_rollback(conn)
121            }
122
123            #[cfg(feature = "odbc")]
124            AnyConnectionKind::Odbc(conn) => {
125                <crate::odbc::Odbc as Database>::TransactionManager::start_rollback(conn)
126            }
127        }
128    }
129}