fix: set transaction mode in single command (#2450)

This commit is contained in:
Janosch Reppnow 2024-12-24 08:23:07 +09:00 committed by GitHub
parent 7dffaf1f20
commit 525ec30905
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -275,18 +275,19 @@ pub(crate) async fn set_transaction_config(
isolation_level: Option<IsolationLevel>, isolation_level: Option<IsolationLevel>,
access_mode: Option<AccessMode>, access_mode: Option<AccessMode>,
) -> Result<(), DbErr> { ) -> Result<(), DbErr> {
let mut settings = Vec::new();
if let Some(isolation_level) = isolation_level { if let Some(isolation_level) = isolation_level {
let stmt = Statement { settings.push(format!("ISOLATION LEVEL {isolation_level}"));
sql: format!("SET TRANSACTION ISOLATION LEVEL {isolation_level}"),
values: None,
db_backend: DbBackend::MySql,
};
let query = sqlx_query(&stmt);
conn.execute(query).await.map_err(sqlx_error_to_exec_err)?;
} }
if let Some(access_mode) = access_mode { if let Some(access_mode) = access_mode {
settings.push(access_mode.to_string());
}
if !settings.is_empty() {
let stmt = Statement { let stmt = Statement {
sql: format!("SET TRANSACTION {access_mode}"), sql: format!("SET TRANSACTION {}", settings.join(", ")),
values: None, values: None,
db_backend: DbBackend::MySql, db_backend: DbBackend::MySql,
}; };