Skip to content

Commit 02b12df

Browse files
committed
fix not expr in page
1 parent e8591cb commit 02b12df

2 files changed

Lines changed: 6 additions & 4 deletions

File tree

datafusion/datasource-parquet/src/opener.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,6 @@ impl FileOpener for ParquetOpener {
401401
access_plan,
402402
limit,
403403
&page_match_infos,
404-
rg_metadata,
405404
&file_metrics,
406405
);
407406
}

datafusion/datasource-parquet/src/page_filter.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use arrow::{
3131
use datafusion_common::pruning::PruningStatistics;
3232
use datafusion_common::ScalarValue;
3333
use datafusion_physical_expr::expressions::NotExpr;
34-
use datafusion_physical_expr::{split_conjunction, PhysicalExpr};
34+
use datafusion_physical_expr::{split_conjunction, PhysicalExpr, PhysicalExprSimplifier};
3535
use datafusion_pruning::PruningPredicate;
3636

3737
use log::{debug, trace};
@@ -325,7 +325,6 @@ impl PagePruningAccessPlanFilter {
325325
access_plan: ParquetAccessPlan,
326326
limit: usize,
327327
page_match_infos: &HashMap<usize, PageMatchInfo>,
328-
rg_metadata: &[RowGroupMetaData],
329328
file_metrics: &ParquetFileMetrics,
330329
) -> ParquetAccessPlan {
331330
if page_match_infos.is_empty() {
@@ -370,7 +369,7 @@ impl PagePruningAccessPlanFilter {
370369
if total_fully_matched_rows >= limit {
371370
debug!("Page limit pruning: found {total_fully_matched_rows} fully matched rows >= limit {limit}");
372371

373-
let mut new_access_plan = ParquetAccessPlan::new_none(rg_metadata.len());
372+
let mut new_access_plan = ParquetAccessPlan::new_none(access_plan.len());
374373
let mut rows_selected = 0;
375374

376375
for (rg_idx, page_indices, row_count) in fully_matched_info {
@@ -620,6 +619,10 @@ impl<'a> PagesPruningStatistics<'a> {
620619

621620
// Create inverted predicate
622621
let inverted_expr = Arc::new(NotExpr::new(pruning_predicate.orig_expr().clone()));
622+
// Simplify the NOT expression (e.g., NOT(c1 = 0) -> c1 != 0)
623+
// before building the pruning predicate
624+
let mut simplifier = PhysicalExprSimplifier::new(pruning_predicate.schema());
625+
let inverted_expr = simplifier.simplify(inverted_expr).unwrap();
623626
let inverted_predicate = match PruningPredicate::try_new(
624627
inverted_expr,
625628
pruning_predicate.schema().clone(),

0 commit comments

Comments
 (0)