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, ExprLike, ExprList, ExprMap, ExprMatch,
7 ExprNot, ExprOr, ExprProject, ExprRecord, ExprReference, ExprSet, ExprSetOp, ExprStartsWith,
8 ExprStmt, Filter, FuncCount, FuncLastInsertId, Insert, InsertTarget, Join, JoinOp, Limit,
9 LimitCursor, LimitOffset, Node, OrderBy, OrderByExpr, Path, Projection, Query, Returning,
10 Select, Source, SourceModel, SourceTable, SourceTableId, Statement, TableDerived, TableFactor,
11 TableRef, TableWithJoins, Type, Update, 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_like_mut(&mut self, i: &mut ExprLike) {
204 visit_expr_like_mut(self, i);
205 }
206
207 fn visit_expr_map_mut(&mut self, i: &mut ExprMap) {
211 visit_expr_map_mut(self, i);
212 }
213
214 fn visit_expr_match_mut(&mut self, i: &mut ExprMatch) {
218 visit_expr_match_mut(self, i);
219 }
220
221 fn visit_expr_not_mut(&mut self, i: &mut ExprNot) {
225 visit_expr_not_mut(self, i);
226 }
227
228 fn visit_expr_or_mut(&mut self, i: &mut ExprOr) {
232 visit_expr_or_mut(self, i);
233 }
234
235 fn visit_expr_list_mut(&mut self, i: &mut ExprList) {
239 visit_expr_list_mut(self, i);
240 }
241
242 fn visit_expr_record_mut(&mut self, i: &mut ExprRecord) {
246 visit_expr_record_mut(self, i);
247 }
248
249 fn visit_expr_reference_mut(&mut self, i: &mut ExprReference) {
253 visit_expr_reference_mut(self, i);
254 }
255
256 fn visit_expr_set_mut(&mut self, i: &mut ExprSet) {
260 visit_expr_set_mut(self, i);
261 }
262
263 fn visit_expr_set_op_mut(&mut self, i: &mut ExprSetOp) {
267 visit_expr_set_op_mut(self, i);
268 }
269
270 fn visit_expr_starts_with_mut(&mut self, i: &mut ExprStartsWith) {
274 visit_expr_starts_with_mut(self, i);
275 }
276
277 fn visit_expr_stmt_mut(&mut self, i: &mut ExprStmt) {
281 visit_expr_stmt_mut(self, i);
282 }
283
284 fn visit_filter_mut(&mut self, i: &mut Filter) {
288 visit_filter_mut(self, i);
289 }
290
291 fn visit_condition_mut(&mut self, i: &mut Condition) {
295 visit_condition_mut(self, i);
296 }
297
298 fn visit_expr_project_mut(&mut self, i: &mut ExprProject) {
302 visit_expr_project_mut(self, i);
303 }
304
305 fn visit_insert_target_mut(&mut self, i: &mut InsertTarget) {
309 visit_insert_target_mut(self, i);
310 }
311
312 fn visit_join_mut(&mut self, i: &mut Join) {
316 visit_join_mut(self, i);
317 }
318
319 fn visit_limit_mut(&mut self, i: &mut Limit) {
323 visit_limit_mut(self, i);
324 }
325
326 fn visit_limit_cursor_mut(&mut self, i: &mut LimitCursor) {
330 visit_limit_cursor_mut(self, i);
331 }
332
333 fn visit_limit_offset_mut(&mut self, i: &mut LimitOffset) {
337 visit_limit_offset_mut(self, i);
338 }
339
340 fn visit_order_by_mut(&mut self, i: &mut OrderBy) {
344 visit_order_by_mut(self, i);
345 }
346
347 fn visit_order_by_expr_mut(&mut self, i: &mut OrderByExpr) {
351 visit_order_by_expr_mut(self, i);
352 }
353
354 fn visit_path_mut(&mut self, i: &mut Path) {
358 visit_path_mut(self, i);
359 }
360
361 fn visit_projection_mut(&mut self, i: &mut Projection) {
365 visit_projection_mut(self, i);
366 }
367
368 fn visit_returning_mut(&mut self, i: &mut Returning) {
372 visit_returning_mut(self, i);
373 }
374
375 fn visit_source_mut(&mut self, i: &mut Source) {
379 visit_source_mut(self, i);
380 }
381
382 fn visit_source_model_mut(&mut self, i: &mut SourceModel) {
386 visit_source_model_mut(self, i);
387 }
388
389 fn visit_source_table_mut(&mut self, i: &mut SourceTable) {
393 visit_source_table_mut(self, i);
394 }
395
396 fn visit_source_table_id_mut(&mut self, i: &mut SourceTableId) {
400 visit_source_table_id_mut(self, i);
401 }
402
403 fn visit_stmt_mut(&mut self, i: &mut Statement) {
407 visit_stmt_mut(self, i);
408 }
409
410 fn visit_stmt_delete_mut(&mut self, i: &mut Delete) {
414 visit_stmt_delete_mut(self, i);
415 }
416
417 fn visit_stmt_insert_mut(&mut self, i: &mut Insert) {
421 visit_stmt_insert_mut(self, i);
422 }
423
424 fn visit_stmt_query_mut(&mut self, i: &mut Query) {
428 visit_stmt_query_mut(self, i);
429 }
430
431 fn visit_stmt_select_mut(&mut self, i: &mut Select) {
435 visit_stmt_select_mut(self, i);
436 }
437
438 fn visit_stmt_update_mut(&mut self, i: &mut Update) {
442 visit_stmt_update_mut(self, i);
443 }
444
445 fn visit_table_derived_mut(&mut self, i: &mut TableDerived) {
449 visit_table_derived_mut(self, i);
450 }
451
452 fn visit_table_ref_mut(&mut self, i: &mut TableRef) {
456 visit_table_ref_mut(self, i);
457 }
458
459 fn visit_table_factor_mut(&mut self, i: &mut TableFactor) {
463 visit_table_factor_mut(self, i);
464 }
465
466 fn visit_table_with_joins_mut(&mut self, i: &mut TableWithJoins) {
470 visit_table_with_joins_mut(self, i);
471 }
472
473 fn visit_type_mut(&mut self, i: &mut Type) {
477 visit_type_mut(self, i);
478 }
479
480 fn visit_update_target_mut(&mut self, i: &mut UpdateTarget) {
484 visit_update_target_mut(self, i);
485 }
486
487 fn visit_value_mut(&mut self, i: &mut Value) {
491 visit_value_mut(self, i);
492 }
493
494 fn visit_value_record(&mut self, i: &mut ValueRecord) {
498 visit_value_record(self, i);
499 }
500
501 fn visit_values_mut(&mut self, i: &mut Values) {
505 visit_values_mut(self, i);
506 }
507
508 fn visit_with_mut(&mut self, i: &mut With) {
512 visit_with_mut(self, i);
513 }
514}
515
516impl<V: VisitMut> VisitMut for &mut V {
517 fn visit_assignment_mut(&mut self, i: &mut Assignment) {
518 VisitMut::visit_assignment_mut(&mut **self, i);
519 }
520
521 fn visit_assignments_mut(&mut self, i: &mut Assignments) {
522 VisitMut::visit_assignments_mut(&mut **self, i);
523 }
524
525 fn visit_association_mut(&mut self, i: &mut Association) {
526 VisitMut::visit_association_mut(&mut **self, i);
527 }
528
529 fn visit_cte_mut(&mut self, i: &mut Cte) {
530 VisitMut::visit_cte_mut(&mut **self, i);
531 }
532
533 fn visit_expr_mut(&mut self, i: &mut Expr) {
534 VisitMut::visit_expr_mut(&mut **self, i);
535 }
536
537 fn visit_expr_and_mut(&mut self, i: &mut ExprAnd) {
538 VisitMut::visit_expr_and_mut(&mut **self, i);
539 }
540
541 fn visit_expr_arg_mut(&mut self, i: &mut ExprArg) {
542 VisitMut::visit_expr_arg_mut(&mut **self, i);
543 }
544
545 fn visit_expr_binary_op_mut(&mut self, i: &mut ExprBinaryOp) {
546 VisitMut::visit_expr_binary_op_mut(&mut **self, i);
547 }
548
549 fn visit_expr_cast_mut(&mut self, i: &mut ExprCast) {
550 VisitMut::visit_expr_cast_mut(&mut **self, i);
551 }
552
553 fn visit_expr_column_mut(&mut self, i: &mut ExprColumn) {
554 VisitMut::visit_expr_column_mut(&mut **self, i);
555 }
556
557 fn visit_expr_default_mut(&mut self) {
558 VisitMut::visit_expr_default_mut(&mut **self);
559 }
560
561 fn visit_expr_error_mut(&mut self, i: &mut ExprError) {
562 VisitMut::visit_expr_error_mut(&mut **self, i);
563 }
564
565 fn visit_expr_exists_mut(&mut self, i: &mut ExprExists) {
566 VisitMut::visit_expr_exists_mut(&mut **self, i);
567 }
568
569 fn visit_expr_func_mut(&mut self, i: &mut ExprFunc) {
570 VisitMut::visit_expr_func_mut(&mut **self, i);
571 }
572
573 fn visit_expr_func_count_mut(&mut self, i: &mut FuncCount) {
574 VisitMut::visit_expr_func_count_mut(&mut **self, i);
575 }
576
577 fn visit_expr_in_list_mut(&mut self, i: &mut ExprInList) {
578 VisitMut::visit_expr_in_list_mut(&mut **self, i);
579 }
580
581 fn visit_expr_in_subquery_mut(&mut self, i: &mut ExprInSubquery) {
582 VisitMut::visit_expr_in_subquery_mut(&mut **self, i);
583 }
584
585 fn visit_expr_is_null_mut(&mut self, i: &mut ExprIsNull) {
586 VisitMut::visit_expr_is_null_mut(&mut **self, i);
587 }
588
589 fn visit_expr_is_variant_mut(&mut self, i: &mut ExprIsVariant) {
590 VisitMut::visit_expr_is_variant_mut(&mut **self, i);
591 }
592
593 fn visit_expr_let_mut(&mut self, i: &mut ExprLet) {
594 VisitMut::visit_expr_let_mut(&mut **self, i);
595 }
596
597 fn visit_expr_like_mut(&mut self, i: &mut ExprLike) {
598 VisitMut::visit_expr_like_mut(&mut **self, i);
599 }
600
601 fn visit_expr_map_mut(&mut self, i: &mut ExprMap) {
602 VisitMut::visit_expr_map_mut(&mut **self, i);
603 }
604
605 fn visit_expr_match_mut(&mut self, i: &mut ExprMatch) {
606 VisitMut::visit_expr_match_mut(&mut **self, i);
607 }
608
609 fn visit_expr_not_mut(&mut self, i: &mut ExprNot) {
610 VisitMut::visit_expr_not_mut(&mut **self, i);
611 }
612
613 fn visit_expr_or_mut(&mut self, i: &mut ExprOr) {
614 VisitMut::visit_expr_or_mut(&mut **self, i);
615 }
616
617 fn visit_expr_list_mut(&mut self, i: &mut ExprList) {
618 VisitMut::visit_expr_list_mut(&mut **self, i);
619 }
620
621 fn visit_expr_record_mut(&mut self, i: &mut ExprRecord) {
622 VisitMut::visit_expr_record_mut(&mut **self, i);
623 }
624
625 fn visit_expr_reference_mut(&mut self, i: &mut ExprReference) {
626 VisitMut::visit_expr_reference_mut(&mut **self, i);
627 }
628
629 fn visit_expr_set_mut(&mut self, i: &mut ExprSet) {
630 VisitMut::visit_expr_set_mut(&mut **self, i);
631 }
632
633 fn visit_expr_set_op_mut(&mut self, i: &mut ExprSetOp) {
634 VisitMut::visit_expr_set_op_mut(&mut **self, i);
635 }
636
637 fn visit_expr_starts_with_mut(&mut self, i: &mut ExprStartsWith) {
638 VisitMut::visit_expr_starts_with_mut(&mut **self, i);
639 }
640
641 fn visit_expr_stmt_mut(&mut self, i: &mut ExprStmt) {
642 VisitMut::visit_expr_stmt_mut(&mut **self, i);
643 }
644
645 fn visit_filter_mut(&mut self, i: &mut Filter) {
646 VisitMut::visit_filter_mut(&mut **self, i);
647 }
648
649 fn visit_condition_mut(&mut self, i: &mut Condition) {
650 VisitMut::visit_condition_mut(&mut **self, i);
651 }
652
653 fn visit_expr_project_mut(&mut self, i: &mut ExprProject) {
654 VisitMut::visit_expr_project_mut(&mut **self, i);
655 }
656
657 fn visit_insert_target_mut(&mut self, i: &mut InsertTarget) {
658 VisitMut::visit_insert_target_mut(&mut **self, i);
659 }
660
661 fn visit_join_mut(&mut self, i: &mut Join) {
662 VisitMut::visit_join_mut(&mut **self, i);
663 }
664
665 fn visit_limit_mut(&mut self, i: &mut Limit) {
666 VisitMut::visit_limit_mut(&mut **self, i);
667 }
668
669 fn visit_limit_cursor_mut(&mut self, i: &mut LimitCursor) {
670 VisitMut::visit_limit_cursor_mut(&mut **self, i);
671 }
672
673 fn visit_limit_offset_mut(&mut self, i: &mut LimitOffset) {
674 VisitMut::visit_limit_offset_mut(&mut **self, i);
675 }
676
677 fn visit_order_by_mut(&mut self, i: &mut OrderBy) {
678 VisitMut::visit_order_by_mut(&mut **self, i);
679 }
680
681 fn visit_order_by_expr_mut(&mut self, i: &mut OrderByExpr) {
682 VisitMut::visit_order_by_expr_mut(&mut **self, i);
683 }
684
685 fn visit_path_mut(&mut self, i: &mut Path) {
686 VisitMut::visit_path_mut(&mut **self, i);
687 }
688
689 fn visit_projection_mut(&mut self, i: &mut Projection) {
690 VisitMut::visit_projection_mut(&mut **self, i);
691 }
692
693 fn visit_returning_mut(&mut self, i: &mut Returning) {
694 VisitMut::visit_returning_mut(&mut **self, i);
695 }
696
697 fn visit_source_mut(&mut self, i: &mut Source) {
698 VisitMut::visit_source_mut(&mut **self, i);
699 }
700
701 fn visit_source_model_mut(&mut self, i: &mut SourceModel) {
702 VisitMut::visit_source_model_mut(&mut **self, i);
703 }
704
705 fn visit_source_table_mut(&mut self, i: &mut SourceTable) {
706 VisitMut::visit_source_table_mut(&mut **self, i);
707 }
708
709 fn visit_source_table_id_mut(&mut self, i: &mut SourceTableId) {
710 VisitMut::visit_source_table_id_mut(&mut **self, i);
711 }
712
713 fn visit_stmt_mut(&mut self, i: &mut Statement) {
714 VisitMut::visit_stmt_mut(&mut **self, i);
715 }
716
717 fn visit_stmt_delete_mut(&mut self, i: &mut Delete) {
718 VisitMut::visit_stmt_delete_mut(&mut **self, i);
719 }
720
721 fn visit_stmt_insert_mut(&mut self, i: &mut Insert) {
722 VisitMut::visit_stmt_insert_mut(&mut **self, i);
723 }
724
725 fn visit_stmt_query_mut(&mut self, i: &mut Query) {
726 VisitMut::visit_stmt_query_mut(&mut **self, i);
727 }
728
729 fn visit_stmt_select_mut(&mut self, i: &mut Select) {
730 VisitMut::visit_stmt_select_mut(&mut **self, i);
731 }
732
733 fn visit_stmt_update_mut(&mut self, i: &mut Update) {
734 VisitMut::visit_stmt_update_mut(&mut **self, i);
735 }
736
737 fn visit_table_derived_mut(&mut self, i: &mut TableDerived) {
738 VisitMut::visit_table_derived_mut(&mut **self, i);
739 }
740
741 fn visit_table_ref_mut(&mut self, i: &mut TableRef) {
742 VisitMut::visit_table_ref_mut(&mut **self, i);
743 }
744
745 fn visit_table_factor_mut(&mut self, i: &mut TableFactor) {
746 VisitMut::visit_table_factor_mut(&mut **self, i);
747 }
748
749 fn visit_table_with_joins_mut(&mut self, i: &mut TableWithJoins) {
750 VisitMut::visit_table_with_joins_mut(&mut **self, i);
751 }
752
753 fn visit_type_mut(&mut self, i: &mut Type) {
754 VisitMut::visit_type_mut(&mut **self, i);
755 }
756
757 fn visit_update_target_mut(&mut self, i: &mut UpdateTarget) {
758 VisitMut::visit_update_target_mut(&mut **self, i);
759 }
760
761 fn visit_value_mut(&mut self, i: &mut Value) {
762 VisitMut::visit_value_mut(&mut **self, i);
763 }
764
765 fn visit_value_record(&mut self, i: &mut ValueRecord) {
766 VisitMut::visit_value_record(&mut **self, i);
767 }
768
769 fn visit_values_mut(&mut self, i: &mut Values) {
770 VisitMut::visit_values_mut(&mut **self, i);
771 }
772
773 fn visit_with_mut(&mut self, i: &mut With) {
774 VisitMut::visit_with_mut(&mut **self, i);
775 }
776}
777
778pub fn visit_assignment_mut<V>(v: &mut V, node: &mut Assignment)
780where
781 V: VisitMut + ?Sized,
782{
783 match node {
784 Assignment::Set(expr) | Assignment::Insert(expr) | Assignment::Remove(expr) => {
785 v.visit_expr_mut(expr);
786 }
787 Assignment::Batch(entries) => {
788 for entry in entries {
789 visit_assignment_mut(v, entry);
790 }
791 }
792 }
793}
794
795pub fn visit_assignments_mut<V>(v: &mut V, node: &mut Assignments)
797where
798 V: VisitMut + ?Sized,
799{
800 for (_, assignment) in node.iter_mut() {
801 v.visit_assignment_mut(assignment);
802 }
803}
804
805pub fn visit_association_mut<V>(v: &mut V, node: &mut Association)
807where
808 V: VisitMut + ?Sized,
809{
810 v.visit_stmt_query_mut(&mut node.source);
811}
812
813pub fn visit_cte_mut<V>(v: &mut V, node: &mut Cte)
815where
816 V: VisitMut + ?Sized,
817{
818 v.visit_stmt_query_mut(&mut node.query);
819}
820
821pub fn visit_expr_mut<V>(v: &mut V, node: &mut Expr)
823where
824 V: VisitMut + ?Sized,
825{
826 match node {
827 Expr::And(expr) => v.visit_expr_and_mut(expr),
828 Expr::Any(expr) => v.visit_expr_any_mut(expr),
829 Expr::Arg(expr) => v.visit_expr_arg_mut(expr),
830 Expr::BinaryOp(expr) => v.visit_expr_binary_op_mut(expr),
831 Expr::Cast(expr) => v.visit_expr_cast_mut(expr),
832 Expr::Default => v.visit_expr_default_mut(),
833 Expr::Error(expr) => v.visit_expr_error_mut(expr),
834 Expr::Exists(expr) => v.visit_expr_exists_mut(expr),
835 Expr::Func(expr) => v.visit_expr_func_mut(expr),
836 Expr::Ident(_) => {}
837 Expr::InList(expr) => v.visit_expr_in_list_mut(expr),
838 Expr::InSubquery(expr) => v.visit_expr_in_subquery_mut(expr),
839 Expr::IsNull(expr) => v.visit_expr_is_null_mut(expr),
840 Expr::IsVariant(expr) => v.visit_expr_is_variant_mut(expr),
841 Expr::Let(expr) => v.visit_expr_let_mut(expr),
842 Expr::Like(expr) => v.visit_expr_like_mut(expr),
843 Expr::Map(expr) => v.visit_expr_map_mut(expr),
844 Expr::Match(expr) => v.visit_expr_match_mut(expr),
845 Expr::Not(expr) => v.visit_expr_not_mut(expr),
846 Expr::Or(expr) => v.visit_expr_or_mut(expr),
847 Expr::Project(expr) => v.visit_expr_project_mut(expr),
848 Expr::Record(expr) => v.visit_expr_record_mut(expr),
849 Expr::Reference(expr) => v.visit_expr_reference_mut(expr),
850 Expr::List(expr) => v.visit_expr_list_mut(expr),
851 Expr::StartsWith(expr) => v.visit_expr_starts_with_mut(expr),
852 Expr::Stmt(expr) => v.visit_expr_stmt_mut(expr),
853 Expr::Value(expr) => v.visit_value_mut(expr),
854 }
855}
856
857pub fn visit_expr_and_mut<V>(v: &mut V, node: &mut ExprAnd)
859where
860 V: VisitMut + ?Sized,
861{
862 for expr in node {
863 v.visit_expr_mut(expr);
864 }
865}
866
867pub fn visit_expr_any_mut<V>(v: &mut V, node: &mut ExprAny)
869where
870 V: VisitMut + ?Sized,
871{
872 v.visit_expr_mut(&mut node.expr);
873}
874
875pub fn visit_expr_arg_mut<V>(v: &mut V, node: &mut ExprArg)
877where
878 V: VisitMut + ?Sized,
879{
880}
881
882pub fn visit_expr_binary_op_mut<V>(v: &mut V, node: &mut ExprBinaryOp)
884where
885 V: VisitMut + ?Sized,
886{
887 v.visit_expr_mut(&mut node.lhs);
888 v.visit_expr_mut(&mut node.rhs);
889}
890
891pub fn visit_expr_cast_mut<V>(v: &mut V, node: &mut ExprCast)
893where
894 V: VisitMut + ?Sized,
895{
896 v.visit_expr_mut(&mut node.expr);
897 v.visit_type_mut(&mut node.ty);
898}
899
900pub fn visit_expr_column_mut<V>(v: &mut V, node: &mut ExprColumn)
902where
903 V: VisitMut + ?Sized,
904{
905}
906
907pub fn visit_expr_default_mut<V>(v: &mut V)
909where
910 V: VisitMut + ?Sized,
911{
912}
913
914pub fn visit_expr_error_mut<V>(v: &mut V, node: &mut ExprError)
916where
917 V: VisitMut + ?Sized,
918{
919 }
921
922pub fn visit_expr_exists_mut<V>(v: &mut V, node: &mut ExprExists)
924where
925 V: VisitMut + ?Sized,
926{
927 v.visit_stmt_query_mut(&mut node.subquery);
928}
929
930pub fn visit_expr_func_mut<V>(v: &mut V, node: &mut ExprFunc)
932where
933 V: VisitMut + ?Sized,
934{
935 match node {
936 ExprFunc::Count(func) => v.visit_expr_func_count_mut(func),
937 ExprFunc::LastInsertId(func) => v.visit_expr_func_last_insert_id_mut(func),
938 }
939}
940
941pub fn visit_expr_func_count_mut<V>(v: &mut V, node: &mut FuncCount)
943where
944 V: VisitMut + ?Sized,
945{
946 if let Some(expr) = &mut node.arg {
947 v.visit_expr_mut(expr);
948 }
949
950 if let Some(expr) = &mut node.filter {
951 v.visit_expr_mut(expr);
952 }
953}
954
955pub fn visit_expr_func_last_insert_id_mut<V>(_v: &mut V, _node: &mut FuncLastInsertId)
957where
958 V: VisitMut + ?Sized,
959{
960 }
962
963pub fn visit_expr_in_list_mut<V>(v: &mut V, node: &mut ExprInList)
965where
966 V: VisitMut + ?Sized,
967{
968 v.visit_expr_mut(&mut node.expr);
969 v.visit_expr_mut(&mut node.list);
970}
971
972pub fn visit_expr_in_subquery_mut<V>(v: &mut V, node: &mut ExprInSubquery)
974where
975 V: VisitMut + ?Sized,
976{
977 v.visit_expr_mut(&mut node.expr);
978 v.visit_stmt_query_mut(&mut node.query);
979}
980
981pub fn visit_expr_is_null_mut<V>(v: &mut V, node: &mut ExprIsNull)
983where
984 V: VisitMut + ?Sized,
985{
986 v.visit_expr_mut(&mut node.expr);
987}
988
989pub fn visit_expr_is_variant_mut<V>(v: &mut V, node: &mut ExprIsVariant)
991where
992 V: VisitMut + ?Sized,
993{
994 v.visit_expr_mut(&mut node.expr);
995}
996
997pub fn visit_expr_let_mut<V>(v: &mut V, node: &mut ExprLet)
999where
1000 V: VisitMut + ?Sized,
1001{
1002 for binding in &mut node.bindings {
1003 v.visit_expr_mut(binding);
1004 }
1005 v.visit_expr_mut(&mut node.body);
1006}
1007
1008pub fn visit_expr_like_mut<V>(v: &mut V, node: &mut ExprLike)
1010where
1011 V: VisitMut + ?Sized,
1012{
1013 v.visit_expr_mut(&mut node.expr);
1014 v.visit_expr_mut(&mut node.pattern);
1015}
1016
1017pub fn visit_expr_map_mut<V>(v: &mut V, node: &mut ExprMap)
1019where
1020 V: VisitMut + ?Sized,
1021{
1022 v.visit_expr_mut(&mut node.base);
1023 v.visit_expr_mut(&mut node.map);
1024}
1025
1026pub fn visit_expr_match_mut<V>(v: &mut V, node: &mut ExprMatch)
1028where
1029 V: VisitMut + ?Sized,
1030{
1031 v.visit_expr_mut(&mut node.subject);
1032 for arm in &mut node.arms {
1033 v.visit_expr_mut(&mut arm.expr);
1034 }
1035 v.visit_expr_mut(&mut node.else_expr);
1036}
1037
1038pub fn visit_expr_not_mut<V>(v: &mut V, node: &mut ExprNot)
1040where
1041 V: VisitMut + ?Sized,
1042{
1043 v.visit_expr_mut(&mut node.expr);
1044}
1045
1046pub fn visit_expr_or_mut<V>(v: &mut V, node: &mut ExprOr)
1048where
1049 V: VisitMut + ?Sized,
1050{
1051 for expr in node {
1052 v.visit_expr_mut(expr);
1053 }
1054}
1055
1056pub fn visit_expr_list_mut<V>(v: &mut V, node: &mut ExprList)
1058where
1059 V: VisitMut + ?Sized,
1060{
1061 for e in &mut node.items {
1062 v.visit_expr_mut(e);
1063 }
1064}
1065
1066pub fn visit_expr_record_mut<V>(v: &mut V, node: &mut ExprRecord)
1068where
1069 V: VisitMut + ?Sized,
1070{
1071 for expr in &mut **node {
1072 v.visit_expr_mut(expr);
1073 }
1074}
1075
1076pub fn visit_expr_reference_mut<V>(v: &mut V, node: &mut ExprReference)
1078where
1079 V: VisitMut + ?Sized,
1080{
1081 match node {
1082 ExprReference::Model { .. } => {}
1083 ExprReference::Field { .. } => {}
1084 ExprReference::Column(expr_column) => v.visit_expr_column_mut(expr_column),
1085 }
1086}
1087
1088pub fn visit_expr_set_mut<V>(v: &mut V, node: &mut ExprSet)
1090where
1091 V: VisitMut + ?Sized,
1092{
1093 match node {
1094 ExprSet::Select(expr) => v.visit_stmt_select_mut(expr),
1095 ExprSet::SetOp(expr) => v.visit_expr_set_op_mut(expr),
1096 ExprSet::Update(expr) => v.visit_stmt_update_mut(expr),
1097 ExprSet::Values(expr) => v.visit_values_mut(expr),
1098 ExprSet::Insert(expr) => v.visit_stmt_insert_mut(expr),
1099 }
1100}
1101
1102pub fn visit_expr_set_op_mut<V>(v: &mut V, node: &mut ExprSetOp)
1104where
1105 V: VisitMut + ?Sized,
1106{
1107 for operand in &mut node.operands {
1108 v.visit_expr_set_mut(operand);
1109 }
1110}
1111
1112pub fn visit_expr_starts_with_mut<V>(v: &mut V, node: &mut ExprStartsWith)
1114where
1115 V: VisitMut + ?Sized,
1116{
1117 v.visit_expr_mut(&mut node.expr);
1118 v.visit_expr_mut(&mut node.prefix);
1119}
1120
1121pub fn visit_expr_stmt_mut<V>(v: &mut V, node: &mut ExprStmt)
1123where
1124 V: VisitMut + ?Sized,
1125{
1126 v.visit_stmt_mut(&mut node.stmt);
1127}
1128
1129pub fn visit_expr_project_mut<V>(v: &mut V, node: &mut ExprProject)
1131where
1132 V: VisitMut + ?Sized,
1133{
1134 v.visit_expr_mut(&mut node.base);
1135 v.visit_projection_mut(&mut node.projection);
1136}
1137
1138pub fn visit_filter_mut<V>(v: &mut V, node: &mut Filter)
1140where
1141 V: VisitMut + ?Sized,
1142{
1143 if let Some(expr) = &mut node.expr {
1144 v.visit_expr_mut(expr);
1145 }
1146}
1147
1148pub fn visit_condition_mut<V>(v: &mut V, node: &mut Condition)
1150where
1151 V: VisitMut + ?Sized,
1152{
1153 if let Some(expr) = &mut node.expr {
1154 v.visit_expr_mut(expr);
1155 }
1156}
1157
1158pub fn visit_insert_target_mut<V>(v: &mut V, node: &mut InsertTarget)
1160where
1161 V: VisitMut + ?Sized,
1162{
1163 if let InsertTarget::Scope(stmt) = node {
1164 v.visit_stmt_query_mut(stmt)
1165 }
1166}
1167
1168pub fn visit_join_mut<V>(v: &mut V, node: &mut Join)
1170where
1171 V: VisitMut + ?Sized,
1172{
1173 v.visit_source_table_id_mut(&mut node.table);
1174 match &mut node.constraint {
1175 JoinOp::Left(expr) => v.visit_expr_mut(expr),
1176 }
1177}
1178
1179pub fn visit_limit_mut<V>(v: &mut V, node: &mut Limit)
1181where
1182 V: VisitMut + ?Sized,
1183{
1184 match node {
1185 Limit::Cursor(cursor) => v.visit_limit_cursor_mut(cursor),
1186 Limit::Offset(offset) => v.visit_limit_offset_mut(offset),
1187 }
1188}
1189
1190pub fn visit_limit_cursor_mut<V>(v: &mut V, node: &mut LimitCursor)
1192where
1193 V: VisitMut + ?Sized,
1194{
1195 v.visit_expr_mut(&mut node.page_size);
1196 if let Some(after) = &mut node.after {
1197 v.visit_expr_mut(after);
1198 }
1199}
1200
1201pub fn visit_limit_offset_mut<V>(v: &mut V, node: &mut LimitOffset)
1203where
1204 V: VisitMut + ?Sized,
1205{
1206 v.visit_expr_mut(&mut node.limit);
1207 if let Some(offset) = &mut node.offset {
1208 v.visit_expr_mut(offset);
1209 }
1210}
1211
1212pub fn visit_order_by_mut<V>(v: &mut V, node: &mut OrderBy)
1214where
1215 V: VisitMut + ?Sized,
1216{
1217 for expr in &mut node.exprs {
1218 v.visit_order_by_expr_mut(expr);
1219 }
1220}
1221
1222pub fn visit_order_by_expr_mut<V>(v: &mut V, node: &mut OrderByExpr)
1224where
1225 V: VisitMut + ?Sized,
1226{
1227 v.visit_expr_mut(&mut node.expr);
1228}
1229
1230pub fn visit_path_mut<V>(v: &mut V, node: &mut Path)
1232where
1233 V: VisitMut + ?Sized,
1234{
1235 v.visit_projection_mut(&mut node.projection);
1236}
1237
1238pub fn visit_projection_mut<V>(v: &mut V, node: &mut Projection)
1240where
1241 V: VisitMut + ?Sized,
1242{
1243}
1244
1245pub fn visit_returning_mut<V>(v: &mut V, node: &mut Returning)
1247where
1248 V: VisitMut + ?Sized,
1249{
1250 match node {
1251 Returning::Model { include } => {
1252 for path in include {
1253 v.visit_path_mut(path);
1254 }
1255 }
1256 Returning::Changed => {}
1257 Returning::Project(expr) => v.visit_expr_mut(expr),
1258 Returning::Expr(expr) => v.visit_expr_mut(expr),
1259 }
1260}
1261
1262pub fn visit_source_mut<V>(v: &mut V, node: &mut Source)
1264where
1265 V: VisitMut + ?Sized,
1266{
1267 match node {
1268 Source::Model(source_model) => v.visit_source_model_mut(source_model),
1269 Source::Table(source_table) => v.visit_source_table_mut(source_table),
1270 }
1271}
1272
1273pub fn visit_source_model_mut<V>(v: &mut V, node: &mut SourceModel)
1275where
1276 V: VisitMut + ?Sized,
1277{
1278 if let Some(association) = &mut node.via {
1279 v.visit_association_mut(association);
1280 }
1281}
1282
1283pub fn visit_source_table_mut<V>(v: &mut V, node: &mut SourceTable)
1285where
1286 V: VisitMut + ?Sized,
1287{
1288 for table_ref in &mut node.tables {
1289 v.visit_table_ref_mut(table_ref);
1290 }
1291 for table_with_joins in &mut node.from {
1292 v.visit_table_with_joins_mut(table_with_joins);
1293 }
1294}
1295
1296pub fn visit_source_table_id_mut<V>(v: &mut V, node: &mut SourceTableId)
1298where
1299 V: VisitMut + ?Sized,
1300{
1301 }
1303
1304pub fn visit_table_factor_mut<V>(v: &mut V, node: &mut TableFactor)
1306where
1307 V: VisitMut + ?Sized,
1308{
1309 match node {
1310 TableFactor::Table(table_id) => v.visit_source_table_id_mut(table_id),
1311 }
1312}
1313
1314pub fn visit_stmt_mut<V>(v: &mut V, node: &mut Statement)
1316where
1317 V: VisitMut + ?Sized,
1318{
1319 match node {
1320 Statement::Delete(stmt) => v.visit_stmt_delete_mut(stmt),
1321 Statement::Insert(stmt) => v.visit_stmt_insert_mut(stmt),
1322 Statement::Query(stmt) => v.visit_stmt_query_mut(stmt),
1323 Statement::Update(stmt) => v.visit_stmt_update_mut(stmt),
1324 }
1325}
1326
1327pub fn visit_stmt_delete_mut<V>(v: &mut V, node: &mut Delete)
1329where
1330 V: VisitMut + ?Sized,
1331{
1332 v.visit_source_mut(&mut node.from);
1333 v.visit_filter_mut(&mut node.filter);
1334 v.visit_condition_mut(&mut node.condition);
1335
1336 if let Some(returning) = &mut node.returning {
1337 v.visit_returning_mut(returning);
1338 }
1339}
1340
1341pub fn visit_stmt_insert_mut<V>(v: &mut V, node: &mut Insert)
1343where
1344 V: VisitMut + ?Sized,
1345{
1346 v.visit_insert_target_mut(&mut node.target);
1347 v.visit_stmt_query_mut(&mut node.source);
1348
1349 if let Some(returning) = &mut node.returning {
1350 v.visit_returning_mut(returning);
1351 }
1352}
1353
1354pub fn visit_stmt_query_mut<V>(v: &mut V, node: &mut Query)
1356where
1357 V: VisitMut + ?Sized,
1358{
1359 if let Some(with) = &mut node.with {
1360 v.visit_with_mut(with);
1361 }
1362
1363 v.visit_expr_set_mut(&mut node.body);
1364
1365 if let Some(order_by) = &mut node.order_by {
1366 v.visit_order_by_mut(order_by);
1367 }
1368
1369 if let Some(limit) = &mut node.limit {
1370 v.visit_limit_mut(limit);
1371 }
1372}
1373
1374pub fn visit_stmt_select_mut<V>(v: &mut V, node: &mut Select)
1376where
1377 V: VisitMut + ?Sized,
1378{
1379 v.visit_source_mut(&mut node.source);
1380 v.visit_filter_mut(&mut node.filter);
1381 v.visit_returning_mut(&mut node.returning);
1382}
1383
1384pub fn visit_stmt_update_mut<V>(v: &mut V, node: &mut Update)
1386where
1387 V: VisitMut + ?Sized,
1388{
1389 v.visit_update_target_mut(&mut node.target);
1390 v.visit_assignments_mut(&mut node.assignments);
1391 v.visit_filter_mut(&mut node.filter);
1392 v.visit_condition_mut(&mut node.condition);
1393
1394 if let Some(returning) = &mut node.returning {
1395 v.visit_returning_mut(returning);
1396 }
1397}
1398
1399pub fn visit_table_derived_mut<V>(v: &mut V, node: &mut TableDerived)
1401where
1402 V: VisitMut + ?Sized,
1403{
1404 v.visit_stmt_query_mut(&mut node.subquery);
1405}
1406
1407pub fn visit_table_ref_mut<V>(v: &mut V, node: &mut TableRef)
1409where
1410 V: VisitMut + ?Sized,
1411{
1412 match node {
1413 TableRef::Cte { .. } => {}
1414 TableRef::Derived(table_derived) => v.visit_table_derived_mut(table_derived),
1415 TableRef::Table(_) => {}
1416 TableRef::Arg(expr_arg) => v.visit_expr_arg_mut(expr_arg),
1417 }
1418}
1419
1420pub fn visit_table_with_joins_mut<V>(v: &mut V, node: &mut TableWithJoins)
1422where
1423 V: VisitMut + ?Sized,
1424{
1425 v.visit_table_factor_mut(&mut node.relation);
1426 for join in &mut node.joins {
1427 v.visit_join_mut(join);
1428 }
1429}
1430
1431pub fn visit_type_mut<V>(v: &mut V, node: &mut Type)
1433where
1434 V: VisitMut + ?Sized,
1435{
1436 }
1438
1439pub fn visit_update_target_mut<V>(v: &mut V, node: &mut UpdateTarget)
1441where
1442 V: VisitMut + ?Sized,
1443{
1444 if let UpdateTarget::Query(stmt) = node {
1445 v.visit_stmt_query_mut(stmt)
1446 }
1447}
1448
1449pub fn visit_value_mut<V>(v: &mut V, node: &mut Value)
1451where
1452 V: VisitMut + ?Sized,
1453{
1454 if let Value::Record(node) = node {
1455 v.visit_value_record(node);
1456 }
1457}
1458
1459pub fn visit_value_record<V>(v: &mut V, node: &mut ValueRecord)
1461where
1462 V: VisitMut + ?Sized,
1463{
1464 for expr in &mut node.fields {
1465 v.visit_value_mut(expr);
1466 }
1467}
1468
1469pub fn visit_values_mut<V>(v: &mut V, node: &mut Values)
1471where
1472 V: VisitMut + ?Sized,
1473{
1474 for expr in &mut node.rows {
1475 v.visit_expr_mut(expr);
1476 }
1477}
1478
1479pub fn visit_with_mut<V>(v: &mut V, node: &mut With)
1481where
1482 V: VisitMut + ?Sized,
1483{
1484 for cte in &mut node.ctes {
1485 v.visit_cte_mut(cte);
1486 }
1487}
1488
1489pub fn for_each_expr_mut<F>(node: &mut impl Node, f: F)
1492where
1493 F: FnMut(&mut Expr),
1494{
1495 struct ForEach<F> {
1496 f: F,
1497 }
1498
1499 impl<F> VisitMut for ForEach<F>
1500 where
1501 F: FnMut(&mut Expr),
1502 {
1503 fn visit_expr_mut(&mut self, node: &mut Expr) {
1504 visit_expr_mut(self, node);
1505 (self.f)(node);
1506 }
1507 }
1508
1509 node.visit_mut(ForEach { f });
1510}
1511
1512pub fn walk_expr_scoped_mut<F>(expr: &mut Expr, scope_depth: usize, mut f: F)
1530where
1531 F: FnMut(&mut Expr, usize) -> bool,
1532{
1533 walk_expr_scoped_mut_ref(expr, scope_depth, &mut f);
1534}
1535
1536fn walk_expr_scoped_mut_ref<F>(expr: &mut Expr, scope_depth: usize, f: &mut F)
1537where
1538 F: FnMut(&mut Expr, usize) -> bool,
1539{
1540 struct ScopedWalk<'a, F> {
1541 f: &'a mut F,
1542 scope_depth: usize,
1543 }
1544
1545 impl<F> VisitMut for ScopedWalk<'_, F>
1546 where
1547 F: FnMut(&mut Expr, usize) -> bool,
1548 {
1549 fn visit_expr_mut(&mut self, node: &mut Expr) {
1550 if !(self.f)(node, self.scope_depth) {
1551 return;
1552 }
1553 visit_expr_mut(self, node);
1554 }
1555
1556 fn visit_expr_let_mut(&mut self, node: &mut ExprLet) {
1557 for binding in &mut node.bindings {
1558 self.visit_expr_mut(binding);
1559 }
1560 self.scope_depth += 1;
1561 self.visit_expr_mut(&mut node.body);
1562 self.scope_depth -= 1;
1563 }
1564
1565 fn visit_expr_map_mut(&mut self, node: &mut ExprMap) {
1566 self.visit_expr_mut(&mut node.base);
1567 self.scope_depth += 1;
1568 self.visit_expr_mut(&mut node.map);
1569 self.scope_depth -= 1;
1570 }
1571 }
1572
1573 ScopedWalk { f, scope_depth }.visit_expr_mut(expr);
1574}