From 61b4193996b2f61b15b54ae2241d200c10b440c3 Mon Sep 17 00:00:00 2001 From: Andrew Lamb Date: Wed, 3 Apr 2024 07:49:25 -0400 Subject: [PATCH] Remove deprecated method --- datafusion/core/src/dataframe/mod.rs | 8 ++-- .../core/src/datasource/cte_worktable.rs | 11 +++-- .../core/src/datasource/listing/table.rs | 44 +++++++++++-------- datafusion/core/src/datasource/view.rs | 9 ++-- .../provider_filter_pushdown.rs | 7 ++- 5 files changed, 45 insertions(+), 34 deletions(-) diff --git a/datafusion/core/src/dataframe/mod.rs b/datafusion/core/src/dataframe/mod.rs index 1db4f8ede692..683cb809a5b1 100644 --- a/datafusion/core/src/dataframe/mod.rs +++ b/datafusion/core/src/dataframe/mod.rs @@ -1430,12 +1430,12 @@ impl TableProvider for DataFrameTableProvider { Some(&self.plan) } - fn supports_filter_pushdown( + fn supports_filters_pushdown( &self, - _filter: &Expr, - ) -> Result { + filters: &[&Expr], + ) -> Result> { // A filter is added on the DataFrame when given - Ok(TableProviderFilterPushDown::Exact) + Ok(vec![TableProviderFilterPushDown::Exact; filters.len()]) } fn schema(&self) -> SchemaRef { diff --git a/datafusion/core/src/datasource/cte_worktable.rs b/datafusion/core/src/datasource/cte_worktable.rs index 71075839b9a0..f8fd94d4d3fd 100644 --- a/datafusion/core/src/datasource/cte_worktable.rs +++ b/datafusion/core/src/datasource/cte_worktable.rs @@ -89,11 +89,14 @@ impl TableProvider for CteWorkTable { ))) } - fn supports_filter_pushdown( + fn supports_filters_pushdown( &self, - _filter: &Expr, - ) -> Result { + filters: &[&Expr], + ) -> Result> { // TODO: should we support filter pushdown? - Ok(TableProviderFilterPushDown::Unsupported) + Ok(vec![ + TableProviderFilterPushDown::Unsupported; + filters.len() + ]) } } diff --git a/datafusion/core/src/datasource/listing/table.rs b/datafusion/core/src/datasource/listing/table.rs index c1e337b5c44a..5ef7b6241b60 100644 --- a/datafusion/core/src/datasource/listing/table.rs +++ b/datafusion/core/src/datasource/listing/table.rs @@ -685,26 +685,32 @@ impl TableProvider for ListingTable { .await } - fn supports_filter_pushdown( + fn supports_filters_pushdown( &self, - filter: &Expr, - ) -> Result { - if expr_applicable_for_cols( - &self - .options - .table_partition_cols - .iter() - .map(|x| x.0.clone()) - .collect::>(), - filter, - ) { - // if filter can be handled by partiton pruning, it is exact - Ok(TableProviderFilterPushDown::Exact) - } else { - // otherwise, we still might be able to handle the filter with file - // level mechanisms such as Parquet row group pruning. - Ok(TableProviderFilterPushDown::Inexact) - } + filters: &[&Expr], + ) -> Result> { + let support: Vec<_> = filters + .iter() + .map(|filter| { + if expr_applicable_for_cols( + &self + .options + .table_partition_cols + .iter() + .map(|x| x.0.clone()) + .collect::>(), + filter, + ) { + // if filter can be handled by partition pruning, it is exact + TableProviderFilterPushDown::Exact + } else { + // otherwise, we still might be able to handle the filter with file + // level mechanisms such as Parquet row group pruning. + TableProviderFilterPushDown::Inexact + } + }) + .collect(); + Ok(support) } fn get_table_definition(&self) -> Option<&str> { diff --git a/datafusion/core/src/datasource/view.rs b/datafusion/core/src/datasource/view.rs index d1b7dad15225..31e812332c94 100644 --- a/datafusion/core/src/datasource/view.rs +++ b/datafusion/core/src/datasource/view.rs @@ -93,13 +93,12 @@ impl TableProvider for ViewTable { fn get_table_definition(&self) -> Option<&str> { self.definition.as_deref() } - - fn supports_filter_pushdown( + fn supports_filters_pushdown( &self, - _filter: &Expr, - ) -> Result { + filters: &[&Expr], + ) -> Result> { // A filter is added on the View when given - Ok(TableProviderFilterPushDown::Exact) + Ok(vec![TableProviderFilterPushDown::Exact; filters.len()]) } async fn scan( diff --git a/datafusion/core/tests/custom_sources_cases/provider_filter_pushdown.rs b/datafusion/core/tests/custom_sources_cases/provider_filter_pushdown.rs index bc6d85a74a51..2ae41391f42d 100644 --- a/datafusion/core/tests/custom_sources_cases/provider_filter_pushdown.rs +++ b/datafusion/core/tests/custom_sources_cases/provider_filter_pushdown.rs @@ -214,8 +214,11 @@ impl TableProvider for CustomProvider { } } - fn supports_filter_pushdown(&self, _: &Expr) -> Result { - Ok(TableProviderFilterPushDown::Exact) + fn supports_filters_pushdown( + &self, + filters: &[&Expr], + ) -> Result> { + Ok(vec![TableProviderFilterPushDown::Exact; filters.len()]) } }