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 #[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}