sql_middleware/postgres/
executor.rs1use super::params::Params;
2use super::query::build_result_set;
3use crate::middleware::{ResultSet, RowValues, SqlMiddlewareDbError};
4use deadpool_postgres::Object;
5
6pub async fn execute_batch(
11 pg_client: &mut Object,
12 query: &str,
13) -> Result<(), SqlMiddlewareDbError> {
14 let tx = pg_client.transaction().await?;
16
17 tx.batch_execute(query).await?;
19
20 tx.commit().await?;
22
23 Ok(())
24}
25
26pub async fn execute_select(
31 pg_client: &mut Object,
32 query: &str,
33 params: &[RowValues],
34) -> Result<ResultSet, SqlMiddlewareDbError> {
35 let params = Params::convert(params)?;
36 let tx = pg_client.transaction().await?;
37 let stmt = tx.prepare(query).await?;
38 let result_set = build_result_set(&stmt, params.as_refs(), &tx).await?;
39 tx.commit().await?;
40 Ok(result_set)
41}
42
43pub async fn execute_dml(
48 pg_client: &mut Object,
49 query: &str,
50 params: &[RowValues],
51) -> Result<usize, SqlMiddlewareDbError> {
52 let params = Params::convert(params)?;
53 let tx = pg_client.transaction().await?;
54
55 let stmt = tx.prepare(query).await?;
56 let rows = tx.execute(&stmt, params.as_refs()).await?;
57 tx.commit().await?;
58
59 usize::try_from(rows).map_err(|e| {
60 SqlMiddlewareDbError::ExecutionError(format!("Invalid rows affected count: {e}"))
61 })
62}