use std::{collections::HashMap, sync::Arc};
use async_trait::async_trait;
#[cfg(feature = "arrow")]
use fraiseql_arrow::db::{DatabaseAdapter as ArrowDatabaseAdapter, DatabaseError};
use fraiseql_core::db::{
postgres::PostgresAdapter, traits::DatabaseAdapter as CoreDatabaseAdapter,
};
pub struct FlightDatabaseAdapter {
inner: Arc<PostgresAdapter>,
}
impl FlightDatabaseAdapter {
pub fn new(adapter: PostgresAdapter) -> Self {
Self {
inner: Arc::new(adapter),
}
}
pub fn from_arc(adapter: Arc<PostgresAdapter>) -> Self {
Self { inner: adapter }
}
pub fn inner(&self) -> &Arc<PostgresAdapter> {
&self.inner
}
}
#[cfg(feature = "arrow")]
#[async_trait]
impl ArrowDatabaseAdapter for FlightDatabaseAdapter {
async fn execute_raw_query(
&self,
sql: &str,
) -> Result<Vec<HashMap<String, serde_json::Value>>, DatabaseError> {
self.inner
.execute_raw_query(sql)
.await
.map_err(|e: fraiseql_core::error::FraiseQLError| DatabaseError::new(e.to_string()))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_adapter_creation() {
let _adapter: FlightDatabaseAdapter;
}
}