gluesql_core/ast_builder/
execute.rs1use {
2    super::Build,
3    crate::{
4        ast::Statement,
5        executor::Payload,
6        prelude::Glue,
7        result::Result,
8        store::{GStore, GStoreMut},
9    },
10    async_trait::async_trait,
11};
12
13#[async_trait]
14pub trait Execute<T: GStore + GStoreMut>
15where
16    Self: Sized + Build,
17{
18    async fn execute(self, glue: &mut Glue<T>) -> Result<Payload> {
19        let statement = self.build()?;
20
21        glue.execute_stmt(&statement).await
22    }
23}
24
25impl<T: GStore + GStoreMut, B: Build> Execute<T> for B {}
26#[async_trait]
27
28impl Build for Statement {
29    fn build(self) -> Result<Statement> {
30        Ok(self)
31    }
32}