1use d1_orm_query::Value;
2use serde::Deserialize;
3use worker::D1Database;
4use crate::{convert::to_js_vec, error::OrmError};
5
6pub async fn raw_query<M>(db: &D1Database, sql: &str, params: &[Value]) -> Result<Vec<M>, OrmError>
7where
8 M: for<'de> Deserialize<'de>,
9{
10 let js = to_js_vec(params);
11 let result = db.prepare(sql)
12 .bind(&js).map_err(|_| OrmError::Bind)?
13 .all().await.map_err(|_| OrmError::Execute)?;
14 result.results::<M>().map_err(|_| OrmError::Deserialize)
15}
16
17pub async fn raw_exec(db: &D1Database, sql: &str, params: &[Value]) -> Result<(), OrmError> {
18 let js = to_js_vec(params);
19 db.prepare(sql)
20 .bind(&js).map_err(|_| OrmError::Bind)?
21 .run().await.map_err(|_| OrmError::Execute)?;
22 Ok(())
23}