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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]