sqlx_core_oldapi/any/
transaction.rs1use 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 }
37
38 fn commit(conn: &mut AnyConnection) -> BoxFuture<'_, Result<(), Error>> {
39 match &mut conn.0 {
40 #[cfg(feature = "postgres")]
41 AnyConnectionKind::Postgres(conn) => {
42 <crate::postgres::Postgres as Database>::TransactionManager::commit(conn)
43 }
44
45 #[cfg(feature = "mysql")]
46 AnyConnectionKind::MySql(conn) => {
47 <crate::mysql::MySql as Database>::TransactionManager::commit(conn)
48 }
49
50 #[cfg(feature = "sqlite")]
51 AnyConnectionKind::Sqlite(conn) => {
52 <crate::sqlite::Sqlite as Database>::TransactionManager::commit(conn)
53 }
54
55 #[cfg(feature = "mssql")]
56 AnyConnectionKind::Mssql(conn) => {
57 <crate::mssql::Mssql as Database>::TransactionManager::commit(conn)
58 }
59 }
60 }
61
62 fn rollback(conn: &mut AnyConnection) -> BoxFuture<'_, Result<(), Error>> {
63 match &mut conn.0 {
64 #[cfg(feature = "postgres")]
65 AnyConnectionKind::Postgres(conn) => {
66 <crate::postgres::Postgres as Database>::TransactionManager::rollback(conn)
67 }
68
69 #[cfg(feature = "mysql")]
70 AnyConnectionKind::MySql(conn) => {
71 <crate::mysql::MySql as Database>::TransactionManager::rollback(conn)
72 }
73
74 #[cfg(feature = "sqlite")]
75 AnyConnectionKind::Sqlite(conn) => {
76 <crate::sqlite::Sqlite as Database>::TransactionManager::rollback(conn)
77 }
78
79 #[cfg(feature = "mssql")]
80 AnyConnectionKind::Mssql(conn) => {
81 <crate::mssql::Mssql as Database>::TransactionManager::rollback(conn)
82 }
83 }
84 }
85
86 fn start_rollback(conn: &mut AnyConnection) {
87 match &mut conn.0 {
88 #[cfg(feature = "postgres")]
89 AnyConnectionKind::Postgres(conn) => {
90 <crate::postgres::Postgres as Database>::TransactionManager::start_rollback(conn)
91 }
92
93 #[cfg(feature = "mysql")]
94 AnyConnectionKind::MySql(conn) => {
95 <crate::mysql::MySql as Database>::TransactionManager::start_rollback(conn)
96 }
97
98 #[cfg(feature = "sqlite")]
99 AnyConnectionKind::Sqlite(conn) => {
100 <crate::sqlite::Sqlite as Database>::TransactionManager::start_rollback(conn)
101 }
102
103 #[cfg(feature = "mssql")]
104 AnyConnectionKind::Mssql(conn) => {
105 <crate::mssql::Mssql as Database>::TransactionManager::start_rollback(conn)
106 }
107 }
108 }
109}