@@ -28,11 +28,11 @@ use crate::{
28
28
metrics:: { BaselineMetrics , ExecutionPlanMetricsSet , MetricsSet } ,
29
29
DisplayFormatType , ExecutionPlan ,
30
30
} ;
31
+
31
32
use arrow:: compute:: filter_record_batch;
32
33
use arrow:: datatypes:: { DataType , SchemaRef } ;
33
34
use arrow:: record_batch:: RecordBatch ;
34
- use arrow_array:: { Array , BooleanArray } ;
35
- use datafusion_common:: cast:: { as_boolean_array, as_null_array} ;
35
+ use datafusion_common:: cast:: as_boolean_array;
36
36
use datafusion_common:: stats:: Precision ;
37
37
use datafusion_common:: { internal_err, plan_err, DataFusionError , Result } ;
38
38
use datafusion_execution:: TaskContext ;
@@ -81,19 +81,6 @@ impl FilterExec {
81
81
cache,
82
82
} )
83
83
}
84
- DataType :: Null => {
85
- let default_selectivity = 0 ;
86
- let cache =
87
- Self :: compute_properties ( & input, & predicate, default_selectivity) ?;
88
-
89
- Ok ( Self {
90
- predicate,
91
- input : Arc :: clone ( & input) ,
92
- metrics : ExecutionPlanMetricsSet :: new ( ) ,
93
- default_selectivity,
94
- cache,
95
- } )
96
- }
97
84
other => {
98
85
plan_err ! ( "Filter predicate must return BOOLEAN values, got {other:?}" )
99
86
}
@@ -367,23 +354,15 @@ pub(crate) fn batch_filter(
367
354
. evaluate ( batch)
368
355
. and_then ( |v| v. into_array ( batch. num_rows ( ) ) )
369
356
. and_then ( |array| {
370
- let filter_array = match as_boolean_array ( & array) {
371
- Ok ( boolean_array) => Ok ( boolean_array. to_owned ( ) ) ,
357
+ Ok ( match as_boolean_array ( & array) {
358
+ // apply filter array to record batch
359
+ Ok ( filter_array) => filter_record_batch ( batch, filter_array) ?,
372
360
Err ( _) => {
373
- let Ok ( null_array) = as_null_array ( & array) else {
374
- return internal_err ! (
375
- "Cannot create filter_array from non-boolean predicates"
376
- ) ;
377
- } ;
378
-
379
- // if the predicate is null, then the result is also null
380
- Ok :: < BooleanArray , DataFusionError > ( BooleanArray :: new_null (
381
- null_array. len ( ) ,
382
- ) )
361
+ return internal_err ! (
362
+ "Cannot create filter_array from non-boolean predicates"
363
+ ) ;
383
364
}
384
- } ?;
385
-
386
- Ok ( filter_record_batch ( batch, & filter_array) ?)
365
+ } )
387
366
} )
388
367
}
389
368
0 commit comments