1#![allow(unused_variables)]
2
3use super::{
4 Assignment, Assignments, Association, Condition, Cte, Delete, Expr, ExprAnd, ExprAny, ExprArg,
5 ExprBinaryOp, ExprCast, ExprColumn, ExprError, ExprExists, ExprFunc, ExprInList,
6 ExprInSubquery, ExprIsNull, ExprIsVariant, ExprLet, ExprList, ExprMap, ExprMatch, ExprNot,
7 ExprOr, ExprProject, ExprRecord, ExprReference, ExprSet, ExprSetOp, ExprStmt, Filter,
8 FuncCount, FuncLastInsertId, Insert, InsertTarget, Join, JoinOp, Limit, Node, Offset, OrderBy,
9 OrderByExpr, Path, Projection, Query, Returning, Select, Source, SourceModel, SourceTable,
10 SourceTableId, Statement, TableDerived, TableFactor, TableRef, TableWithJoins, Type, Update,
11 UpdateTarget, Value, ValueRecord, Values, With,
12};
13
14pub trait VisitMut {
38 fn visit_mut<N: Node>(&mut self, i: &mut N)
40 where
41 Self: Sized,
42 {
43 i.visit_mut(self);
44 }
45
46 fn visit_assignment_mut(&mut self, i: &mut Assignment) {
50 visit_assignment_mut(self, i);
51 }
52
53 fn visit_assignments_mut(&mut self, i: &mut Assignments) {
57 visit_assignments_mut(self, i);
58 }
59
60 fn visit_association_mut(&mut self, i: &mut Association) {
64 visit_association_mut(self, i);
65 }
66
67 fn visit_cte_mut(&mut self, i: &mut Cte) {
71 visit_cte_mut(self, i);
72 }
73
74 fn visit_expr_mut(&mut self, i: &mut Expr) {
78 visit_expr_mut(self, i);
79 }
80
81 fn visit_expr_and_mut(&mut self, i: &mut ExprAnd) {
85 visit_expr_and_mut(self, i);
86 }
87
88 fn visit_expr_any_mut(&mut self, i: &mut ExprAny) {
92 visit_expr_any_mut(self, i);
93 }
94
95 fn visit_expr_arg_mut(&mut self, i: &mut ExprArg) {
99 visit_expr_arg_mut(self, i);
100 }
101
102 fn visit_expr_binary_op_mut(&mut self, i: &mut ExprBinaryOp) {
106 visit_expr_binary_op_mut(self, i);
107 }
108
109 fn visit_expr_cast_mut(&mut self, i: &mut ExprCast) {
113 visit_expr_cast_mut(self, i);
114 }
115
116 fn visit_expr_column_mut(&mut self, i: &mut ExprColumn) {
120 visit_expr_column_mut(self, i);
121 }
122
123 fn visit_expr_default_mut(&mut self) {
127 visit_expr_default_mut(self);
128 }
129
130 fn visit_expr_error_mut(&mut self, i: &mut ExprError) {
134 visit_expr_error_mut(self, i);
135 }
136
137 fn visit_expr_exists_mut(&mut self, i: &mut ExprExists) {
141 visit_expr_exists_mut(self, i);
142 }
143
144 fn visit_expr_func_mut(&mut self, i: &mut ExprFunc) {
148 visit_expr_func_mut(self, i);
149 }
150
151 fn visit_expr_func_count_mut(&mut self, i: &mut FuncCount) {
155 visit_expr_func_count_mut(self, i);
156 }
157
158 fn visit_expr_func_last_insert_id_mut(&mut self, i: &mut FuncLastInsertId) {
162 visit_expr_func_last_insert_id_mut(self, i);
163 }
164
165 fn visit_expr_in_list_mut(&mut self, i: &mut ExprInList) {
169 visit_expr_in_list_mut(self, i);
170 }
171
172 fn visit_expr_in_subquery_mut(&mut self, i: &mut ExprInSubquery) {
176 visit_expr_in_subquery_mut(self, i);
177 }
178
179 fn visit_expr_is_null_mut(&mut self, i: &mut ExprIsNull) {
183 visit_expr_is_null_mut(self, i);
184 }
185
186 fn visit_expr_is_variant_mut(&mut self, i: &mut ExprIsVariant) {
190 visit_expr_is_variant_mut(self, i);
191 }
192
193 fn visit_expr_let_mut(&mut self, i: &mut ExprLet) {
197 visit_expr_let_mut(self, i);
198 }
199
200 fn visit_expr_map_mut(&mut self, i: &mut ExprMap) {
204 visit_expr_map_mut(self, i);
205 }
206
207 fn visit_expr_match_mut(&mut self, i: &mut ExprMatch) {
211 visit_expr_match_mut(self, i);
212 }
213
214 fn visit_expr_not_mut(&mut self, i: &mut ExprNot) {
218 visit_expr_not_mut(self, i);
219 }
220
221 fn visit_expr_or_mut(&mut self, i: &mut ExprOr) {
225 visit_expr_or_mut(self, i);
226 }
227
228 fn visit_expr_list_mut(&mut self, i: &mut ExprList) {
232 visit_expr_list_mut(self, i);
233 }
234
235 fn visit_expr_record_mut(&mut self, i: &mut ExprRecord) {
239 visit_expr_record_mut(self, i);
240 }
241
242 fn visit_expr_reference_mut(&mut self, i: &mut ExprReference) {
246 visit_expr_reference_mut(self, i);
247 }
248
249 fn visit_expr_set_mut(&mut self, i: &mut ExprSet) {
253 visit_expr_set_mut(self, i);
254 }
255
256 fn visit_expr_set_op_mut(&mut self, i: &mut ExprSetOp) {
260 visit_expr_set_op_mut(self, i);
261 }
262
263 fn visit_expr_stmt_mut(&mut self, i: &mut ExprStmt) {
267 visit_expr_stmt_mut(self, i);
268 }
269
270 fn visit_filter_mut(&mut self, i: &mut Filter) {
274 visit_filter_mut(self, i);
275 }
276
277 fn visit_condition_mut(&mut self, i: &mut Condition) {
281 visit_condition_mut(self, i);
282 }
283
284 fn visit_expr_project_mut(&mut self, i: &mut ExprProject) {
288 visit_expr_project_mut(self, i);
289 }
290
291 fn visit_insert_target_mut(&mut self, i: &mut InsertTarget) {
295 visit_insert_target_mut(self, i);
296 }
297
298 fn visit_join_mut(&mut self, i: &mut Join) {
302 visit_join_mut(self, i);
303 }
304
305 fn visit_limit_mut(&mut self, i: &mut Limit) {
309 visit_limit_mut(self, i);
310 }
311
312 fn visit_offset_mut(&mut self, i: &mut Offset) {
316 visit_offset_mut(self, i);
317 }
318
319 fn visit_order_by_mut(&mut self, i: &mut OrderBy) {
323 visit_order_by_mut(self, i);
324 }
325
326 fn visit_order_by_expr_mut(&mut self, i: &mut OrderByExpr) {
330 visit_order_by_expr_mut(self, i);
331 }
332
333 fn visit_path_mut(&mut self, i: &mut Path) {
337 visit_path_mut(self, i);
338 }
339
340 fn visit_projection_mut(&mut self, i: &mut Projection) {
344 visit_projection_mut(self, i);
345 }
346
347 fn visit_returning_mut(&mut self, i: &mut Returning) {
351 visit_returning_mut(self, i);
352 }
353
354 fn visit_source_mut(&mut self, i: &mut Source) {
358 visit_source_mut(self, i);
359 }
360
361 fn visit_source_model_mut(&mut self, i: &mut SourceModel) {
365 visit_source_model_mut(self, i);
366 }
367
368 fn visit_source_table_mut(&mut self, i: &mut SourceTable) {
372 visit_source_table_mut(self, i);
373 }
374
375 fn visit_source_table_id_mut(&mut self, i: &mut SourceTableId) {
379 visit_source_table_id_mut(self, i);
380 }
381
382 fn visit_stmt_mut(&mut self, i: &mut Statement) {
386 visit_stmt_mut(self, i);
387 }
388
389 fn visit_stmt_delete_mut(&mut self, i: &mut Delete) {
393 visit_stmt_delete_mut(self, i);
394 }
395
396 fn visit_stmt_insert_mut(&mut self, i: &mut Insert) {
400 visit_stmt_insert_mut(self, i);
401 }
402
403 fn visit_stmt_query_mut(&mut self, i: &mut Query) {
407 visit_stmt_query_mut(self, i);
408 }
409
410 fn visit_stmt_select_mut(&mut self, i: &mut Select) {
414 visit_stmt_select_mut(self, i);
415 }
416
417 fn visit_stmt_update_mut(&mut self, i: &mut Update) {
421 visit_stmt_update_mut(self, i);
422 }
423
424 fn visit_table_derived_mut(&mut self, i: &mut TableDerived) {
428 visit_table_derived_mut(self, i);
429 }
430
431 fn visit_table_ref_mut(&mut self, i: &mut TableRef) {
435 visit_table_ref_mut(self, i);
436 }
437
438 fn visit_table_factor_mut(&mut self, i: &mut TableFactor) {
442 visit_table_factor_mut(self, i);
443 }
444
445 fn visit_table_with_joins_mut(&mut self, i: &mut TableWithJoins) {
449 visit_table_with_joins_mut(self, i);
450 }
451
452 fn visit_type_mut(&mut self, i: &mut Type) {
456 visit_type_mut(self, i);
457 }
458
459 fn visit_update_target_mut(&mut self, i: &mut UpdateTarget) {
463 visit_update_target_mut(self, i);
464 }
465
466 fn visit_value_mut(&mut self, i: &mut Value) {
470 visit_value_mut(self, i);
471 }
472
473 fn visit_value_record(&mut self, i: &mut ValueRecord) {
477 visit_value_record(self, i);
478 }
479
480 fn visit_values_mut(&mut self, i: &mut Values) {
484 visit_values_mut(self, i);
485 }
486
487 fn visit_with_mut(&mut self, i: &mut With) {
491 visit_with_mut(self, i);
492 }
493}
494
495impl<V: VisitMut> VisitMut for &mut V {
496 fn visit_assignment_mut(&mut self, i: &mut Assignment) {
497 VisitMut::visit_assignment_mut(&mut **self, i);
498 }
499
500 fn visit_assignments_mut(&mut self, i: &mut Assignments) {
501 VisitMut::visit_assignments_mut(&mut **self, i);
502 }
503
504 fn visit_association_mut(&mut self, i: &mut Association) {
505 VisitMut::visit_association_mut(&mut **self, i);
506 }
507
508 fn visit_cte_mut(&mut self, i: &mut Cte) {
509 VisitMut::visit_cte_mut(&mut **self, i);
510 }
511
512 fn visit_expr_mut(&mut self, i: &mut Expr) {
513 VisitMut::visit_expr_mut(&mut **self, i);
514 }
515
516 fn visit_expr_and_mut(&mut self, i: &mut ExprAnd) {
517 VisitMut::visit_expr_and_mut(&mut **self, i);
518 }
519
520 fn visit_expr_arg_mut(&mut self, i: &mut ExprArg) {
521 VisitMut::visit_expr_arg_mut(&mut **self, i);
522 }
523
524 fn visit_expr_binary_op_mut(&mut self, i: &mut ExprBinaryOp) {
525 VisitMut::visit_expr_binary_op_mut(&mut **self, i);
526 }
527
528 fn visit_expr_cast_mut(&mut self, i: &mut ExprCast) {
529 VisitMut::visit_expr_cast_mut(&mut **self, i);
530 }
531
532 fn visit_expr_column_mut(&mut self, i: &mut ExprColumn) {
533 VisitMut::visit_expr_column_mut(&mut **self, i);
534 }
535
536 fn visit_expr_default_mut(&mut self) {
537 VisitMut::visit_expr_default_mut(&mut **self);
538 }
539
540 fn visit_expr_error_mut(&mut self, i: &mut ExprError) {
541 VisitMut::visit_expr_error_mut(&mut **self, i);
542 }
543
544 fn visit_expr_exists_mut(&mut self, i: &mut ExprExists) {
545 VisitMut::visit_expr_exists_mut(&mut **self, i);
546 }
547
548 fn visit_expr_func_mut(&mut self, i: &mut ExprFunc) {
549 VisitMut::visit_expr_func_mut(&mut **self, i);
550 }
551
552 fn visit_expr_func_count_mut(&mut self, i: &mut FuncCount) {
553 VisitMut::visit_expr_func_count_mut(&mut **self, i);
554 }
555
556 fn visit_expr_in_list_mut(&mut self, i: &mut ExprInList) {
557 VisitMut::visit_expr_in_list_mut(&mut **self, i);
558 }
559
560 fn visit_expr_in_subquery_mut(&mut self, i: &mut ExprInSubquery) {
561 VisitMut::visit_expr_in_subquery_mut(&mut **self, i);
562 }
563
564 fn visit_expr_is_null_mut(&mut self, i: &mut ExprIsNull) {
565 VisitMut::visit_expr_is_null_mut(&mut **self, i);
566 }
567
568 fn visit_expr_is_variant_mut(&mut self, i: &mut ExprIsVariant) {
569 VisitMut::visit_expr_is_variant_mut(&mut **self, i);
570 }
571
572 fn visit_expr_let_mut(&mut self, i: &mut ExprLet) {
573 VisitMut::visit_expr_let_mut(&mut **self, i);
574 }
575
576 fn visit_expr_map_mut(&mut self, i: &mut ExprMap) {
577 VisitMut::visit_expr_map_mut(&mut **self, i);
578 }
579
580 fn visit_expr_match_mut(&mut self, i: &mut ExprMatch) {
581 VisitMut::visit_expr_match_mut(&mut **self, i);
582 }
583
584 fn visit_expr_not_mut(&mut self, i: &mut ExprNot) {
585 VisitMut::visit_expr_not_mut(&mut **self, i);
586 }
587
588 fn visit_expr_or_mut(&mut self, i: &mut ExprOr) {
589 VisitMut::visit_expr_or_mut(&mut **self, i);
590 }
591
592 fn visit_expr_list_mut(&mut self, i: &mut ExprList) {
593 VisitMut::visit_expr_list_mut(&mut **self, i);
594 }
595
596 fn visit_expr_record_mut(&mut self, i: &mut ExprRecord) {
597 VisitMut::visit_expr_record_mut(&mut **self, i);
598 }
599
600 fn visit_expr_reference_mut(&mut self, i: &mut ExprReference) {
601 VisitMut::visit_expr_reference_mut(&mut **self, i);
602 }
603
604 fn visit_expr_set_mut(&mut self, i: &mut ExprSet) {
605 VisitMut::visit_expr_set_mut(&mut **self, i);
606 }
607
608 fn visit_expr_set_op_mut(&mut self, i: &mut ExprSetOp) {
609 VisitMut::visit_expr_set_op_mut(&mut **self, i);
610 }
611
612 fn visit_expr_stmt_mut(&mut self, i: &mut ExprStmt) {
613 VisitMut::visit_expr_stmt_mut(&mut **self, i);
614 }
615
616 fn visit_filter_mut(&mut self, i: &mut Filter) {
617 VisitMut::visit_filter_mut(&mut **self, i);
618 }
619
620 fn visit_condition_mut(&mut self, i: &mut Condition) {
621 VisitMut::visit_condition_mut(&mut **self, i);
622 }
623
624 fn visit_expr_project_mut(&mut self, i: &mut ExprProject) {
625 VisitMut::visit_expr_project_mut(&mut **self, i);
626 }
627
628 fn visit_insert_target_mut(&mut self, i: &mut InsertTarget) {
629 VisitMut::visit_insert_target_mut(&mut **self, i);
630 }
631
632 fn visit_join_mut(&mut self, i: &mut Join) {
633 VisitMut::visit_join_mut(&mut **self, i);
634 }
635
636 fn visit_limit_mut(&mut self, i: &mut Limit) {
637 VisitMut::visit_limit_mut(&mut **self, i);
638 }
639
640 fn visit_offset_mut(&mut self, i: &mut Offset) {
641 VisitMut::visit_offset_mut(&mut **self, i);
642 }
643
644 fn visit_order_by_mut(&mut self, i: &mut OrderBy) {
645 VisitMut::visit_order_by_mut(&mut **self, i);
646 }
647
648 fn visit_order_by_expr_mut(&mut self, i: &mut OrderByExpr) {
649 VisitMut::visit_order_by_expr_mut(&mut **self, i);
650 }
651
652 fn visit_path_mut(&mut self, i: &mut Path) {
653 VisitMut::visit_path_mut(&mut **self, i);
654 }
655
656 fn visit_projection_mut(&mut self, i: &mut Projection) {
657 VisitMut::visit_projection_mut(&mut **self, i);
658 }
659
660 fn visit_returning_mut(&mut self, i: &mut Returning) {
661 VisitMut::visit_returning_mut(&mut **self, i);
662 }
663
664 fn visit_source_mut(&mut self, i: &mut Source) {
665 VisitMut::visit_source_mut(&mut **self, i);
666 }
667
668 fn visit_source_model_mut(&mut self, i: &mut SourceModel) {
669 VisitMut::visit_source_model_mut(&mut **self, i);
670 }
671
672 fn visit_source_table_mut(&mut self, i: &mut SourceTable) {
673 VisitMut::visit_source_table_mut(&mut **self, i);
674 }
675
676 fn visit_source_table_id_mut(&mut self, i: &mut SourceTableId) {
677 VisitMut::visit_source_table_id_mut(&mut **self, i);
678 }
679
680 fn visit_stmt_mut(&mut self, i: &mut Statement) {
681 VisitMut::visit_stmt_mut(&mut **self, i);
682 }
683
684 fn visit_stmt_delete_mut(&mut self, i: &mut Delete) {
685 VisitMut::visit_stmt_delete_mut(&mut **self, i);
686 }
687
688 fn visit_stmt_insert_mut(&mut self, i: &mut Insert) {
689 VisitMut::visit_stmt_insert_mut(&mut **self, i);
690 }
691
692 fn visit_stmt_query_mut(&mut self, i: &mut Query) {
693 VisitMut::visit_stmt_query_mut(&mut **self, i);
694 }
695
696 fn visit_stmt_select_mut(&mut self, i: &mut Select) {
697 VisitMut::visit_stmt_select_mut(&mut **self, i);
698 }
699
700 fn visit_stmt_update_mut(&mut self, i: &mut Update) {
701 VisitMut::visit_stmt_update_mut(&mut **self, i);
702 }
703
704 fn visit_table_derived_mut(&mut self, i: &mut TableDerived) {
705 VisitMut::visit_table_derived_mut(&mut **self, i);
706 }
707
708 fn visit_table_ref_mut(&mut self, i: &mut TableRef) {
709 VisitMut::visit_table_ref_mut(&mut **self, i);
710 }
711
712 fn visit_table_factor_mut(&mut self, i: &mut TableFactor) {
713 VisitMut::visit_table_factor_mut(&mut **self, i);
714 }
715
716 fn visit_table_with_joins_mut(&mut self, i: &mut TableWithJoins) {
717 VisitMut::visit_table_with_joins_mut(&mut **self, i);
718 }
719
720 fn visit_type_mut(&mut self, i: &mut Type) {
721 VisitMut::visit_type_mut(&mut **self, i);
722 }
723
724 fn visit_update_target_mut(&mut self, i: &mut UpdateTarget) {
725 VisitMut::visit_update_target_mut(&mut **self, i);
726 }
727
728 fn visit_value_mut(&mut self, i: &mut Value) {
729 VisitMut::visit_value_mut(&mut **self, i);
730 }
731
732 fn visit_value_record(&mut self, i: &mut ValueRecord) {
733 VisitMut::visit_value_record(&mut **self, i);
734 }
735
736 fn visit_values_mut(&mut self, i: &mut Values) {
737 VisitMut::visit_values_mut(&mut **self, i);
738 }
739
740 fn visit_with_mut(&mut self, i: &mut With) {
741 VisitMut::visit_with_mut(&mut **self, i);
742 }
743}
744
745pub fn visit_assignment_mut<V>(v: &mut V, node: &mut Assignment)
747where
748 V: VisitMut + ?Sized,
749{
750 match node {
751 Assignment::Set(expr) | Assignment::Insert(expr) | Assignment::Remove(expr) => {
752 v.visit_expr_mut(expr);
753 }
754 Assignment::Batch(entries) => {
755 for entry in entries {
756 visit_assignment_mut(v, entry);
757 }
758 }
759 }
760}
761
762pub fn visit_assignments_mut<V>(v: &mut V, node: &mut Assignments)
764where
765 V: VisitMut + ?Sized,
766{
767 for (_, assignment) in node.iter_mut() {
768 v.visit_assignment_mut(assignment);
769 }
770}
771
772pub fn visit_association_mut<V>(v: &mut V, node: &mut Association)
774where
775 V: VisitMut + ?Sized,
776{
777 v.visit_stmt_query_mut(&mut node.source);
778}
779
780pub fn visit_cte_mut<V>(v: &mut V, node: &mut Cte)
782where
783 V: VisitMut + ?Sized,
784{
785 v.visit_stmt_query_mut(&mut node.query);
786}
787
788pub fn visit_expr_mut<V>(v: &mut V, node: &mut Expr)
790where
791 V: VisitMut + ?Sized,
792{
793 match node {
794 Expr::And(expr) => v.visit_expr_and_mut(expr),
795 Expr::Any(expr) => v.visit_expr_any_mut(expr),
796 Expr::Arg(expr) => v.visit_expr_arg_mut(expr),
797 Expr::BinaryOp(expr) => v.visit_expr_binary_op_mut(expr),
798 Expr::Cast(expr) => v.visit_expr_cast_mut(expr),
799 Expr::Default => v.visit_expr_default_mut(),
800 Expr::Error(expr) => v.visit_expr_error_mut(expr),
801 Expr::Exists(expr) => v.visit_expr_exists_mut(expr),
802 Expr::Func(expr) => v.visit_expr_func_mut(expr),
803 Expr::InList(expr) => v.visit_expr_in_list_mut(expr),
804 Expr::InSubquery(expr) => v.visit_expr_in_subquery_mut(expr),
805 Expr::IsNull(expr) => v.visit_expr_is_null_mut(expr),
806 Expr::IsVariant(expr) => v.visit_expr_is_variant_mut(expr),
807 Expr::Let(expr) => v.visit_expr_let_mut(expr),
808 Expr::Map(expr) => v.visit_expr_map_mut(expr),
809 Expr::Match(expr) => v.visit_expr_match_mut(expr),
810 Expr::Not(expr) => v.visit_expr_not_mut(expr),
811 Expr::Or(expr) => v.visit_expr_or_mut(expr),
812 Expr::Project(expr) => v.visit_expr_project_mut(expr),
813 Expr::Record(expr) => v.visit_expr_record_mut(expr),
814 Expr::Reference(expr) => v.visit_expr_reference_mut(expr),
815 Expr::List(expr) => v.visit_expr_list_mut(expr),
816 Expr::Stmt(expr) => v.visit_expr_stmt_mut(expr),
817 Expr::Value(expr) => v.visit_value_mut(expr),
818 }
819}
820
821pub fn visit_expr_and_mut<V>(v: &mut V, node: &mut ExprAnd)
823where
824 V: VisitMut + ?Sized,
825{
826 for expr in node {
827 v.visit_expr_mut(expr);
828 }
829}
830
831pub fn visit_expr_any_mut<V>(v: &mut V, node: &mut ExprAny)
833where
834 V: VisitMut + ?Sized,
835{
836 v.visit_expr_mut(&mut node.expr);
837}
838
839pub fn visit_expr_arg_mut<V>(v: &mut V, node: &mut ExprArg)
841where
842 V: VisitMut + ?Sized,
843{
844}
845
846pub fn visit_expr_binary_op_mut<V>(v: &mut V, node: &mut ExprBinaryOp)
848where
849 V: VisitMut + ?Sized,
850{
851 v.visit_expr_mut(&mut node.lhs);
852 v.visit_expr_mut(&mut node.rhs);
853}
854
855pub fn visit_expr_cast_mut<V>(v: &mut V, node: &mut ExprCast)
857where
858 V: VisitMut + ?Sized,
859{
860 v.visit_expr_mut(&mut node.expr);
861 v.visit_type_mut(&mut node.ty);
862}
863
864pub fn visit_expr_column_mut<V>(v: &mut V, node: &mut ExprColumn)
866where
867 V: VisitMut + ?Sized,
868{
869}
870
871pub fn visit_expr_default_mut<V>(v: &mut V)
873where
874 V: VisitMut + ?Sized,
875{
876}
877
878pub fn visit_expr_error_mut<V>(v: &mut V, node: &mut ExprError)
880where
881 V: VisitMut + ?Sized,
882{
883 }
885
886pub fn visit_expr_exists_mut<V>(v: &mut V, node: &mut ExprExists)
888where
889 V: VisitMut + ?Sized,
890{
891 v.visit_stmt_query_mut(&mut node.subquery);
892}
893
894pub fn visit_expr_func_mut<V>(v: &mut V, node: &mut ExprFunc)
896where
897 V: VisitMut + ?Sized,
898{
899 match node {
900 ExprFunc::Count(func) => v.visit_expr_func_count_mut(func),
901 ExprFunc::LastInsertId(func) => v.visit_expr_func_last_insert_id_mut(func),
902 }
903}
904
905pub fn visit_expr_func_count_mut<V>(v: &mut V, node: &mut FuncCount)
907where
908 V: VisitMut + ?Sized,
909{
910 if let Some(expr) = &mut node.arg {
911 v.visit_expr_mut(expr);
912 }
913
914 if let Some(expr) = &mut node.filter {
915 v.visit_expr_mut(expr);
916 }
917}
918
919pub fn visit_expr_func_last_insert_id_mut<V>(_v: &mut V, _node: &mut FuncLastInsertId)
921where
922 V: VisitMut + ?Sized,
923{
924 }
926
927pub fn visit_expr_in_list_mut<V>(v: &mut V, node: &mut ExprInList)
929where
930 V: VisitMut + ?Sized,
931{
932 v.visit_expr_mut(&mut node.expr);
933 v.visit_expr_mut(&mut node.list);
934}
935
936pub fn visit_expr_in_subquery_mut<V>(v: &mut V, node: &mut ExprInSubquery)
938where
939 V: VisitMut + ?Sized,
940{
941 v.visit_expr_mut(&mut node.expr);
942 v.visit_stmt_query_mut(&mut node.query);
943}
944
945pub fn visit_expr_is_null_mut<V>(v: &mut V, node: &mut ExprIsNull)
947where
948 V: VisitMut + ?Sized,
949{
950 v.visit_expr_mut(&mut node.expr);
951}
952
953pub fn visit_expr_is_variant_mut<V>(v: &mut V, node: &mut ExprIsVariant)
955where
956 V: VisitMut + ?Sized,
957{
958 v.visit_expr_mut(&mut node.expr);
959}
960
961pub fn visit_expr_let_mut<V>(v: &mut V, node: &mut ExprLet)
963where
964 V: VisitMut + ?Sized,
965{
966 for binding in &mut node.bindings {
967 v.visit_expr_mut(binding);
968 }
969 v.visit_expr_mut(&mut node.body);
970}
971
972pub fn visit_expr_map_mut<V>(v: &mut V, node: &mut ExprMap)
974where
975 V: VisitMut + ?Sized,
976{
977 v.visit_expr_mut(&mut node.base);
978 v.visit_expr_mut(&mut node.map);
979}
980
981pub fn visit_expr_match_mut<V>(v: &mut V, node: &mut ExprMatch)
983where
984 V: VisitMut + ?Sized,
985{
986 v.visit_expr_mut(&mut node.subject);
987 for arm in &mut node.arms {
988 v.visit_expr_mut(&mut arm.expr);
989 }
990 v.visit_expr_mut(&mut node.else_expr);
991}
992
993pub fn visit_expr_not_mut<V>(v: &mut V, node: &mut ExprNot)
995where
996 V: VisitMut + ?Sized,
997{
998 v.visit_expr_mut(&mut node.expr);
999}
1000
1001pub fn visit_expr_or_mut<V>(v: &mut V, node: &mut ExprOr)
1003where
1004 V: VisitMut + ?Sized,
1005{
1006 for expr in node {
1007 v.visit_expr_mut(expr);
1008 }
1009}
1010
1011pub fn visit_expr_list_mut<V>(v: &mut V, node: &mut ExprList)
1013where
1014 V: VisitMut + ?Sized,
1015{
1016 for e in &mut node.items {
1017 v.visit_expr_mut(e);
1018 }
1019}
1020
1021pub fn visit_expr_record_mut<V>(v: &mut V, node: &mut ExprRecord)
1023where
1024 V: VisitMut + ?Sized,
1025{
1026 for expr in &mut **node {
1027 v.visit_expr_mut(expr);
1028 }
1029}
1030
1031pub fn visit_expr_reference_mut<V>(v: &mut V, node: &mut ExprReference)
1033where
1034 V: VisitMut + ?Sized,
1035{
1036 match node {
1037 ExprReference::Model { .. } => {}
1038 ExprReference::Field { .. } => {}
1039 ExprReference::Column(expr_column) => v.visit_expr_column_mut(expr_column),
1040 }
1041}
1042
1043pub fn visit_expr_set_mut<V>(v: &mut V, node: &mut ExprSet)
1045where
1046 V: VisitMut + ?Sized,
1047{
1048 match node {
1049 ExprSet::Select(expr) => v.visit_stmt_select_mut(expr),
1050 ExprSet::SetOp(expr) => v.visit_expr_set_op_mut(expr),
1051 ExprSet::Update(expr) => v.visit_stmt_update_mut(expr),
1052 ExprSet::Values(expr) => v.visit_values_mut(expr),
1053 ExprSet::Insert(expr) => v.visit_stmt_insert_mut(expr),
1054 }
1055}
1056
1057pub fn visit_expr_set_op_mut<V>(v: &mut V, node: &mut ExprSetOp)
1059where
1060 V: VisitMut + ?Sized,
1061{
1062 for operand in &mut node.operands {
1063 v.visit_expr_set_mut(operand);
1064 }
1065}
1066
1067pub fn visit_expr_stmt_mut<V>(v: &mut V, node: &mut ExprStmt)
1069where
1070 V: VisitMut + ?Sized,
1071{
1072 v.visit_stmt_mut(&mut node.stmt);
1073}
1074
1075pub fn visit_expr_project_mut<V>(v: &mut V, node: &mut ExprProject)
1077where
1078 V: VisitMut + ?Sized,
1079{
1080 v.visit_expr_mut(&mut node.base);
1081 v.visit_projection_mut(&mut node.projection);
1082}
1083
1084pub fn visit_filter_mut<V>(v: &mut V, node: &mut Filter)
1086where
1087 V: VisitMut + ?Sized,
1088{
1089 if let Some(expr) = &mut node.expr {
1090 v.visit_expr_mut(expr);
1091 }
1092}
1093
1094pub fn visit_condition_mut<V>(v: &mut V, node: &mut Condition)
1096where
1097 V: VisitMut + ?Sized,
1098{
1099 if let Some(expr) = &mut node.expr {
1100 v.visit_expr_mut(expr);
1101 }
1102}
1103
1104pub fn visit_insert_target_mut<V>(v: &mut V, node: &mut InsertTarget)
1106where
1107 V: VisitMut + ?Sized,
1108{
1109 if let InsertTarget::Scope(stmt) = node {
1110 v.visit_stmt_query_mut(stmt)
1111 }
1112}
1113
1114pub fn visit_join_mut<V>(v: &mut V, node: &mut Join)
1116where
1117 V: VisitMut + ?Sized,
1118{
1119 v.visit_source_table_id_mut(&mut node.table);
1120 match &mut node.constraint {
1121 JoinOp::Left(expr) => v.visit_expr_mut(expr),
1122 }
1123}
1124
1125pub fn visit_limit_mut<V>(v: &mut V, node: &mut Limit)
1127where
1128 V: VisitMut + ?Sized,
1129{
1130 v.visit_expr_mut(&mut node.limit);
1131
1132 if let Some(offset) = &mut node.offset {
1133 v.visit_offset_mut(offset);
1134 }
1135}
1136
1137pub fn visit_offset_mut<V>(v: &mut V, node: &mut Offset)
1139where
1140 V: VisitMut + ?Sized,
1141{
1142 match node {
1143 Offset::After(expr) => v.visit_expr_mut(expr),
1144 Offset::Count(expr) => v.visit_expr_mut(expr),
1145 }
1146}
1147
1148pub fn visit_order_by_mut<V>(v: &mut V, node: &mut OrderBy)
1150where
1151 V: VisitMut + ?Sized,
1152{
1153 for expr in &mut node.exprs {
1154 v.visit_order_by_expr_mut(expr);
1155 }
1156}
1157
1158pub fn visit_order_by_expr_mut<V>(v: &mut V, node: &mut OrderByExpr)
1160where
1161 V: VisitMut + ?Sized,
1162{
1163 v.visit_expr_mut(&mut node.expr);
1164}
1165
1166pub fn visit_path_mut<V>(v: &mut V, node: &mut Path)
1168where
1169 V: VisitMut + ?Sized,
1170{
1171 v.visit_projection_mut(&mut node.projection);
1172}
1173
1174pub fn visit_projection_mut<V>(v: &mut V, node: &mut Projection)
1176where
1177 V: VisitMut + ?Sized,
1178{
1179}
1180
1181pub fn visit_returning_mut<V>(v: &mut V, node: &mut Returning)
1183where
1184 V: VisitMut + ?Sized,
1185{
1186 match node {
1187 Returning::Model { include } => {
1188 for path in include {
1189 v.visit_path_mut(path);
1190 }
1191 }
1192 Returning::Changed => {}
1193 Returning::Expr(expr) => v.visit_expr_mut(expr),
1194 Returning::Value(expr) => v.visit_expr_mut(expr),
1195 }
1196}
1197
1198pub fn visit_source_mut<V>(v: &mut V, node: &mut Source)
1200where
1201 V: VisitMut + ?Sized,
1202{
1203 match node {
1204 Source::Model(source_model) => v.visit_source_model_mut(source_model),
1205 Source::Table(source_table) => v.visit_source_table_mut(source_table),
1206 }
1207}
1208
1209pub fn visit_source_model_mut<V>(v: &mut V, node: &mut SourceModel)
1211where
1212 V: VisitMut + ?Sized,
1213{
1214 if let Some(association) = &mut node.via {
1215 v.visit_association_mut(association);
1216 }
1217}
1218
1219pub fn visit_source_table_mut<V>(v: &mut V, node: &mut SourceTable)
1221where
1222 V: VisitMut + ?Sized,
1223{
1224 for table_ref in &mut node.tables {
1225 v.visit_table_ref_mut(table_ref);
1226 }
1227 for table_with_joins in &mut node.from {
1228 v.visit_table_with_joins_mut(table_with_joins);
1229 }
1230}
1231
1232pub fn visit_source_table_id_mut<V>(v: &mut V, node: &mut SourceTableId)
1234where
1235 V: VisitMut + ?Sized,
1236{
1237 }
1239
1240pub fn visit_table_factor_mut<V>(v: &mut V, node: &mut TableFactor)
1242where
1243 V: VisitMut + ?Sized,
1244{
1245 match node {
1246 TableFactor::Table(table_id) => v.visit_source_table_id_mut(table_id),
1247 }
1248}
1249
1250pub fn visit_stmt_mut<V>(v: &mut V, node: &mut Statement)
1252where
1253 V: VisitMut + ?Sized,
1254{
1255 match node {
1256 Statement::Delete(stmt) => v.visit_stmt_delete_mut(stmt),
1257 Statement::Insert(stmt) => v.visit_stmt_insert_mut(stmt),
1258 Statement::Query(stmt) => v.visit_stmt_query_mut(stmt),
1259 Statement::Update(stmt) => v.visit_stmt_update_mut(stmt),
1260 }
1261}
1262
1263pub fn visit_stmt_delete_mut<V>(v: &mut V, node: &mut Delete)
1265where
1266 V: VisitMut + ?Sized,
1267{
1268 v.visit_source_mut(&mut node.from);
1269 v.visit_filter_mut(&mut node.filter);
1270
1271 if let Some(returning) = &mut node.returning {
1272 v.visit_returning_mut(returning);
1273 }
1274}
1275
1276pub fn visit_stmt_insert_mut<V>(v: &mut V, node: &mut Insert)
1278where
1279 V: VisitMut + ?Sized,
1280{
1281 v.visit_insert_target_mut(&mut node.target);
1282 v.visit_stmt_query_mut(&mut node.source);
1283
1284 if let Some(returning) = &mut node.returning {
1285 v.visit_returning_mut(returning);
1286 }
1287}
1288
1289pub fn visit_stmt_query_mut<V>(v: &mut V, node: &mut Query)
1291where
1292 V: VisitMut + ?Sized,
1293{
1294 if let Some(with) = &mut node.with {
1295 v.visit_with_mut(with);
1296 }
1297
1298 v.visit_expr_set_mut(&mut node.body);
1299
1300 if let Some(order_by) = &mut node.order_by {
1301 v.visit_order_by_mut(order_by);
1302 }
1303
1304 if let Some(limit) = &mut node.limit {
1305 v.visit_limit_mut(limit);
1306 }
1307}
1308
1309pub fn visit_stmt_select_mut<V>(v: &mut V, node: &mut Select)
1311where
1312 V: VisitMut + ?Sized,
1313{
1314 v.visit_source_mut(&mut node.source);
1315 v.visit_filter_mut(&mut node.filter);
1316 v.visit_returning_mut(&mut node.returning);
1317}
1318
1319pub fn visit_stmt_update_mut<V>(v: &mut V, node: &mut Update)
1321where
1322 V: VisitMut + ?Sized,
1323{
1324 v.visit_update_target_mut(&mut node.target);
1325 v.visit_assignments_mut(&mut node.assignments);
1326 v.visit_filter_mut(&mut node.filter);
1327 v.visit_condition_mut(&mut node.condition);
1328
1329 if let Some(returning) = &mut node.returning {
1330 v.visit_returning_mut(returning);
1331 }
1332}
1333
1334pub fn visit_table_derived_mut<V>(v: &mut V, node: &mut TableDerived)
1336where
1337 V: VisitMut + ?Sized,
1338{
1339 v.visit_stmt_query_mut(&mut node.subquery);
1340}
1341
1342pub fn visit_table_ref_mut<V>(v: &mut V, node: &mut TableRef)
1344where
1345 V: VisitMut + ?Sized,
1346{
1347 match node {
1348 TableRef::Cte { .. } => {}
1349 TableRef::Derived(table_derived) => v.visit_table_derived_mut(table_derived),
1350 TableRef::Table(_) => {}
1351 TableRef::Arg(expr_arg) => v.visit_expr_arg_mut(expr_arg),
1352 }
1353}
1354
1355pub fn visit_table_with_joins_mut<V>(v: &mut V, node: &mut TableWithJoins)
1357where
1358 V: VisitMut + ?Sized,
1359{
1360 v.visit_table_factor_mut(&mut node.relation);
1361 for join in &mut node.joins {
1362 v.visit_join_mut(join);
1363 }
1364}
1365
1366pub fn visit_type_mut<V>(v: &mut V, node: &mut Type)
1368where
1369 V: VisitMut + ?Sized,
1370{
1371 }
1373
1374pub fn visit_update_target_mut<V>(v: &mut V, node: &mut UpdateTarget)
1376where
1377 V: VisitMut + ?Sized,
1378{
1379 if let UpdateTarget::Query(stmt) = node {
1380 v.visit_stmt_query_mut(stmt)
1381 }
1382}
1383
1384pub fn visit_value_mut<V>(v: &mut V, node: &mut Value)
1386where
1387 V: VisitMut + ?Sized,
1388{
1389 if let Value::Record(node) = node {
1390 v.visit_value_record(node);
1391 }
1392}
1393
1394pub fn visit_value_record<V>(v: &mut V, node: &mut ValueRecord)
1396where
1397 V: VisitMut + ?Sized,
1398{
1399 for expr in &mut node.fields {
1400 v.visit_value_mut(expr);
1401 }
1402}
1403
1404pub fn visit_values_mut<V>(v: &mut V, node: &mut Values)
1406where
1407 V: VisitMut + ?Sized,
1408{
1409 for expr in &mut node.rows {
1410 v.visit_expr_mut(expr);
1411 }
1412}
1413
1414pub fn visit_with_mut<V>(v: &mut V, node: &mut With)
1416where
1417 V: VisitMut + ?Sized,
1418{
1419 for cte in &mut node.ctes {
1420 v.visit_cte_mut(cte);
1421 }
1422}
1423
1424pub fn for_each_expr_mut<F>(node: &mut impl Node, f: F)
1427where
1428 F: FnMut(&mut Expr),
1429{
1430 struct ForEach<F> {
1431 f: F,
1432 }
1433
1434 impl<F> VisitMut for ForEach<F>
1435 where
1436 F: FnMut(&mut Expr),
1437 {
1438 fn visit_expr_mut(&mut self, node: &mut Expr) {
1439 visit_expr_mut(self, node);
1440 (self.f)(node);
1441 }
1442 }
1443
1444 node.visit_mut(ForEach { f });
1445}
1446
1447pub fn walk_expr_scoped_mut<F>(expr: &mut Expr, scope_depth: usize, mut f: F)
1465where
1466 F: FnMut(&mut Expr, usize) -> bool,
1467{
1468 walk_expr_scoped_mut_ref(expr, scope_depth, &mut f);
1469}
1470
1471fn walk_expr_scoped_mut_ref<F>(expr: &mut Expr, scope_depth: usize, f: &mut F)
1472where
1473 F: FnMut(&mut Expr, usize) -> bool,
1474{
1475 struct ScopedWalk<'a, F> {
1476 f: &'a mut F,
1477 scope_depth: usize,
1478 }
1479
1480 impl<F> VisitMut for ScopedWalk<'_, F>
1481 where
1482 F: FnMut(&mut Expr, usize) -> bool,
1483 {
1484 fn visit_expr_mut(&mut self, node: &mut Expr) {
1485 if !(self.f)(node, self.scope_depth) {
1486 return;
1487 }
1488 visit_expr_mut(self, node);
1489 }
1490
1491 fn visit_expr_let_mut(&mut self, node: &mut ExprLet) {
1492 for binding in &mut node.bindings {
1493 self.visit_expr_mut(binding);
1494 }
1495 self.scope_depth += 1;
1496 self.visit_expr_mut(&mut node.body);
1497 self.scope_depth -= 1;
1498 }
1499
1500 fn visit_expr_map_mut(&mut self, node: &mut ExprMap) {
1501 self.visit_expr_mut(&mut node.base);
1502 self.scope_depth += 1;
1503 self.visit_expr_mut(&mut node.map);
1504 self.scope_depth -= 1;
1505 }
1506 }
1507
1508 ScopedWalk { f, scope_depth }.visit_expr_mut(expr);
1509}