pub mod store;
#[cfg(feature = "pgwire")]
pub mod pgwire;
use std::sync::Arc;
use crate::store::Store;
use datapress_core::backend::Backend;
use datapress_core::config::AppConfig;
pub async fn serve(cfg: AppConfig) -> std::io::Result<()> {
datapress_core::banner::print();
let store = Arc::new(Store::load(&cfg).await.expect("failed to load datasets"));
#[cfg(feature = "pgwire")]
let _pgwire = if cfg.server.pgwire.enabled {
let ctx = store.session_context().clone();
Some(pgwire::spawn_pgwire(ctx, cfg.server.pgwire.clone())?)
} else {
None
};
#[cfg(not(feature = "pgwire"))]
if cfg.server.pgwire.enabled {
log::warn!(
"server.pgwire.enabled = true but this binary was built without the \
`pgwire` feature; the PostgreSQL wire protocol server will not start"
);
}
let store: Arc<dyn Backend> = store;
datapress_core::server::serve(cfg, store, "DataFusion").await
}
pub async fn serve_with_shutdown(
cfg: AppConfig,
shutdown: impl std::future::Future<Output = ()> + Send + 'static,
) -> std::io::Result<()> {
datapress_core::banner::print();
let store = Arc::new(Store::load(&cfg).await.expect("failed to load datasets"));
#[cfg(feature = "pgwire")]
let pgwire_server = if cfg.server.pgwire.enabled {
let ctx = store.session_context().clone();
Some(pgwire::spawn_pgwire(ctx, cfg.server.pgwire.clone())?)
} else {
None
};
#[cfg(not(feature = "pgwire"))]
if cfg.server.pgwire.enabled {
log::warn!(
"server.pgwire.enabled = true but this binary was built without the \
`pgwire` feature; the PostgreSQL wire protocol server will not start"
);
}
let store: Arc<dyn Backend> = store;
let result =
datapress_core::server::serve_with_shutdown(cfg, store, "DataFusion", shutdown).await;
#[cfg(feature = "pgwire")]
drop(pgwire_server);
result
}