@@ -26,6 +26,8 @@ use crate::opener::ParquetOpener;
2626use crate :: row_filter:: can_expr_be_pushed_down_with_schemas;
2727use crate :: DefaultParquetFileReaderFactory ;
2828use crate :: ParquetFileReaderFactory ;
29+ use arrow:: datatypes:: Field ;
30+ use arrow:: datatypes:: Schema ;
2931use datafusion_common:: config:: ConfigOptions ;
3032#[ cfg( feature = "parquet_encryption" ) ]
3133use datafusion_common:: config:: EncryptionFactoryOptions ;
@@ -43,6 +45,7 @@ use datafusion_datasource::file_scan_config::FileScanConfig;
4345use datafusion_physical_expr:: conjunction;
4446use datafusion_physical_expr_adapter:: DefaultPhysicalExprAdapterFactory ;
4547use datafusion_physical_expr_common:: physical_expr:: fmt_sql;
48+ use datafusion_physical_expr_common:: physical_expr:: is_dynamic_physical_expr;
4649use datafusion_physical_expr_common:: physical_expr:: PhysicalExpr ;
4750use datafusion_physical_plan:: filter_pushdown:: PushedDown ;
4851use datafusion_physical_plan:: filter_pushdown:: {
@@ -287,6 +290,7 @@ pub struct ParquetSource {
287290 /// Optional hint for the size of the parquet metadata
288291 pub ( crate ) metadata_size_hint : Option < usize > ,
289292 pub ( crate ) projected_statistics : Option < Statistics > ,
293+ pub ( crate ) table_partition_cols : Vec < Arc < Field > > ,
290294 #[ cfg( feature = "parquet_encryption" ) ]
291295 pub ( crate ) encryption_factory : Option < Arc < dyn EncryptionFactory > > ,
292296}
@@ -330,6 +334,11 @@ impl ParquetSource {
330334 self
331335 }
332336
337+ pub fn with_table_partition_cols ( mut self , partition_cols : Vec < Arc < Field > > ) -> Self {
338+ self . table_partition_cols = partition_cols;
339+ self
340+ }
341+
333342 /// Options passed to the parquet reader for this scan
334343 pub fn table_parquet_options ( & self ) -> & TableParquetOptions {
335344 & self . table_parquet_options
@@ -720,7 +729,9 @@ impl FileSource for ParquetSource {
720729 let filters: Vec < PushedDownPredicate > = filters
721730 . into_iter ( )
722731 . map ( |filter| {
723- if can_expr_be_pushed_down_with_schemas ( & filter, & file_schema) {
732+ if is_dynamic_physical_expr ( & filter) {
733+ PushedDownPredicate :: supported ( filter)
734+ } else if can_expr_be_pushed_down_with_schemas ( & filter, & file_schema) {
724735 PushedDownPredicate :: supported ( filter)
725736 } else {
726737 PushedDownPredicate :: unsupported ( filter)
0 commit comments