jayzhan211 commented on issue #14987:
URL: https://github.com/apache/datafusion/issues/14987#issuecomment-2696048551

   ```rust
   mpl Optimizer {
       /// Create a new optimizer using the recommended list of rules
       pub fn new() -> Self {
           let rules: Vec<Arc<dyn OptimizerRule + Sync + Send>> = vec![
               Arc::new(EliminateNestedUnion::new()),
               Arc::new(SimplifyExpressions::new()),
               Arc::new(UnwrapCastInComparison::new()),
               Arc::new(ReplaceDistinctWithAggregate::new()),
               Arc::new(EliminateJoin::new()),
               Arc::new(DecorrelatePredicateSubquery::new()),
               Arc::new(ScalarSubqueryToJoin::new()),
               Arc::new(ExtractEquijoinPredicate::new()),
               Arc::new(EliminateDuplicatedExpr::new()),
               Arc::new(EliminateFilter::new()),
               Arc::new(EliminateCrossJoin::new()),
               Arc::new(CommonSubexprEliminate::new()),
               Arc::new(EliminateLimit::new()),
               Arc::new(PropagateEmptyRelation::new()),
               // Must be after PropagateEmptyRelation
               Arc::new(EliminateOneUnion::new()),
               Arc::new(FilterNullJoinKeys::default()),
               Arc::new(EliminateOuterJoin::new()),
               // Filters can't be pushed down past Limits, we should do 
PushDownFilter after PushDownLimit
               Arc::new(PushDownLimit::new()),
               Arc::new(PushDownFilter::new()),
               Arc::new(SingleDistinctToGroupBy::new()),
               // The previous optimizations added expressions and projections,
               // that might benefit from the following rules
               Arc::new(SimplifyExpressions::new()),
               Arc::new(UnwrapCastInComparison::new()),
               Arc::new(CommonSubexprEliminate::new()),
               Arc::new(EliminateGroupByConstant::new()),
               Arc::new(OptimizeProjections::new()),
           ];
   
           Self::with_rules(rules)
       }
   
       /// Create a new optimizer with the given rules
       pub fn with_rules(rules: Vec<Arc<dyn OptimizerRule + Send + Sync>>) -> 
Self {
           Self { rules }
       }
   }
   ```
   
   ```rust
   let rules = ...
   let optimizer = Optimizer::with_rules(rules);
   ```
   
   Not sure how they determine the rules they need, but I guess they can add 
their rule and datafusion builtin rule for their optimizer?


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

Reply via email to