Skip to main content

wasm_sql/core/bindings/
query.rs

1use 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}