use crate::adapters::params::convert_params;
use crate::middleware::{
ConversionMode, ResultSet, RowValues, SqlMiddlewareDbError, StatementCacheMode,
};
use crate::turso::params::Params as TursoParams;
pub async fn execute_batch(
turso_conn: &turso::Connection,
query: &str,
) -> Result<(), SqlMiddlewareDbError> {
turso_conn.execute_batch(query).await.map_err(|e| {
SqlMiddlewareDbError::ExecutionError(format!("Turso execute_batch error: {e}"))
})
}
pub async fn execute_select(
turso_conn: &turso::Connection,
query: &str,
params: &[RowValues],
statement_cache_mode: StatementCacheMode,
) -> Result<ResultSet, SqlMiddlewareDbError> {
let converted = convert_params::<TursoParams>(params, ConversionMode::Query)?;
let mut stmt = match statement_cache_mode {
StatementCacheMode::Cached => turso_conn.prepare_cached(query).await,
StatementCacheMode::Uncached => turso_conn.prepare(query).await,
}
.map_err(|e| SqlMiddlewareDbError::ExecutionError(format!("Turso prepare error: {e}")))?;
let cols = stmt.column_names();
let cols_arc = std::sync::Arc::new(cols);
let rows = stmt
.query(converted.0)
.await
.map_err(|e| SqlMiddlewareDbError::ExecutionError(format!("Turso query error: {e}")))?;
crate::turso::query::build_result_set(rows, Some(cols_arc)).await
}
pub async fn execute_dml(
turso_conn: &turso::Connection,
query: &str,
params: &[RowValues],
) -> Result<usize, SqlMiddlewareDbError> {
let converted = convert_params::<TursoParams>(params, ConversionMode::Execute)?;
let affected = turso_conn
.execute(query, converted.0)
.await
.map_err(|e| SqlMiddlewareDbError::ExecutionError(format!("Turso execute error: {e}")))?;
usize::try_from(affected).map_err(|e| {
SqlMiddlewareDbError::ExecutionError(format!("Turso affected rows conversion error: {e}"))
})
}