MCPcopy Create free account
hub / github.com/SeaQL/sea-orm / begin

Method begin

src/database/transaction.rs:32–91  ·  view source on GitHub ↗
(
        conn: Arc<Mutex<InnerConnection>>,
        backend: DbBackend,
        metric_callback: Option<crate::metric::Callback>,
        isolation_level: Option<IsolationLevel>,
        access_mode:

Source from the content-addressed store, hash-verified

30impl DatabaseTransaction {
31 #[instrument(level = "trace", skip(metric_callback))]
32 pub(crate) async fn begin(
33 conn: Arc<Mutex<InnerConnection>>,
34 backend: DbBackend,
35 metric_callback: Option<crate::metric::Callback>,
36 isolation_level: Option<IsolationLevel>,
37 access_mode: Option<AccessMode>,
38 ) -> Result<DatabaseTransaction, DbErr> {
39 let res = DatabaseTransaction {
40 conn,
41 backend,
42 open: true,
43 metric_callback,
44 };
45 match *res.conn.lock().await {
46 #[cfg(feature = "sqlx-mysql")]
47 InnerConnection::MySql(ref mut c) => {
48 // in MySQL SET TRANSACTION operations must be executed before transaction start
49 crate::driver::sqlx_mysql::set_transaction_config(c, isolation_level, access_mode)
50 .await?;
51 <sqlx::MySql as sqlx::Database>::TransactionManager::begin(c, None)
52 .await
53 .map_err(sqlx_error_to_query_err)
54 }
55 #[cfg(feature = "sqlx-postgres")]
56 InnerConnection::Postgres(ref mut c) => {
57 <sqlx::Postgres as sqlx::Database>::TransactionManager::begin(c, None)
58 .await
59 .map_err(sqlx_error_to_query_err)?;
60 // in PostgreSQL SET TRANSACTION operations must be executed inside transaction
61 crate::driver::sqlx_postgres::set_transaction_config(
62 c,
63 isolation_level,
64 access_mode,
65 )
66 .await
67 }
68 #[cfg(feature = "sqlx-sqlite")]
69 InnerConnection::Sqlite(ref mut c) => {
70 // in SQLite isolation level and access mode are global settings
71 crate::driver::sqlx_sqlite::set_transaction_config(c, isolation_level, access_mode)
72 .await?;
73 <sqlx::Sqlite as sqlx::Database>::TransactionManager::begin(c, None)
74 .await
75 .map_err(sqlx_error_to_query_err)
76 }
77 #[cfg(feature = "mock")]
78 InnerConnection::Mock(ref mut c) => {
79 c.begin();
80 Ok(())
81 }
82 #[cfg(feature = "proxy")]
83 InnerConnection::Proxy(ref mut c) => {
84 c.begin().await;
85 Ok(())
86 }
87 #[allow(unreachable_patterns)]
88 _ => Err(conn_err("Disconnected")),
89 }?;

Callers 1

transactionMethod · 0.45

Calls 3

conn_errFunction · 0.85
lockMethod · 0.80
set_transaction_configFunction · 0.50

Tested by

no test coverage detected