Skip to main content

sql_middleware/sqlite/
executor.rs

1use crate::adapters::params::convert_params;
2use crate::middleware::{
3    ConversionMode, ResultSet, RowValues, SqlMiddlewareDbError, StatementCacheMode,
4};
5
6use super::connection::SqliteConnection;
7use super::params::Params;
8use super::query::build_result_set;
9
10/// Execute a batch of SQL statements for `SQLite` using auto-commit.
11///
12/// # Errors
13///
14/// Returns `SqlMiddlewareDbError::ExecutionError` if execution fails.
15pub async fn execute_batch(
16    sqlite_client: &mut SqliteConnection,
17    query: &str,
18) -> Result<(), SqlMiddlewareDbError> {
19    sqlite_client.execute_batch(query).await
20}
21
22/// Execute a SELECT query in `SQLite`.
23///
24/// # Errors
25///
26/// Returns `SqlMiddlewareDbError::ExecutionError` if execution or result processing fails.
27pub async fn execute_select(
28    sqlite_client: &mut SqliteConnection,
29    query: &str,
30    params: &[RowValues],
31    statement_cache_mode: StatementCacheMode,
32) -> Result<ResultSet, SqlMiddlewareDbError> {
33    let params_owned = convert_params::<Params>(params, ConversionMode::Query)?.0;
34    sqlite_client
35        .execute_select(query, &params_owned, build_result_set, statement_cache_mode)
36        .await
37}
38
39/// Execute a DML query (INSERT, UPDATE, DELETE) in `SQLite`.
40///
41/// # Errors
42///
43/// Returns `SqlMiddlewareDbError::ExecutionError` if execution fails or rows affected cannot be converted.
44pub async fn execute_dml(
45    sqlite_client: &mut SqliteConnection,
46    query: &str,
47    params: &[RowValues],
48    statement_cache_mode: StatementCacheMode,
49) -> Result<usize, SqlMiddlewareDbError> {
50    let params_owned = convert_params::<Params>(params, ConversionMode::Execute)?.0;
51    sqlite_client
52        .execute_dml(query, &params_owned, statement_cache_mode)
53        .await
54}