sql-middleware 0.7.0

Lightweight async wrappers for tokio-postgres, rusqlite, turso, and tiberius.
Documentation
use super::config::MssqlClient;
use super::query::{bind_query_params, build_result_set, convert_affected_rows};
use crate::middleware::{ResultSet, RowValues, SqlMiddlewareDbError};

/// Execute a batch of SQL statements for SQL Server.
///
/// # Errors
///
/// Returns `SqlMiddlewareDbError::ExecutionError` if execution fails.
#[allow(dead_code)]
pub async fn execute_batch(
    mssql_client: &mut MssqlClient,
    query: &str,
) -> Result<(), SqlMiddlewareDbError> {
    // Execute the batch of queries
    let query_builder = tiberius::Query::new(query);
    query_builder.execute(mssql_client).await.map_err(|e| {
        SqlMiddlewareDbError::ExecutionError(format!("SQL Server batch execution error: {e}"))
    })?;

    Ok(())
}

/// Execute a SELECT query with parameters.
///
/// # Errors
///
/// Returns `SqlMiddlewareDbError::ExecutionError` if execution or result processing fails.
#[allow(dead_code)]
pub async fn execute_select(
    mssql_client: &mut MssqlClient,
    query: &str,
    params: &[RowValues],
) -> Result<ResultSet, SqlMiddlewareDbError> {
    // Use the build_result_set function to handle parameters and execution
    build_result_set(mssql_client, query, params).await
}

/// Execute a DML query (INSERT, UPDATE, DELETE) with parameters.
///
/// # Errors
///
/// Returns `SqlMiddlewareDbError::ExecutionError` if execution fails or rows affected cannot be converted.
#[allow(dead_code)]
pub async fn execute_dml(
    mssql_client: &mut MssqlClient,
    query: &str,
    params: &[RowValues],
) -> Result<usize, SqlMiddlewareDbError> {
    // Prepare and bind the query
    let query_builder = bind_query_params(query, params);

    // Execute the query
    let exec_result = query_builder.execute(mssql_client).await.map_err(|e| {
        SqlMiddlewareDbError::ExecutionError(format!("SQL Server DML execution error: {e}"))
    })?;

    // Get rows affected
    let rows_affected: u64 = exec_result.rows_affected().iter().sum();
    convert_affected_rows(rows_affected)
}