use std::marker::PhantomData;
use alopex_core::async_runtime::{BoxFuture, BoxStream};
use crate::executor::{ExecutionResult, Result, Row};
use crate::storage::AsyncSqlTransaction;
pub struct AsyncExecutor<'txn, T: AsyncSqlTransaction<'txn>> {
txn: T,
_marker: PhantomData<&'txn ()>,
}
impl<'txn, T: AsyncSqlTransaction<'txn>> AsyncExecutor<'txn, T> {
pub fn new(txn: T) -> Self {
Self {
txn,
_marker: PhantomData,
}
}
pub fn execute_async<'a>(&'a mut self, sql: &'a str) -> BoxStream<'a, Result<Row>> {
self.txn.async_query(sql)
}
pub fn execute_ddl_async<'a>(
&'a mut self,
sql: &'a str,
) -> BoxFuture<'a, Result<ExecutionResult>> {
self.txn.async_execute(sql)
}
pub fn execute_dml_async<'a>(
&'a mut self,
sql: &'a str,
) -> BoxFuture<'a, Result<ExecutionResult>> {
self.txn.async_execute(sql)
}
pub fn into_inner(self) -> T {
self.txn
}
}