From 4747b0f686e9e2c5aad29d5a8726ebc3dbb3156d Mon Sep 17 00:00:00 2001 From: osipovartem Date: Thu, 15 Oct 2026 11:15:37 +0300 Subject: [PATCH] test: verify changed-file scans skip unchanged data files --- datafusion_iceberg/src/table/mod.rs | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/datafusion_iceberg/src/table/mod.rs b/datafusion_iceberg/src/table/mod.rs index 86f8017f..67cb62f6 100644 --- a/datafusion_iceberg/src/table/mod.rs +++ b/datafusion_iceberg/src/table/mod.rs @@ -3295,6 +3295,36 @@ mod tests { None, Some(changes_config), )); + fn planned_data_file_count(plan: &dyn ExecutionPlan) -> usize { + let current = plan + .downcast_ref::() + .and_then(|exec| exec.data_source().downcast_ref::()) + .map(|config| { + config + .file_groups + .iter() + .map(|group| group.files().len()) + .sum::() + }) + .unwrap_or_default(); + current + + plan + .children() + .iter() + .map(|child| planned_data_file_count(child.as_ref())) + .sum::() + } + let full_plan = writable + .scan(&ctx.state(), None, &[], None) + .await + .expect("plan full v3 scan"); + let changes_plan = changes + .scan(&ctx.state(), None, &[], None) + .await + .expect("plan changed-file scan"); + assert_eq!(planned_data_file_count(full_plan.as_ref()), 3); + assert_eq!(planned_data_file_count(changes_plan.as_ref()), 2); + ctx.deregister_table("lineage_numbers") .expect("deregister writable table"); ctx.register_table("lineage_numbers", changes)