use d1_orm_query::Value;
use serde::Deserialize;
use worker::D1Database;
use crate::{convert::to_js_vec, error::OrmError};
pub async fn raw_query<M>(db: &D1Database, sql: &str, params: &[Value]) -> Result<Vec<M>, OrmError>
where
M: for<'de> Deserialize<'de>,
{
let js = to_js_vec(params);
let result = db.prepare(sql)
.bind(&js).map_err(|_| OrmError::Bind)?
.all().await.map_err(|_| OrmError::Execute)?;
result.results::<M>().map_err(|_| OrmError::Deserialize)
}
pub async fn raw_exec(db: &D1Database, sql: &str, params: &[Value]) -> Result<(), OrmError> {
let js = to_js_vec(params);
db.prepare(sql)
.bind(&js).map_err(|_| OrmError::Bind)?
.run().await.map_err(|_| OrmError::Execute)?;
Ok(())
}