cratestack-rusqlite 0.4.13

On-device SQLite backend for the CrateStack ORM. Sync API, bundled SQLite, no tokio, intended for mobile/embedded use via FFI.
Documentation
//! Shared helper for running an INSERT/UPDATE/DELETE/UPSERT RETURNING
//! single-row statement against a caller-supplied connection.

use cratestack_sql::SqlValue;
use rusqlite::params_from_iter;

use crate::{FromRusqliteRow, RusqliteError, SqlValueParam};

pub(super) fn run_insert_returning<M: FromRusqliteRow>(
    conn: &rusqlite::Connection,
    sql: &str,
    binds: &[SqlValue],
) -> Result<M, RusqliteError> {
    let mut stmt = conn.prepare(sql)?;
    let bind_iter = binds.iter().map(SqlValueParam);
    let mut rows = stmt.query(params_from_iter(bind_iter))?;
    let row = rows.next()?.ok_or(RusqliteError::NotFound)?;
    Ok(M::from_rusqlite_row(row)?)
}