clickhouse_datafusion/providers/
utils.rs

1use std::sync::Arc;
2
3use datafusion::catalog::TableProvider;
4
5use super::table::ClickHouseTableProvider;
6
7/// Helper function to extract a `ClickHouseTableProvider` from a `dyn TableProvider`.
8#[cfg(feature = "federation")]
9pub fn extract_clickhouse_provider(
10    provider: &Arc<dyn TableProvider>,
11) -> Option<&ClickHouseTableProvider> {
12    let fed_provider =
13        provider.as_any().downcast_ref::<datafusion_federation::FederatedTableProviderAdaptor>()?;
14    fed_provider
15        .table_provider
16        .as_ref()
17        .and_then(|p| p.as_any().downcast_ref::<ClickHouseTableProvider>())
18}
19
20/// Helper function to extract a `ClickHouseTableProvider` from a `dyn TableProvider`.
21#[cfg(not(feature = "federation"))]
22pub fn extract_clickhouse_provider(
23    provider: &Arc<dyn TableProvider>,
24) -> Option<&ClickHouseTableProvider> {
25    provider.as_any().downcast_ref::<ClickHouseTableProvider>()
26}