|
1 | 1 | use crate::{ |
2 | 2 | AccessMode, ConnectionTrait, DatabaseTransaction, ExecResult, IsolationLevel, QueryResult, |
3 | 3 | Schema, SchemaBuilder, Statement, StatementBuilder, StreamTrait, TransactionError, |
4 | | - TransactionTrait, error::*, |
| 4 | + TransactionOptions, TransactionTrait, error::*, |
5 | 5 | }; |
6 | 6 | use std::{fmt::Debug, future::Future, pin::Pin}; |
7 | 7 | use tracing::instrument; |
@@ -357,9 +357,11 @@ impl TransactionTrait for DatabaseConnection { |
357 | 357 | conn.begin(None, None).await |
358 | 358 | } |
359 | 359 | #[cfg(feature = "sqlx-sqlite")] |
360 | | - DatabaseConnectionType::SqlxSqlitePoolConnection(conn) => conn.begin(None, None).await, |
| 360 | + DatabaseConnectionType::SqlxSqlitePoolConnection(conn) => { |
| 361 | + conn.begin(None, None, None).await |
| 362 | + } |
361 | 363 | #[cfg(feature = "rusqlite")] |
362 | | - DatabaseConnectionType::RusqliteSharedConnection(conn) => conn.begin(None, None), |
| 364 | + DatabaseConnectionType::RusqliteSharedConnection(conn) => conn.begin(None, None, None), |
363 | 365 | #[cfg(feature = "mock")] |
364 | 366 | DatabaseConnectionType::MockDatabaseConnection(conn) => { |
365 | 367 | DatabaseTransaction::new_mock(Arc::clone(conn), None).await |
@@ -389,11 +391,50 @@ impl TransactionTrait for DatabaseConnection { |
389 | 391 | } |
390 | 392 | #[cfg(feature = "sqlx-sqlite")] |
391 | 393 | DatabaseConnectionType::SqlxSqlitePoolConnection(conn) => { |
| 394 | + conn.begin(_isolation_level, _access_mode, None).await |
| 395 | + } |
| 396 | + #[cfg(feature = "rusqlite")] |
| 397 | + DatabaseConnectionType::RusqliteSharedConnection(conn) => { |
| 398 | + conn.begin(_isolation_level, _access_mode, None) |
| 399 | + } |
| 400 | + #[cfg(feature = "mock")] |
| 401 | + DatabaseConnectionType::MockDatabaseConnection(conn) => { |
| 402 | + DatabaseTransaction::new_mock(Arc::clone(conn), None).await |
| 403 | + } |
| 404 | + #[cfg(feature = "proxy")] |
| 405 | + DatabaseConnectionType::ProxyDatabaseConnection(conn) => { |
| 406 | + DatabaseTransaction::new_proxy(conn.clone(), None).await |
| 407 | + } |
| 408 | + DatabaseConnectionType::Disconnected => Err(conn_err("Disconnected")), |
| 409 | + } |
| 410 | + } |
| 411 | + |
| 412 | + #[instrument(level = "trace")] |
| 413 | + async fn begin_with_options( |
| 414 | + &self, |
| 415 | + TransactionOptions { |
| 416 | + isolation_level: _isolation_level, |
| 417 | + access_mode: _access_mode, |
| 418 | + sqlite_transaction_mode: _sqlite_transaction_mode, |
| 419 | + }: TransactionOptions, |
| 420 | + ) -> Result<DatabaseTransaction, DbErr> { |
| 421 | + match &self.inner { |
| 422 | + #[cfg(feature = "sqlx-mysql")] |
| 423 | + DatabaseConnectionType::SqlxMySqlPoolConnection(conn) => { |
392 | 424 | conn.begin(_isolation_level, _access_mode).await |
393 | 425 | } |
| 426 | + #[cfg(feature = "sqlx-postgres")] |
| 427 | + DatabaseConnectionType::SqlxPostgresPoolConnection(conn) => { |
| 428 | + conn.begin(_isolation_level, _access_mode).await |
| 429 | + } |
| 430 | + #[cfg(feature = "sqlx-sqlite")] |
| 431 | + DatabaseConnectionType::SqlxSqlitePoolConnection(conn) => { |
| 432 | + conn.begin(_isolation_level, _access_mode, _sqlite_transaction_mode) |
| 433 | + .await |
| 434 | + } |
394 | 435 | #[cfg(feature = "rusqlite")] |
395 | 436 | DatabaseConnectionType::RusqliteSharedConnection(conn) => { |
396 | | - conn.begin(_isolation_level, _access_mode) |
| 437 | + conn.begin(_isolation_level, _access_mode, _sqlite_transaction_mode) |
397 | 438 | } |
398 | 439 | #[cfg(feature = "mock")] |
399 | 440 | DatabaseConnectionType::MockDatabaseConnection(conn) => { |
|
0 commit comments