@@ -24,7 +24,7 @@ pub fn optimize_plan(plan: &mut Plan) -> Result<()> {
2424 */
2525fn optimize_select_plan ( plan : & mut SelectPlan ) -> Result < ( ) > {
2626 optimize_subqueries ( & mut plan. source ) ?;
27- rewrite_exprs ( & mut plan. source , & mut plan . where_clause ) ?;
27+ rewrite_exprs_select ( plan) ?;
2828 if let ConstantConditionEliminationResult :: ImpossibleCondition =
2929 eliminate_constants ( & mut plan. source , & mut plan. where_clause ) ?
3030 {
@@ -55,7 +55,7 @@ fn optimize_select_plan(plan: &mut SelectPlan) -> Result<()> {
5555}
5656
5757fn optimize_delete_plan ( plan : & mut DeletePlan ) -> Result < ( ) > {
58- rewrite_exprs ( & mut plan. source , & mut plan . where_clause ) ?;
58+ rewrite_exprs_delete ( plan) ?;
5959 if let ConstantConditionEliminationResult :: ImpossibleCondition =
6060 eliminate_constants ( & mut plan. source , & mut plan. where_clause ) ?
6161 {
@@ -603,52 +603,83 @@ fn push_scan_direction(operator: &mut SourceOperator, direction: &Direction) {
603603 }
604604}
605605
606- fn rewrite_exprs (
607- operator : & mut SourceOperator ,
608- where_clauses : & mut Option < Vec < ast:: Expr > > ,
609- ) -> Result < ( ) > {
610- if let Some ( predicates) = where_clauses {
611- for expr in predicates. iter_mut ( ) {
606+ fn rewrite_exprs_select ( plan : & mut SelectPlan ) -> Result < ( ) > {
607+ rewrite_source_operator_exprs ( & mut plan. source ) ?;
608+ for rc in plan. result_columns . iter_mut ( ) {
609+ rewrite_expr ( & mut rc. expr ) ?;
610+ }
611+ for agg in plan. aggregates . iter_mut ( ) {
612+ rewrite_expr ( & mut agg. original_expr ) ?;
613+ }
614+ if let Some ( predicates) = & mut plan. where_clause {
615+ for expr in predicates {
616+ rewrite_expr ( expr) ?;
617+ }
618+ }
619+ if let Some ( group_by) = & mut plan. group_by {
620+ for expr in group_by. exprs . iter_mut ( ) {
621+ rewrite_expr ( expr) ?;
622+ }
623+ }
624+ if let Some ( order_by) = & mut plan. order_by {
625+ for ( expr, _) in order_by. iter_mut ( ) {
626+ rewrite_expr ( expr) ?;
627+ }
628+ }
629+
630+ Ok ( ( ) )
631+ }
632+
633+ fn rewrite_exprs_delete ( plan : & mut DeletePlan ) -> Result < ( ) > {
634+ rewrite_source_operator_exprs ( & mut plan. source ) ?;
635+ if let Some ( predicates) = & mut plan. where_clause {
636+ for expr in predicates {
612637 rewrite_expr ( expr) ?;
613638 }
614639 }
615640
641+ Ok ( ( ) )
642+ }
643+
644+ fn rewrite_source_operator_exprs ( operator : & mut SourceOperator ) -> Result < ( ) > {
616645 match operator {
617646 SourceOperator :: Join {
618647 left,
619648 right,
620649 predicates,
621650 ..
622651 } => {
623- rewrite_exprs ( left, where_clauses ) ?;
624- rewrite_exprs ( right, where_clauses ) ?;
652+ rewrite_source_operator_exprs ( left) ?;
653+ rewrite_source_operator_exprs ( right) ?;
625654
626655 if let Some ( predicates) = predicates {
627656 for expr in predicates. iter_mut ( ) {
628657 rewrite_expr ( expr) ?;
629658 }
630659 }
660+
661+ Ok ( ( ) )
631662 }
632- SourceOperator :: Scan {
633- predicates : Some ( preds) ,
634- ..
635- } => {
636- for expr in preds. iter_mut ( ) {
637- rewrite_expr ( expr) ?;
663+ SourceOperator :: Scan { predicates, .. } | SourceOperator :: Search { predicates, .. } => {
664+ if let Some ( predicates) = predicates {
665+ for expr in predicates. iter_mut ( ) {
666+ rewrite_expr ( expr) ?;
667+ }
638668 }
669+
670+ Ok ( ( ) )
639671 }
640- SourceOperator :: Search {
641- predicates : Some ( preds) ,
642- ..
643- } => {
644- for expr in preds. iter_mut ( ) {
645- rewrite_expr ( expr) ?;
672+ SourceOperator :: Subquery { predicates, .. } => {
673+ if let Some ( predicates) = predicates {
674+ for expr in predicates. iter_mut ( ) {
675+ rewrite_expr ( expr) ?;
676+ }
646677 }
678+
679+ Ok ( ( ) )
647680 }
648- _ => ( ) ,
681+ SourceOperator :: Nothing { .. } => Ok ( ( ) ) ,
649682 }
650-
651- Ok ( ( ) )
652683}
653684
654685#[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
0 commit comments