risingwave_frontend/expr/
expr_mutator.rs1use super::{
16 AggCall, CorrelatedInputRef, ExprImpl, FunctionCall, FunctionCallWithLambda, InputRef, Literal,
17 Now, Parameter, SecretRef, Subquery, TableFunction, UserDefinedFunction, WindowFunction,
18};
19
20pub trait ExprMutator {
22 fn visit_expr(&mut self, expr: &mut ExprImpl) {
23 match expr {
24 ExprImpl::InputRef(inner) => self.visit_input_ref(inner),
25 ExprImpl::Literal(inner) => self.visit_literal(inner),
26 ExprImpl::FunctionCall(inner) => self.visit_function_call(inner),
27 ExprImpl::FunctionCallWithLambda(inner) => self.visit_function_call_with_lambda(inner),
28 ExprImpl::AggCall(inner) => self.visit_agg_call(inner),
29 ExprImpl::Subquery(inner) => self.visit_subquery(inner),
30 ExprImpl::CorrelatedInputRef(inner) => self.visit_correlated_input_ref(inner),
31 ExprImpl::TableFunction(inner) => self.visit_table_function(inner),
32 ExprImpl::WindowFunction(inner) => self.visit_window_function(inner),
33 ExprImpl::UserDefinedFunction(inner) => self.visit_user_defined_function(inner),
34 ExprImpl::Parameter(inner) => self.visit_parameter(inner),
35 ExprImpl::Now(inner) => self.visit_now(inner),
36 ExprImpl::SecretRef(inner) => self.visit_secret_ref(inner),
37 }
38 }
39 fn visit_function_call(&mut self, func_call: &mut FunctionCall) {
40 func_call
41 .inputs_mut()
42 .iter_mut()
43 .for_each(|expr| self.visit_expr(expr))
44 }
45
46 fn visit_function_call_with_lambda(&mut self, func_call: &mut FunctionCallWithLambda) {
47 self.visit_function_call(func_call.base_mut())
48 }
49
50 fn visit_agg_call(&mut self, agg_call: &mut AggCall) {
51 agg_call
52 .args_mut()
53 .iter_mut()
54 .for_each(|expr| self.visit_expr(expr));
55 agg_call.order_by_mut().visit_expr_mut(self);
56 agg_call.filter_mut().visit_expr_mut(self);
57 }
58 fn visit_literal(&mut self, _: &mut Literal) {}
59 fn visit_parameter(&mut self, _: &mut Parameter) {}
60 fn visit_input_ref(&mut self, _: &mut InputRef) {}
61 fn visit_subquery(&mut self, _: &mut Subquery) {}
62 fn visit_correlated_input_ref(&mut self, _: &mut CorrelatedInputRef) {}
63 fn visit_table_function(&mut self, func_call: &mut TableFunction) {
64 func_call
65 .args
66 .iter_mut()
67 .for_each(|expr| self.visit_expr(expr))
68 }
69 fn visit_window_function(&mut self, func_call: &mut WindowFunction) {
70 func_call
71 .args
72 .iter_mut()
73 .for_each(|expr| self.visit_expr(expr));
74 }
75 fn visit_user_defined_function(&mut self, func_call: &mut UserDefinedFunction) {
76 func_call
77 .args
78 .iter_mut()
79 .for_each(|expr| self.visit_expr(expr));
80 }
81 fn visit_now(&mut self, _: &mut Now) {}
82 fn visit_secret_ref(&mut self, _: &mut SecretRef) {}
83}