adriangb commented on code in PR #16642: URL: https://github.com/apache/datafusion/pull/16642#discussion_r2182669398
########## datafusion/physical-plan/src/filter_pushdown.rs: ########## @@ -346,14 +233,48 @@ pub struct FilterDescription { child_filter_descriptions: Vec<ChildFilterDescription>, } +impl Default for FilterDescription { + fn default() -> Self { + Self::new() + } +} + impl FilterDescription { - pub fn new_with_child_count(num_children: usize) -> Self { + /// Create a new empty FilterDescription + pub fn new() -> Self { Self { - child_filter_descriptions: vec![ChildFilterDescription::new(); num_children], + child_filter_descriptions: vec![], + } + } + + /// Add a child filter description + pub fn with_child(mut self, child: ChildFilterDescription) -> Self { + self.child_filter_descriptions.push(child); + self + } + + /// Build a filter description by analyzing which parent filters can be pushed to each child. + /// This method automatically determines filter routing based on column analysis: + /// - If all columns referenced by a filter exist in a child's schema, it can be pushed down + /// - Otherwise, it cannot be pushed down to that child + pub fn from_children( + parent_filters: Vec<Arc<dyn PhysicalExpr>>, + children: &[&Arc<dyn crate::ExecutionPlan>], + ) -> Result<Self> { + let mut desc = Self::new(); + + // For each child, create a ChildFilterDescription + for child in children { + desc = desc.with_child(ChildFilterDescription::from_child( + parent_filters.clone(), Review Comment: I've changed `with_child` to take `&[Arc<dyn PhysicalExpr>]` which means we no longer clone the Vec. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org For additional commands, e-mail: github-h...@datafusion.apache.org