use std::sync::Arc;
use async_trait::async_trait;
use fraiseql_arrow::QueryExecutor;
use fraiseql_core::{db::traits::DatabaseAdapter, runtime::Executor, security::SecurityContext};
pub struct ExecutorQueryAdapter<A: DatabaseAdapter> {
executor: Arc<Executor<A>>,
}
impl<A: DatabaseAdapter> ExecutorQueryAdapter<A> {
pub fn new(executor: Arc<Executor<A>>) -> Self {
Self { executor }
}
}
#[async_trait]
impl<A: DatabaseAdapter + 'static> QueryExecutor for ExecutorQueryAdapter<A> {
async fn execute_with_security(
&self,
query: &str,
variables: Option<&serde_json::Value>,
security_context: &SecurityContext,
) -> Result<String, String> {
self.executor
.execute_with_security(query, variables, security_context)
.await
.map_err(|e| e.to_string())
}
}