wasm_sql/core/bindings/
query.rs1use sqlx::any::AnyQueryResult;
2
3use crate::core::bindings::SqlHostState;
4use crate::core::bindings::executor::{ErasedExecutor, QueryOrRaw};
5use crate::core::bindings::query_results::QueryResultsImpl;
6use crate::core::bindings::generated::wasm_sql::core::query::QueryExecutor;
7use crate::core::bindings::generated::wasm_sql::core::query_types::{QueryResults, SqlQuery, SqlString};
8use crate::core::bindings::generated::wasm_sql::core::util_types::Error;
9
10impl crate::core::bindings::generated::wasm_sql::core::query::Host for SqlHostState {}
11impl crate::core::bindings::generated::wasm_sql::core::query_types::Host for SqlHostState {}
12
13impl crate::core::bindings::generated::wasm_sql::core::query::HostWithStore for SqlHostState {
14 async fn fetch_all<T>(
15 accessor: &wasmtime::component::Accessor<T, Self>,
16 query: SqlQuery,
17 executor: QueryExecutor,
18 ) -> Result<wasmtime::component::Resource<QueryResults>, Error> {
19 let results = executor
20 .fetch_all(QueryOrRaw::Query(query), accessor)
21 .await?;
22
23 let query_results =
24 accessor.with(|mut access| access.get().table.push(QueryResultsImpl { results }))?;
25
26 Ok(query_results)
27 }
28
29 async fn execute<T>(
30 accessor: &wasmtime::component::Accessor<T, Self>,
31 query: SqlQuery,
32 executor: QueryExecutor,
33 ) -> Result<u64, Error> {
34 let results: AnyQueryResult = executor
35 .execute(QueryOrRaw::Query(query), accessor)
36 .await?
37 .into();
38
39 Ok(results.rows_affected())
40 }
41
42 async fn execute_raw<T>(
43 accessor: &wasmtime::component::Accessor<T, Self>,
44 query: SqlString,
45 executor: QueryExecutor,
46 ) -> Result<(), Error> {
47 executor.execute(QueryOrRaw::Raw(query), accessor).await?;
48
49 Ok(())
50 }
51}