/
germanubis
/
sqlx
ΠΠ±Π·ΠΎΡ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
ΠΠΎΠΉΡΠΈ
/
germanubis
/
sqlx
ΠΠΎΠ΄
ΠΠ°ΠΏΡΠΎΡΡ
0
ΠΠ°Π΄Π°ΡΠΈ
ΠΠΈΠΊΠΈ
ΠΠ°ΠΊΠ΅ΡΡ
0
Π Π΅Π»ΠΈΠ·Ρ
0
ΠΠ½Π°Π»ΠΈΡΠΈΠΊΠ°
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ
v0.8.6
sqlx-sqlite/src/transaction.rs
48 ΡΡΡΠΎΠΊ
1 KB
Austin Bonander
Merge of #3427 (by @mpyw) and #3614 (by @bonsairobo) (#3765)
11 ΠΌΠ°Ρ 2025, 00:29
ΠΠ΅ Π²Π΅ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½
11 ΠΌΠ°Ρ 2025, 00:29
393b731
ΠΠΎΠ΄
ΠΠ²ΡΠΎΡΡΡΠ²ΠΎ
Π ΡΡΠΌ ΠΊΠΎΠ΄?
use futures_core::future::BoxFuture; use std::borrow::Cow; use sqlx_core::error::Error; use sqlx_core::transaction::TransactionManager; use crate::{Sqlite, SqliteConnection}; /// Implementation of [`TransactionManager`] for SQLite. pub struct SqliteTransactionManager; impl TransactionManager for SqliteTransactionManager { type Database = Sqlite; fn begin<'conn>( conn: &'conn mut SqliteConnection, statement: Option<Cow<'static, str>>, ) -> BoxFuture<'conn, Result<(), Error>> { Box::pin(async { let is_custom_statement = statement.is_some(); conn.worker.begin(statement).await?; if is_custom_statement { // Check that custom statement actually put the connection into a transaction. let mut handle = conn.lock_handle().await?; if !handle.in_transaction() { return Err(Error::BeginFailed); } } Ok(()) }) } fn commit(conn: &mut SqliteConnection) -> BoxFuture<'_, Result<(), Error>> { Box::pin(conn.worker.commit()) } fn rollback(conn: &mut SqliteConnection) -> BoxFuture<'_, Result<(), Error>> { Box::pin(conn.worker.rollback()) } fn start_rollback(conn: &mut SqliteConnection) { conn.worker.start_rollback().ok(); } fn get_transaction_depth(conn: &SqliteConnection) -> usize { conn.worker.shared.get_transaction_depth() } }