diff --git a/sea-orm-sync/src/driver/sqlx_postgres.rs b/sea-orm-sync/src/driver/sqlx_postgres.rs index ace9c5c0d..c54722541 100644 --- a/sea-orm-sync/src/driver/sqlx_postgres.rs +++ b/sea-orm-sync/src/driver/sqlx_postgres.rs @@ -317,23 +317,21 @@ pub(crate) fn set_transaction_config( isolation_level: Option, access_mode: Option, ) -> Result<(), DbErr> { + let mut settings = Vec::new(); + if let Some(isolation_level) = isolation_level { - let stmt = Statement { - sql: format!("SET TRANSACTION ISOLATION LEVEL {isolation_level}"), - values: None, - db_backend: DbBackend::Postgres, - }; - let query = sqlx_query(&stmt); - conn.execute(query).map_err(sqlx_error_to_exec_err)?; + settings.push(format!("ISOLATION LEVEL {isolation_level}")); } + if let Some(access_mode) = access_mode { - let stmt = Statement { - sql: format!("SET TRANSACTION {access_mode}"), - values: None, - db_backend: DbBackend::Postgres, - }; - let query = sqlx_query(&stmt); - conn.execute(query).map_err(sqlx_error_to_exec_err)?; + settings.push(access_mode.to_string()); + } + + if !settings.is_empty() { + let sql = format!("SET TRANSACTION {}", settings.join(" ")); + sqlx::query(&sql) + .execute(&mut **conn) + .map_err(sqlx_error_to_exec_err)?; } Ok(()) } diff --git a/src/driver/sqlx_postgres.rs b/src/driver/sqlx_postgres.rs index 48ceff88c..142dd37f7 100644 --- a/src/driver/sqlx_postgres.rs +++ b/src/driver/sqlx_postgres.rs @@ -14,8 +14,7 @@ use tracing::instrument; use crate::{ AccessMode, ConnectOptions, DatabaseConnection, DatabaseConnectionType, DatabaseTransaction, - DbBackend, IsolationLevel, QueryStream, Statement, TransactionError, debug_print, error::*, - executor::*, + IsolationLevel, QueryStream, Statement, TransactionError, debug_print, error::*, executor::*, }; use super::sqlx_common::*; @@ -328,23 +327,22 @@ pub(crate) async fn set_transaction_config( isolation_level: Option, access_mode: Option, ) -> Result<(), DbErr> { + let mut settings = Vec::new(); + if let Some(isolation_level) = isolation_level { - let stmt = Statement { - sql: format!("SET TRANSACTION ISOLATION LEVEL {isolation_level}"), - values: None, - db_backend: DbBackend::Postgres, - }; - let query = sqlx_query(&stmt); - conn.execute(query).await.map_err(sqlx_error_to_exec_err)?; + settings.push(format!("ISOLATION LEVEL {isolation_level}")); } + if let Some(access_mode) = access_mode { - let stmt = Statement { - sql: format!("SET TRANSACTION {access_mode}"), - values: None, - db_backend: DbBackend::Postgres, - }; - let query = sqlx_query(&stmt); - conn.execute(query).await.map_err(sqlx_error_to_exec_err)?; + settings.push(access_mode.to_string()); + } + + if !settings.is_empty() { + let sql = format!("SET TRANSACTION {}", settings.join(" ")); + sqlx::query(&sql) + .execute(&mut **conn) + .await + .map_err(sqlx_error_to_exec_err)?; } Ok(()) }