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)