mod utils;
#[cfg(feature = "integration-tests")]
mod tests {
use std::sync::Arc;
use datafusion::catalog::{CatalogProvider, CatalogProviderList};
use datafusion_common::DataFusionError;
use datafusion_ffi::tests::utils::get_module;
#[tokio::test]
async fn test_catalog() -> datafusion_common::Result<()> {
let module = get_module()?;
let (ctx, codec) = super::utils::ctx_and_codec();
let ffi_catalog =
module
.create_catalog()
.ok_or(DataFusionError::NotImplemented(
"External catalog provider failed to implement create_catalog"
.to_string(),
))?(codec);
let foreign_catalog: Arc<dyn CatalogProvider + Send> = (&ffi_catalog).into();
let _ = ctx.register_catalog("fruit", foreign_catalog);
let df = ctx.table("fruit.apple.purchases").await?;
let results = df.collect().await?;
assert_eq!(results.len(), 2);
let num_rows: usize = results.into_iter().map(|rb| rb.num_rows()).sum();
assert_eq!(num_rows, 5);
Ok(())
}
#[tokio::test]
async fn test_catalog_list() -> datafusion_common::Result<()> {
let module = get_module()?;
let (ctx, codec) = super::utils::ctx_and_codec();
let ffi_catalog_list =
module
.create_catalog_list()
.ok_or(DataFusionError::NotImplemented(
"External catalog provider failed to implement create_catalog_list"
.to_string(),
))?(codec);
let foreign_catalog_list: Arc<dyn CatalogProviderList + Send> =
(&ffi_catalog_list).into();
ctx.register_catalog_list(foreign_catalog_list);
let df = ctx.table("blue.apple.purchases").await?;
let results = df.collect().await?;
assert_eq!(results.len(), 2);
let num_rows: usize = results.into_iter().map(|rb| rb.num_rows()).sum();
assert_eq!(num_rows, 5);
Ok(())
}
}