Skip to content

Commit bf984c7

Browse files
authored
feat(datafusion): Split IcebergTableProvider into static and non-static table provider (#1879)
1 parent 7c2d4c3 commit bf984c7

File tree

7 files changed

+390
-115
lines changed

7 files changed

+390
-115
lines changed

bindings/python/Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bindings/python/src/datafusion_table_provider.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use datafusion_ffi::table_provider::FFI_TableProvider;
2323
use iceberg::TableIdent;
2424
use iceberg::io::FileIO;
2525
use iceberg::table::StaticTable;
26-
use iceberg_datafusion::table::IcebergTableProvider;
26+
use iceberg_datafusion::table::IcebergStaticTableProvider;
2727
use pyo3::exceptions::PyRuntimeError;
2828
use pyo3::prelude::*;
2929
use pyo3::types::PyCapsule;
@@ -32,7 +32,7 @@ use crate::runtime::runtime;
3232

3333
#[pyclass(name = "IcebergDataFusionTable")]
3434
pub struct PyIcebergDataFusionTable {
35-
inner: Arc<IcebergTableProvider>,
35+
inner: Arc<IcebergStaticTableProvider>,
3636
}
3737

3838
#[pymethods]
@@ -69,7 +69,7 @@ impl PyIcebergDataFusionTable {
6969

7070
let table = static_table.into_table();
7171

72-
IcebergTableProvider::try_new_from_table(table)
72+
IcebergStaticTableProvider::try_new_from_table(table)
7373
.await
7474
.map_err(|e| {
7575
PyRuntimeError::new_err(format!("Failed to create table provider: {e}"))

crates/integration_tests/tests/shared_tests/datafusion.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use datafusion::error::DataFusionError;
2626
use datafusion::prelude::SessionContext;
2727
use iceberg::{Catalog, CatalogBuilder, TableIdent};
2828
use iceberg_catalog_rest::RestCatalogBuilder;
29-
use iceberg_datafusion::IcebergTableProvider;
29+
use iceberg_datafusion::IcebergStaticTableProvider;
3030
use parquet::arrow::PARQUET_FIELD_ID_META_KEY;
3131

3232
use crate::get_shared_containers;
@@ -47,7 +47,7 @@ async fn test_basic_queries() -> Result<(), DataFusionError> {
4747
let ctx = SessionContext::new();
4848

4949
let table_provider = Arc::new(
50-
IcebergTableProvider::try_new_from_table(table)
50+
IcebergStaticTableProvider::try_new_from_table(table)
5151
.await
5252
.unwrap(),
5353
);

crates/integrations/datafusion/src/schema.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ use iceberg::inspect::MetadataTableType;
2828
use iceberg::{Catalog, NamespaceIdent, Result};
2929

3030
use crate::table::IcebergTableProvider;
31+
use crate::to_datafusion_error;
3132

3233
/// Represents a [`SchemaProvider`] for the Iceberg [`Catalog`], managing
3334
/// access to table providers within a specific namespace.
@@ -113,7 +114,10 @@ impl SchemaProvider for IcebergSchemaProvider {
113114
let metadata_table_type =
114115
MetadataTableType::try_from(metadata_table_name).map_err(DataFusionError::Plan)?;
115116
if let Some(table) = self.tables.get(table_name) {
116-
let metadata_table = table.metadata_table(metadata_table_type);
117+
let metadata_table = table
118+
.metadata_table(metadata_table_type)
119+
.await
120+
.map_err(to_datafusion_error)?;
117121
return Ok(Some(Arc::new(metadata_table)));
118122
} else {
119123
return Ok(None);

0 commit comments

Comments
 (0)