| 196 | // the rollback is queued and will be performed on next async operation, like returning the connection to the pool |
| 197 | #[instrument(level = "trace")] |
| 198 | fn start_rollback(&mut self) -> Result<(), DbErr> { |
| 199 | if self.open { |
| 200 | if let Some(mut conn) = self.conn.try_lock() { |
| 201 | match &mut *conn { |
| 202 | #[cfg(feature = "sqlx-mysql")] |
| 203 | InnerConnection::MySql(c) => { |
| 204 | <sqlx::MySql as sqlx::Database>::TransactionManager::start_rollback(c); |
| 205 | } |
| 206 | #[cfg(feature = "sqlx-postgres")] |
| 207 | InnerConnection::Postgres(c) => { |
| 208 | <sqlx::Postgres as sqlx::Database>::TransactionManager::start_rollback(c); |
| 209 | } |
| 210 | #[cfg(feature = "sqlx-sqlite")] |
| 211 | InnerConnection::Sqlite(c) => { |
| 212 | <sqlx::Sqlite as sqlx::Database>::TransactionManager::start_rollback(c); |
| 213 | } |
| 214 | #[cfg(feature = "mock")] |
| 215 | InnerConnection::Mock(c) => { |
| 216 | c.rollback(); |
| 217 | } |
| 218 | #[cfg(feature = "proxy")] |
| 219 | InnerConnection::Proxy(c) => { |
| 220 | c.start_rollback(); |
| 221 | } |
| 222 | #[allow(unreachable_patterns)] |
| 223 | _ => return Err(conn_err("Disconnected")), |
| 224 | } |
| 225 | } else { |
| 226 | //this should never happen |
| 227 | return Err(conn_err("Dropping a locked Transaction")); |
| 228 | } |
| 229 | } |
| 230 | Ok(()) |
| 231 | } |
| 232 | } |
| 233 | |
| 234 | impl Drop for DatabaseTransaction { |