kosiew opened a new issue, #22056:
URL: https://github.com/apache/datafusion/issues/22056

   ## Summary
   `PushDownFilter` rebuilds filter nodes in many branch-specific paths. This 
duplication increases maintenance cost and makes rule invariants harder to keep 
consistent.
   
   ## Background and Motivation
   #21667 introduced `make_filter` to centralize filter construction, but 
push/keep/reinsert logic remains duplicated across plan variants.
   
   Today, each branch tends to repeat the same shape:
   1. split predicates into pushable/keep sets
   2. rebuild one or more child filters
   3. reinsert kept predicates above
   4. return transformed plan
   
   This pattern appears in `Sort`, `Distinct`, `Repartition`, `Projection`, 
`Union`, `Extension`, `Aggregate`, `Window`, `Unnest`, and join-related paths.
   
   ## Problem Statement
   Filter reconstruction mechanics are duplicated across many branches in 
`datafusion/optimizer/src/push_down_filter.rs`.
   
   Concrete symptoms:
   - repeated `make_filter(...)` and `Arc::new(...)` call patterns
   - repeated split/push/keep control flow
   - repeated branch-local child replacement logic
   
   ## Why This Matters
   - Correctness risk: duplicated rewrite logic makes subtle behavior 
divergence more likely across plan-node branches.
   - Invariant drift: filter reconstruction/reinsertion conventions are harder 
to enforce when spread across many sites.
   - Review burden: future changes require auditing many branches for 
equivalent behavior.
   - Evolvability: adding new single-input node rewrites repeats boilerplate 
and invites copy-paste defects.
   
   ## Proposed Direction
   Introduce a small, internal unary-node helper for filter reconstruction 
within `PushDownFilter`.
   
   


-- 
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]

Reply via email to