1#![allow(unused_variables)]
2
3use super::{
4 Assignment, Assignments, Association, Condition, Cte, Delete, Expr, ExprAllOp, ExprAnd,
5 ExprAny, ExprAnyOp, ExprArg, ExprBetween, ExprBinaryOp, ExprCast, ExprColumn, ExprError,
6 ExprExists, ExprFunc, ExprInList, ExprInSubquery, ExprIncoming, ExprIntersects, ExprIsNull,
7 ExprIsSuperset, ExprIsVariant, ExprLength, ExprLet, ExprLike, ExprList, ExprMap, ExprMatch,
8 ExprNot, ExprOr, ExprProject, ExprRecord, ExprReference, ExprSet, ExprSetOp, ExprStartsWith,
9 ExprStmt, ExprVariant, Filter, FuncCount, FuncJsonExtract, FuncLastInsertId, FuncUnnest,
10 Include, Insert, InsertTarget, Join, JoinOp, Limit, LimitCursor, LimitOffset, Node, OrderBy,
11 OrderByExpr, Path, Projection, Query, Returning, Select, Source, SourceModel, SourceTable,
12 SourceTableId, Statement, TableDerived, TableFactor, TableRef, TableWithJoins, Type, Update,
13 UpdateTarget, Value, ValueRecord, Values, With,
14};
15
16pub trait VisitMut {
40 fn visit_mut<N: Node>(&mut self, i: &mut N)
42 where
43 Self: Sized,
44 {
45 i.visit_mut(self);
46 }
47
48 fn visit_assignment_mut(&mut self, i: &mut Assignment) {
52 visit_assignment_mut(self, i);
53 }
54
55 fn visit_assignments_mut(&mut self, i: &mut Assignments) {
59 visit_assignments_mut(self, i);
60 }
61
62 fn visit_association_mut(&mut self, i: &mut Association) {
66 visit_association_mut(self, i);
67 }
68
69 fn visit_cte_mut(&mut self, i: &mut Cte) {
73 visit_cte_mut(self, i);
74 }
75
76 fn visit_expr_mut(&mut self, i: &mut Expr) {
80 visit_expr_mut(self, i);
81 }
82
83 fn visit_expr_and_mut(&mut self, i: &mut ExprAnd) {
87 visit_expr_and_mut(self, i);
88 }
89
90 fn visit_expr_any_mut(&mut self, i: &mut ExprAny) {
94 visit_expr_any_mut(self, i);
95 }
96
97 fn visit_expr_arg_mut(&mut self, i: &mut ExprArg) {
101 visit_expr_arg_mut(self, i);
102 }
103
104 fn visit_expr_any_op_mut(&mut self, i: &mut ExprAnyOp) {
108 visit_expr_any_op_mut(self, i);
109 }
110
111 fn visit_expr_all_op_mut(&mut self, i: &mut ExprAllOp) {
115 visit_expr_all_op_mut(self, i);
116 }
117
118 fn visit_expr_between_mut(&mut self, i: &mut ExprBetween) {
122 visit_expr_between_mut(self, i);
123 }
124
125 fn visit_expr_binary_op_mut(&mut self, i: &mut ExprBinaryOp) {
129 visit_expr_binary_op_mut(self, i);
130 }
131
132 fn visit_expr_cast_mut(&mut self, i: &mut ExprCast) {
136 visit_expr_cast_mut(self, i);
137 }
138
139 fn visit_expr_column_mut(&mut self, i: &mut ExprColumn) {
143 visit_expr_column_mut(self, i);
144 }
145
146 fn visit_expr_default_mut(&mut self) {
150 visit_expr_default_mut(self);
151 }
152
153 fn visit_expr_error_mut(&mut self, i: &mut ExprError) {
157 visit_expr_error_mut(self, i);
158 }
159
160 fn visit_expr_exists_mut(&mut self, i: &mut ExprExists) {
164 visit_expr_exists_mut(self, i);
165 }
166
167 fn visit_expr_func_mut(&mut self, i: &mut ExprFunc) {
171 visit_expr_func_mut(self, i);
172 }
173
174 fn visit_expr_func_count_mut(&mut self, i: &mut FuncCount) {
178 visit_expr_func_count_mut(self, i);
179 }
180
181 fn visit_expr_func_json_extract_mut(&mut self, i: &mut FuncJsonExtract) {
185 visit_expr_func_json_extract_mut(self, i);
186 }
187
188 fn visit_expr_func_last_insert_id_mut(&mut self, i: &mut FuncLastInsertId) {
192 visit_expr_func_last_insert_id_mut(self, i);
193 }
194
195 fn visit_expr_func_unnest_mut(&mut self, i: &mut FuncUnnest) {
199 visit_expr_func_unnest_mut(self, i);
200 }
201
202 fn visit_expr_in_list_mut(&mut self, i: &mut ExprInList) {
206 visit_expr_in_list_mut(self, i);
207 }
208
209 fn visit_expr_in_subquery_mut(&mut self, i: &mut ExprInSubquery) {
213 visit_expr_in_subquery_mut(self, i);
214 }
215
216 fn visit_expr_incoming_mut(&mut self, i: &mut ExprIncoming) {
220 visit_expr_incoming_mut(self, i);
221 }
222
223 fn visit_expr_intersects_mut(&mut self, i: &mut ExprIntersects) {
227 visit_expr_intersects_mut(self, i);
228 }
229
230 fn visit_expr_is_null_mut(&mut self, i: &mut ExprIsNull) {
234 visit_expr_is_null_mut(self, i);
235 }
236
237 fn visit_expr_is_superset_mut(&mut self, i: &mut ExprIsSuperset) {
241 visit_expr_is_superset_mut(self, i);
242 }
243
244 fn visit_expr_is_variant_mut(&mut self, i: &mut ExprIsVariant) {
248 visit_expr_is_variant_mut(self, i);
249 }
250
251 fn visit_expr_variant_mut(&mut self, i: &mut ExprVariant) {
255 visit_expr_variant_mut(self, i);
256 }
257
258 fn visit_expr_length_mut(&mut self, i: &mut ExprLength) {
262 visit_expr_length_mut(self, i);
263 }
264
265 fn visit_expr_let_mut(&mut self, i: &mut ExprLet) {
269 visit_expr_let_mut(self, i);
270 }
271
272 fn visit_expr_like_mut(&mut self, i: &mut ExprLike) {
276 visit_expr_like_mut(self, i);
277 }
278
279 fn visit_expr_map_mut(&mut self, i: &mut ExprMap) {
283 visit_expr_map_mut(self, i);
284 }
285
286 fn visit_expr_match_mut(&mut self, i: &mut ExprMatch) {
290 visit_expr_match_mut(self, i);
291 }
292
293 fn visit_expr_not_mut(&mut self, i: &mut ExprNot) {
297 visit_expr_not_mut(self, i);
298 }
299
300 fn visit_expr_or_mut(&mut self, i: &mut ExprOr) {
304 visit_expr_or_mut(self, i);
305 }
306
307 fn visit_expr_list_mut(&mut self, i: &mut ExprList) {
311 visit_expr_list_mut(self, i);
312 }
313
314 fn visit_expr_record_mut(&mut self, i: &mut ExprRecord) {
318 visit_expr_record_mut(self, i);
319 }
320
321 fn visit_expr_reference_mut(&mut self, i: &mut ExprReference) {
325 visit_expr_reference_mut(self, i);
326 }
327
328 fn visit_expr_set_mut(&mut self, i: &mut ExprSet) {
332 visit_expr_set_mut(self, i);
333 }
334
335 fn visit_expr_set_op_mut(&mut self, i: &mut ExprSetOp) {
339 visit_expr_set_op_mut(self, i);
340 }
341
342 fn visit_expr_starts_with_mut(&mut self, i: &mut ExprStartsWith) {
346 visit_expr_starts_with_mut(self, i);
347 }
348
349 fn visit_expr_stmt_mut(&mut self, i: &mut ExprStmt) {
353 visit_expr_stmt_mut(self, i);
354 }
355
356 fn visit_filter_mut(&mut self, i: &mut Filter) {
360 visit_filter_mut(self, i);
361 }
362
363 fn visit_condition_mut(&mut self, i: &mut Condition) {
367 visit_condition_mut(self, i);
368 }
369
370 fn visit_expr_project_mut(&mut self, i: &mut ExprProject) {
374 visit_expr_project_mut(self, i);
375 }
376
377 fn visit_insert_target_mut(&mut self, i: &mut InsertTarget) {
381 visit_insert_target_mut(self, i);
382 }
383
384 fn visit_join_mut(&mut self, i: &mut Join) {
388 visit_join_mut(self, i);
389 }
390
391 fn visit_limit_mut(&mut self, i: &mut Limit) {
395 visit_limit_mut(self, i);
396 }
397
398 fn visit_limit_cursor_mut(&mut self, i: &mut LimitCursor) {
402 visit_limit_cursor_mut(self, i);
403 }
404
405 fn visit_limit_offset_mut(&mut self, i: &mut LimitOffset) {
409 visit_limit_offset_mut(self, i);
410 }
411
412 fn visit_order_by_mut(&mut self, i: &mut OrderBy) {
416 visit_order_by_mut(self, i);
417 }
418
419 fn visit_order_by_expr_mut(&mut self, i: &mut OrderByExpr) {
423 visit_order_by_expr_mut(self, i);
424 }
425
426 fn visit_path_mut(&mut self, i: &mut Path) {
430 visit_path_mut(self, i);
431 }
432
433 fn visit_include_mut(&mut self, i: &mut Include) {
437 visit_include_mut(self, i);
438 }
439
440 fn visit_projection_mut(&mut self, i: &mut Projection) {
444 visit_projection_mut(self, i);
445 }
446
447 fn visit_returning_mut(&mut self, i: &mut Returning) {
451 visit_returning_mut(self, i);
452 }
453
454 fn visit_source_mut(&mut self, i: &mut Source) {
458 visit_source_mut(self, i);
459 }
460
461 fn visit_source_model_mut(&mut self, i: &mut SourceModel) {
465 visit_source_model_mut(self, i);
466 }
467
468 fn visit_source_table_mut(&mut self, i: &mut SourceTable) {
472 visit_source_table_mut(self, i);
473 }
474
475 fn visit_source_table_id_mut(&mut self, i: &mut SourceTableId) {
479 visit_source_table_id_mut(self, i);
480 }
481
482 fn visit_stmt_mut(&mut self, i: &mut Statement) {
486 visit_stmt_mut(self, i);
487 }
488
489 fn visit_stmt_delete_mut(&mut self, i: &mut Delete) {
493 visit_stmt_delete_mut(self, i);
494 }
495
496 fn visit_stmt_insert_mut(&mut self, i: &mut Insert) {
500 visit_stmt_insert_mut(self, i);
501 }
502
503 fn visit_stmt_query_mut(&mut self, i: &mut Query) {
507 visit_stmt_query_mut(self, i);
508 }
509
510 fn visit_stmt_select_mut(&mut self, i: &mut Select) {
514 visit_stmt_select_mut(self, i);
515 }
516
517 fn visit_stmt_update_mut(&mut self, i: &mut Update) {
521 visit_stmt_update_mut(self, i);
522 }
523
524 fn visit_table_derived_mut(&mut self, i: &mut TableDerived) {
528 visit_table_derived_mut(self, i);
529 }
530
531 fn visit_table_ref_mut(&mut self, i: &mut TableRef) {
535 visit_table_ref_mut(self, i);
536 }
537
538 fn visit_table_factor_mut(&mut self, i: &mut TableFactor) {
542 visit_table_factor_mut(self, i);
543 }
544
545 fn visit_table_with_joins_mut(&mut self, i: &mut TableWithJoins) {
549 visit_table_with_joins_mut(self, i);
550 }
551
552 fn visit_type_mut(&mut self, i: &mut Type) {
556 visit_type_mut(self, i);
557 }
558
559 fn visit_update_target_mut(&mut self, i: &mut UpdateTarget) {
563 visit_update_target_mut(self, i);
564 }
565
566 fn visit_value_mut(&mut self, i: &mut Value) {
570 visit_value_mut(self, i);
571 }
572
573 fn visit_value_record(&mut self, i: &mut ValueRecord) {
577 visit_value_record(self, i);
578 }
579
580 fn visit_values_mut(&mut self, i: &mut Values) {
584 visit_values_mut(self, i);
585 }
586
587 fn visit_with_mut(&mut self, i: &mut With) {
591 visit_with_mut(self, i);
592 }
593}
594
595impl<V: VisitMut> VisitMut for &mut V {
596 fn visit_assignment_mut(&mut self, i: &mut Assignment) {
597 VisitMut::visit_assignment_mut(&mut **self, i);
598 }
599
600 fn visit_assignments_mut(&mut self, i: &mut Assignments) {
601 VisitMut::visit_assignments_mut(&mut **self, i);
602 }
603
604 fn visit_association_mut(&mut self, i: &mut Association) {
605 VisitMut::visit_association_mut(&mut **self, i);
606 }
607
608 fn visit_cte_mut(&mut self, i: &mut Cte) {
609 VisitMut::visit_cte_mut(&mut **self, i);
610 }
611
612 fn visit_expr_mut(&mut self, i: &mut Expr) {
613 VisitMut::visit_expr_mut(&mut **self, i);
614 }
615
616 fn visit_expr_and_mut(&mut self, i: &mut ExprAnd) {
617 VisitMut::visit_expr_and_mut(&mut **self, i);
618 }
619
620 fn visit_expr_arg_mut(&mut self, i: &mut ExprArg) {
621 VisitMut::visit_expr_arg_mut(&mut **self, i);
622 }
623
624 fn visit_expr_any_op_mut(&mut self, i: &mut ExprAnyOp) {
625 VisitMut::visit_expr_any_op_mut(&mut **self, i);
626 }
627
628 fn visit_expr_all_op_mut(&mut self, i: &mut ExprAllOp) {
629 VisitMut::visit_expr_all_op_mut(&mut **self, i);
630 }
631
632 fn visit_expr_between_mut(&mut self, i: &mut ExprBetween) {
633 VisitMut::visit_expr_between_mut(&mut **self, i);
634 }
635
636 fn visit_expr_binary_op_mut(&mut self, i: &mut ExprBinaryOp) {
637 VisitMut::visit_expr_binary_op_mut(&mut **self, i);
638 }
639
640 fn visit_expr_cast_mut(&mut self, i: &mut ExprCast) {
641 VisitMut::visit_expr_cast_mut(&mut **self, i);
642 }
643
644 fn visit_expr_column_mut(&mut self, i: &mut ExprColumn) {
645 VisitMut::visit_expr_column_mut(&mut **self, i);
646 }
647
648 fn visit_expr_default_mut(&mut self) {
649 VisitMut::visit_expr_default_mut(&mut **self);
650 }
651
652 fn visit_expr_error_mut(&mut self, i: &mut ExprError) {
653 VisitMut::visit_expr_error_mut(&mut **self, i);
654 }
655
656 fn visit_expr_exists_mut(&mut self, i: &mut ExprExists) {
657 VisitMut::visit_expr_exists_mut(&mut **self, i);
658 }
659
660 fn visit_expr_func_mut(&mut self, i: &mut ExprFunc) {
661 VisitMut::visit_expr_func_mut(&mut **self, i);
662 }
663
664 fn visit_expr_func_count_mut(&mut self, i: &mut FuncCount) {
665 VisitMut::visit_expr_func_count_mut(&mut **self, i);
666 }
667
668 fn visit_expr_func_json_extract_mut(&mut self, i: &mut FuncJsonExtract) {
669 VisitMut::visit_expr_func_json_extract_mut(&mut **self, i);
670 }
671
672 fn visit_expr_in_list_mut(&mut self, i: &mut ExprInList) {
673 VisitMut::visit_expr_in_list_mut(&mut **self, i);
674 }
675
676 fn visit_expr_in_subquery_mut(&mut self, i: &mut ExprInSubquery) {
677 VisitMut::visit_expr_in_subquery_mut(&mut **self, i);
678 }
679
680 fn visit_expr_incoming_mut(&mut self, i: &mut ExprIncoming) {
681 VisitMut::visit_expr_incoming_mut(&mut **self, i);
682 }
683
684 fn visit_expr_intersects_mut(&mut self, i: &mut ExprIntersects) {
685 VisitMut::visit_expr_intersects_mut(&mut **self, i);
686 }
687
688 fn visit_expr_is_null_mut(&mut self, i: &mut ExprIsNull) {
689 VisitMut::visit_expr_is_null_mut(&mut **self, i);
690 }
691
692 fn visit_expr_is_superset_mut(&mut self, i: &mut ExprIsSuperset) {
693 VisitMut::visit_expr_is_superset_mut(&mut **self, i);
694 }
695
696 fn visit_expr_is_variant_mut(&mut self, i: &mut ExprIsVariant) {
697 VisitMut::visit_expr_is_variant_mut(&mut **self, i);
698 }
699
700 fn visit_expr_variant_mut(&mut self, i: &mut ExprVariant) {
701 VisitMut::visit_expr_variant_mut(&mut **self, i);
702 }
703
704 fn visit_expr_length_mut(&mut self, i: &mut ExprLength) {
705 VisitMut::visit_expr_length_mut(&mut **self, i);
706 }
707
708 fn visit_expr_let_mut(&mut self, i: &mut ExprLet) {
709 VisitMut::visit_expr_let_mut(&mut **self, i);
710 }
711
712 fn visit_expr_like_mut(&mut self, i: &mut ExprLike) {
713 VisitMut::visit_expr_like_mut(&mut **self, i);
714 }
715
716 fn visit_expr_map_mut(&mut self, i: &mut ExprMap) {
717 VisitMut::visit_expr_map_mut(&mut **self, i);
718 }
719
720 fn visit_expr_match_mut(&mut self, i: &mut ExprMatch) {
721 VisitMut::visit_expr_match_mut(&mut **self, i);
722 }
723
724 fn visit_expr_not_mut(&mut self, i: &mut ExprNot) {
725 VisitMut::visit_expr_not_mut(&mut **self, i);
726 }
727
728 fn visit_expr_or_mut(&mut self, i: &mut ExprOr) {
729 VisitMut::visit_expr_or_mut(&mut **self, i);
730 }
731
732 fn visit_expr_list_mut(&mut self, i: &mut ExprList) {
733 VisitMut::visit_expr_list_mut(&mut **self, i);
734 }
735
736 fn visit_expr_record_mut(&mut self, i: &mut ExprRecord) {
737 VisitMut::visit_expr_record_mut(&mut **self, i);
738 }
739
740 fn visit_expr_reference_mut(&mut self, i: &mut ExprReference) {
741 VisitMut::visit_expr_reference_mut(&mut **self, i);
742 }
743
744 fn visit_expr_set_mut(&mut self, i: &mut ExprSet) {
745 VisitMut::visit_expr_set_mut(&mut **self, i);
746 }
747
748 fn visit_expr_set_op_mut(&mut self, i: &mut ExprSetOp) {
749 VisitMut::visit_expr_set_op_mut(&mut **self, i);
750 }
751
752 fn visit_expr_starts_with_mut(&mut self, i: &mut ExprStartsWith) {
753 VisitMut::visit_expr_starts_with_mut(&mut **self, i);
754 }
755
756 fn visit_expr_stmt_mut(&mut self, i: &mut ExprStmt) {
757 VisitMut::visit_expr_stmt_mut(&mut **self, i);
758 }
759
760 fn visit_filter_mut(&mut self, i: &mut Filter) {
761 VisitMut::visit_filter_mut(&mut **self, i);
762 }
763
764 fn visit_condition_mut(&mut self, i: &mut Condition) {
765 VisitMut::visit_condition_mut(&mut **self, i);
766 }
767
768 fn visit_expr_project_mut(&mut self, i: &mut ExprProject) {
769 VisitMut::visit_expr_project_mut(&mut **self, i);
770 }
771
772 fn visit_insert_target_mut(&mut self, i: &mut InsertTarget) {
773 VisitMut::visit_insert_target_mut(&mut **self, i);
774 }
775
776 fn visit_join_mut(&mut self, i: &mut Join) {
777 VisitMut::visit_join_mut(&mut **self, i);
778 }
779
780 fn visit_limit_mut(&mut self, i: &mut Limit) {
781 VisitMut::visit_limit_mut(&mut **self, i);
782 }
783
784 fn visit_limit_cursor_mut(&mut self, i: &mut LimitCursor) {
785 VisitMut::visit_limit_cursor_mut(&mut **self, i);
786 }
787
788 fn visit_limit_offset_mut(&mut self, i: &mut LimitOffset) {
789 VisitMut::visit_limit_offset_mut(&mut **self, i);
790 }
791
792 fn visit_order_by_mut(&mut self, i: &mut OrderBy) {
793 VisitMut::visit_order_by_mut(&mut **self, i);
794 }
795
796 fn visit_order_by_expr_mut(&mut self, i: &mut OrderByExpr) {
797 VisitMut::visit_order_by_expr_mut(&mut **self, i);
798 }
799
800 fn visit_path_mut(&mut self, i: &mut Path) {
801 VisitMut::visit_path_mut(&mut **self, i);
802 }
803
804 fn visit_include_mut(&mut self, i: &mut Include) {
805 VisitMut::visit_include_mut(&mut **self, i);
806 }
807
808 fn visit_projection_mut(&mut self, i: &mut Projection) {
809 VisitMut::visit_projection_mut(&mut **self, i);
810 }
811
812 fn visit_returning_mut(&mut self, i: &mut Returning) {
813 VisitMut::visit_returning_mut(&mut **self, i);
814 }
815
816 fn visit_source_mut(&mut self, i: &mut Source) {
817 VisitMut::visit_source_mut(&mut **self, i);
818 }
819
820 fn visit_source_model_mut(&mut self, i: &mut SourceModel) {
821 VisitMut::visit_source_model_mut(&mut **self, i);
822 }
823
824 fn visit_source_table_mut(&mut self, i: &mut SourceTable) {
825 VisitMut::visit_source_table_mut(&mut **self, i);
826 }
827
828 fn visit_source_table_id_mut(&mut self, i: &mut SourceTableId) {
829 VisitMut::visit_source_table_id_mut(&mut **self, i);
830 }
831
832 fn visit_stmt_mut(&mut self, i: &mut Statement) {
833 VisitMut::visit_stmt_mut(&mut **self, i);
834 }
835
836 fn visit_stmt_delete_mut(&mut self, i: &mut Delete) {
837 VisitMut::visit_stmt_delete_mut(&mut **self, i);
838 }
839
840 fn visit_stmt_insert_mut(&mut self, i: &mut Insert) {
841 VisitMut::visit_stmt_insert_mut(&mut **self, i);
842 }
843
844 fn visit_stmt_query_mut(&mut self, i: &mut Query) {
845 VisitMut::visit_stmt_query_mut(&mut **self, i);
846 }
847
848 fn visit_stmt_select_mut(&mut self, i: &mut Select) {
849 VisitMut::visit_stmt_select_mut(&mut **self, i);
850 }
851
852 fn visit_stmt_update_mut(&mut self, i: &mut Update) {
853 VisitMut::visit_stmt_update_mut(&mut **self, i);
854 }
855
856 fn visit_table_derived_mut(&mut self, i: &mut TableDerived) {
857 VisitMut::visit_table_derived_mut(&mut **self, i);
858 }
859
860 fn visit_table_ref_mut(&mut self, i: &mut TableRef) {
861 VisitMut::visit_table_ref_mut(&mut **self, i);
862 }
863
864 fn visit_table_factor_mut(&mut self, i: &mut TableFactor) {
865 VisitMut::visit_table_factor_mut(&mut **self, i);
866 }
867
868 fn visit_table_with_joins_mut(&mut self, i: &mut TableWithJoins) {
869 VisitMut::visit_table_with_joins_mut(&mut **self, i);
870 }
871
872 fn visit_type_mut(&mut self, i: &mut Type) {
873 VisitMut::visit_type_mut(&mut **self, i);
874 }
875
876 fn visit_update_target_mut(&mut self, i: &mut UpdateTarget) {
877 VisitMut::visit_update_target_mut(&mut **self, i);
878 }
879
880 fn visit_value_mut(&mut self, i: &mut Value) {
881 VisitMut::visit_value_mut(&mut **self, i);
882 }
883
884 fn visit_value_record(&mut self, i: &mut ValueRecord) {
885 VisitMut::visit_value_record(&mut **self, i);
886 }
887
888 fn visit_values_mut(&mut self, i: &mut Values) {
889 VisitMut::visit_values_mut(&mut **self, i);
890 }
891
892 fn visit_with_mut(&mut self, i: &mut With) {
893 VisitMut::visit_with_mut(&mut **self, i);
894 }
895}
896
897pub fn visit_assignment_mut<V>(v: &mut V, node: &mut Assignment)
899where
900 V: VisitMut + ?Sized,
901{
902 match node {
903 Assignment::Set(expr)
904 | Assignment::Insert(expr)
905 | Assignment::Remove(expr)
906 | Assignment::Append(expr)
907 | Assignment::RemoveAt(expr)
908 | Assignment::Add(expr)
909 | Assignment::Subtract(expr) => {
910 v.visit_expr_mut(expr);
911 }
912 Assignment::Pop => {}
913 Assignment::Batch(entries) => {
914 for entry in entries {
915 visit_assignment_mut(v, entry);
916 }
917 }
918 }
919}
920
921pub fn visit_assignments_mut<V>(v: &mut V, node: &mut Assignments)
923where
924 V: VisitMut + ?Sized,
925{
926 for (_, assignment) in node.iter_mut() {
927 v.visit_assignment_mut(assignment);
928 }
929}
930
931pub fn visit_association_mut<V>(v: &mut V, node: &mut Association)
933where
934 V: VisitMut + ?Sized,
935{
936 v.visit_stmt_query_mut(&mut node.source);
937}
938
939pub fn visit_cte_mut<V>(v: &mut V, node: &mut Cte)
941where
942 V: VisitMut + ?Sized,
943{
944 v.visit_stmt_query_mut(&mut node.query);
945}
946
947pub fn visit_expr_mut<V>(v: &mut V, node: &mut Expr)
949where
950 V: VisitMut + ?Sized,
951{
952 match node {
953 Expr::AllOp(expr) => v.visit_expr_all_op_mut(expr),
954 Expr::And(expr) => v.visit_expr_and_mut(expr),
955 Expr::Any(expr) => v.visit_expr_any_mut(expr),
956 Expr::AnyOp(expr) => v.visit_expr_any_op_mut(expr),
957 Expr::Arg(expr) => v.visit_expr_arg_mut(expr),
958 Expr::Between(expr) => v.visit_expr_between_mut(expr),
959 Expr::BinaryOp(expr) => v.visit_expr_binary_op_mut(expr),
960 Expr::Cast(expr) => v.visit_expr_cast_mut(expr),
961 Expr::Default => v.visit_expr_default_mut(),
962 Expr::Error(expr) => v.visit_expr_error_mut(expr),
963 Expr::Exists(expr) => v.visit_expr_exists_mut(expr),
964 Expr::Func(expr) => v.visit_expr_func_mut(expr),
965 Expr::Ident(_) => {}
966 Expr::InList(expr) => v.visit_expr_in_list_mut(expr),
967 Expr::InSubquery(expr) => v.visit_expr_in_subquery_mut(expr),
968 Expr::Incoming(expr) => v.visit_expr_incoming_mut(expr),
969 Expr::Intersects(expr) => v.visit_expr_intersects_mut(expr),
970 Expr::IsNull(expr) => v.visit_expr_is_null_mut(expr),
971 Expr::IsSuperset(expr) => v.visit_expr_is_superset_mut(expr),
972 Expr::IsVariant(expr) => v.visit_expr_is_variant_mut(expr),
973 Expr::Variant(expr) => v.visit_expr_variant_mut(expr),
974 Expr::Length(expr) => v.visit_expr_length_mut(expr),
975 Expr::Let(expr) => v.visit_expr_let_mut(expr),
976 Expr::Like(expr) => v.visit_expr_like_mut(expr),
977 Expr::Map(expr) => v.visit_expr_map_mut(expr),
978 Expr::Match(expr) => v.visit_expr_match_mut(expr),
979 Expr::Not(expr) => v.visit_expr_not_mut(expr),
980 Expr::Or(expr) => v.visit_expr_or_mut(expr),
981 Expr::Project(expr) => v.visit_expr_project_mut(expr),
982 Expr::Record(expr) => v.visit_expr_record_mut(expr),
983 Expr::Reference(expr) => v.visit_expr_reference_mut(expr),
984 Expr::List(expr) => v.visit_expr_list_mut(expr),
985 Expr::StartsWith(expr) => v.visit_expr_starts_with_mut(expr),
986 Expr::Stmt(expr) => v.visit_expr_stmt_mut(expr),
987 Expr::Value(expr) => v.visit_value_mut(expr),
988 Expr::Static(expr) => v.visit_value_mut(expr),
989 }
990}
991
992pub fn visit_expr_and_mut<V>(v: &mut V, node: &mut ExprAnd)
994where
995 V: VisitMut + ?Sized,
996{
997 for expr in node {
998 v.visit_expr_mut(expr);
999 }
1000}
1001
1002pub fn visit_expr_any_mut<V>(v: &mut V, node: &mut ExprAny)
1004where
1005 V: VisitMut + ?Sized,
1006{
1007 v.visit_expr_mut(&mut node.expr);
1008}
1009
1010pub fn visit_expr_arg_mut<V>(v: &mut V, node: &mut ExprArg)
1012where
1013 V: VisitMut + ?Sized,
1014{
1015}
1016
1017pub fn visit_expr_binary_op_mut<V>(v: &mut V, node: &mut ExprBinaryOp)
1019where
1020 V: VisitMut + ?Sized,
1021{
1022 v.visit_expr_mut(&mut node.lhs);
1023 v.visit_expr_mut(&mut node.rhs);
1024}
1025
1026pub fn visit_expr_any_op_mut<V>(v: &mut V, node: &mut ExprAnyOp)
1028where
1029 V: VisitMut + ?Sized,
1030{
1031 v.visit_expr_mut(&mut node.lhs);
1032 v.visit_expr_mut(&mut node.rhs);
1033}
1034
1035pub fn visit_expr_all_op_mut<V>(v: &mut V, node: &mut ExprAllOp)
1037where
1038 V: VisitMut + ?Sized,
1039{
1040 v.visit_expr_mut(&mut node.lhs);
1041 v.visit_expr_mut(&mut node.rhs);
1042}
1043
1044pub fn visit_expr_cast_mut<V>(v: &mut V, node: &mut ExprCast)
1046where
1047 V: VisitMut + ?Sized,
1048{
1049 v.visit_expr_mut(&mut node.expr);
1050 v.visit_type_mut(&mut node.ty);
1051}
1052
1053pub fn visit_expr_column_mut<V>(v: &mut V, node: &mut ExprColumn)
1055where
1056 V: VisitMut + ?Sized,
1057{
1058}
1059
1060pub fn visit_expr_default_mut<V>(v: &mut V)
1062where
1063 V: VisitMut + ?Sized,
1064{
1065}
1066
1067pub fn visit_expr_error_mut<V>(v: &mut V, node: &mut ExprError)
1069where
1070 V: VisitMut + ?Sized,
1071{
1072 }
1074
1075pub fn visit_expr_exists_mut<V>(v: &mut V, node: &mut ExprExists)
1077where
1078 V: VisitMut + ?Sized,
1079{
1080 v.visit_stmt_query_mut(&mut node.subquery);
1081}
1082
1083pub fn visit_expr_func_mut<V>(v: &mut V, node: &mut ExprFunc)
1085where
1086 V: VisitMut + ?Sized,
1087{
1088 match node {
1089 ExprFunc::Count(func) => v.visit_expr_func_count_mut(func),
1090 ExprFunc::JsonExtract(func) => v.visit_expr_func_json_extract_mut(func),
1091 ExprFunc::LastInsertId(func) => v.visit_expr_func_last_insert_id_mut(func),
1092 ExprFunc::Unnest(func) => v.visit_expr_func_unnest_mut(func),
1093 }
1094}
1095
1096pub fn visit_expr_incoming_mut<V>(_v: &mut V, _node: &mut ExprIncoming)
1098where
1099 V: VisitMut + ?Sized,
1100{
1101}
1102
1103pub fn visit_expr_func_json_extract_mut<V>(v: &mut V, node: &mut FuncJsonExtract)
1105where
1106 V: VisitMut + ?Sized,
1107{
1108 v.visit_expr_mut(&mut node.base);
1109}
1110
1111pub fn visit_expr_func_count_mut<V>(v: &mut V, node: &mut FuncCount)
1113where
1114 V: VisitMut + ?Sized,
1115{
1116 if let Some(expr) = &mut node.arg {
1117 v.visit_expr_mut(expr);
1118 }
1119
1120 if let Some(expr) = &mut node.filter {
1121 v.visit_expr_mut(expr);
1122 }
1123}
1124
1125pub fn visit_expr_func_last_insert_id_mut<V>(_v: &mut V, _node: &mut FuncLastInsertId)
1127where
1128 V: VisitMut + ?Sized,
1129{
1130 }
1132
1133pub fn visit_expr_func_unnest_mut<V>(v: &mut V, node: &mut FuncUnnest)
1135where
1136 V: VisitMut + ?Sized,
1137{
1138 v.visit_expr_mut(&mut node.arg);
1139}
1140
1141pub fn visit_expr_between_mut<V>(v: &mut V, node: &mut ExprBetween)
1143where
1144 V: VisitMut + ?Sized,
1145{
1146 v.visit_expr_mut(&mut node.expr);
1147 v.visit_expr_mut(&mut node.low);
1148 v.visit_expr_mut(&mut node.high);
1149}
1150
1151pub fn visit_expr_in_list_mut<V>(v: &mut V, node: &mut ExprInList)
1153where
1154 V: VisitMut + ?Sized,
1155{
1156 v.visit_expr_mut(&mut node.expr);
1157 v.visit_expr_mut(&mut node.list);
1158}
1159
1160pub fn visit_expr_in_subquery_mut<V>(v: &mut V, node: &mut ExprInSubquery)
1162where
1163 V: VisitMut + ?Sized,
1164{
1165 v.visit_expr_mut(&mut node.expr);
1166 v.visit_stmt_query_mut(&mut node.query);
1167}
1168
1169pub fn visit_expr_intersects_mut<V>(v: &mut V, node: &mut ExprIntersects)
1171where
1172 V: VisitMut + ?Sized,
1173{
1174 v.visit_expr_mut(&mut node.lhs);
1175 v.visit_expr_mut(&mut node.rhs);
1176}
1177
1178pub fn visit_expr_is_null_mut<V>(v: &mut V, node: &mut ExprIsNull)
1180where
1181 V: VisitMut + ?Sized,
1182{
1183 v.visit_expr_mut(&mut node.expr);
1184}
1185
1186pub fn visit_expr_is_superset_mut<V>(v: &mut V, node: &mut ExprIsSuperset)
1188where
1189 V: VisitMut + ?Sized,
1190{
1191 v.visit_expr_mut(&mut node.lhs);
1192 v.visit_expr_mut(&mut node.rhs);
1193}
1194
1195pub fn visit_expr_is_variant_mut<V>(v: &mut V, node: &mut ExprIsVariant)
1197where
1198 V: VisitMut + ?Sized,
1199{
1200 v.visit_expr_mut(&mut node.expr);
1201}
1202
1203pub fn visit_expr_variant_mut<V>(v: &mut V, node: &mut ExprVariant)
1205where
1206 V: VisitMut + ?Sized,
1207{
1208 v.visit_expr_mut(&mut node.base);
1209}
1210
1211pub fn visit_expr_length_mut<V>(v: &mut V, node: &mut ExprLength)
1213where
1214 V: VisitMut + ?Sized,
1215{
1216 v.visit_expr_mut(&mut node.expr);
1217}
1218
1219pub fn visit_expr_let_mut<V>(v: &mut V, node: &mut ExprLet)
1221where
1222 V: VisitMut + ?Sized,
1223{
1224 for binding in &mut node.bindings {
1225 v.visit_expr_mut(binding);
1226 }
1227 v.visit_expr_mut(&mut node.body);
1228}
1229
1230pub fn visit_expr_like_mut<V>(v: &mut V, node: &mut ExprLike)
1232where
1233 V: VisitMut + ?Sized,
1234{
1235 v.visit_expr_mut(&mut node.expr);
1236 v.visit_expr_mut(&mut node.pattern);
1237}
1238
1239pub fn visit_expr_map_mut<V>(v: &mut V, node: &mut ExprMap)
1241where
1242 V: VisitMut + ?Sized,
1243{
1244 v.visit_expr_mut(&mut node.base);
1245 v.visit_expr_mut(&mut node.map);
1246}
1247
1248pub fn visit_expr_match_mut<V>(v: &mut V, node: &mut ExprMatch)
1250where
1251 V: VisitMut + ?Sized,
1252{
1253 v.visit_expr_mut(&mut node.subject);
1254 for arm in &mut node.arms {
1255 v.visit_expr_mut(&mut arm.expr);
1256 }
1257 v.visit_expr_mut(&mut node.else_expr);
1258}
1259
1260pub fn visit_expr_not_mut<V>(v: &mut V, node: &mut ExprNot)
1262where
1263 V: VisitMut + ?Sized,
1264{
1265 v.visit_expr_mut(&mut node.expr);
1266}
1267
1268pub fn visit_expr_or_mut<V>(v: &mut V, node: &mut ExprOr)
1270where
1271 V: VisitMut + ?Sized,
1272{
1273 for expr in node {
1274 v.visit_expr_mut(expr);
1275 }
1276}
1277
1278pub fn visit_expr_list_mut<V>(v: &mut V, node: &mut ExprList)
1280where
1281 V: VisitMut + ?Sized,
1282{
1283 for e in &mut node.items {
1284 v.visit_expr_mut(e);
1285 }
1286}
1287
1288pub fn visit_expr_record_mut<V>(v: &mut V, node: &mut ExprRecord)
1290where
1291 V: VisitMut + ?Sized,
1292{
1293 for expr in &mut **node {
1294 v.visit_expr_mut(expr);
1295 }
1296}
1297
1298pub fn visit_expr_reference_mut<V>(v: &mut V, node: &mut ExprReference)
1300where
1301 V: VisitMut + ?Sized,
1302{
1303 match node {
1304 ExprReference::Model { .. } => {}
1305 ExprReference::Field { .. } => {}
1306 ExprReference::Column(expr_column) => v.visit_expr_column_mut(expr_column),
1307 }
1308}
1309
1310pub fn visit_expr_set_mut<V>(v: &mut V, node: &mut ExprSet)
1312where
1313 V: VisitMut + ?Sized,
1314{
1315 match node {
1316 ExprSet::Select(expr) => v.visit_stmt_select_mut(expr),
1317 ExprSet::SetOp(expr) => v.visit_expr_set_op_mut(expr),
1318 ExprSet::Update(expr) => v.visit_stmt_update_mut(expr),
1319 ExprSet::Delete(expr) => v.visit_stmt_delete_mut(expr),
1320 ExprSet::Values(expr) => v.visit_values_mut(expr),
1321 ExprSet::Insert(expr) => v.visit_stmt_insert_mut(expr),
1322 }
1323}
1324
1325pub fn visit_expr_set_op_mut<V>(v: &mut V, node: &mut ExprSetOp)
1327where
1328 V: VisitMut + ?Sized,
1329{
1330 for operand in &mut node.operands {
1331 v.visit_expr_set_mut(operand);
1332 }
1333}
1334
1335pub fn visit_expr_starts_with_mut<V>(v: &mut V, node: &mut ExprStartsWith)
1337where
1338 V: VisitMut + ?Sized,
1339{
1340 v.visit_expr_mut(&mut node.expr);
1341 v.visit_expr_mut(&mut node.prefix);
1342}
1343
1344pub fn visit_expr_stmt_mut<V>(v: &mut V, node: &mut ExprStmt)
1346where
1347 V: VisitMut + ?Sized,
1348{
1349 v.visit_stmt_mut(&mut node.stmt);
1350}
1351
1352pub fn visit_expr_project_mut<V>(v: &mut V, node: &mut ExprProject)
1354where
1355 V: VisitMut + ?Sized,
1356{
1357 v.visit_expr_mut(&mut node.base);
1358 v.visit_projection_mut(&mut node.projection);
1359}
1360
1361pub fn visit_filter_mut<V>(v: &mut V, node: &mut Filter)
1363where
1364 V: VisitMut + ?Sized,
1365{
1366 if let Some(expr) = &mut node.expr {
1367 v.visit_expr_mut(expr);
1368 }
1369}
1370
1371pub fn visit_condition_mut<V>(v: &mut V, node: &mut Condition)
1373where
1374 V: VisitMut + ?Sized,
1375{
1376 if let Some(expr) = &mut node.expr {
1377 v.visit_expr_mut(expr);
1378 }
1379}
1380
1381pub fn visit_insert_target_mut<V>(v: &mut V, node: &mut InsertTarget)
1383where
1384 V: VisitMut + ?Sized,
1385{
1386 if let InsertTarget::Scope(stmt) = node {
1387 v.visit_stmt_query_mut(stmt)
1388 }
1389}
1390
1391pub fn visit_join_mut<V>(v: &mut V, node: &mut Join)
1393where
1394 V: VisitMut + ?Sized,
1395{
1396 v.visit_source_table_id_mut(&mut node.table);
1397 match &mut node.constraint {
1398 JoinOp::Inner(expr) | JoinOp::Left(expr) => v.visit_expr_mut(expr),
1399 }
1400}
1401
1402pub fn visit_limit_mut<V>(v: &mut V, node: &mut Limit)
1404where
1405 V: VisitMut + ?Sized,
1406{
1407 match node {
1408 Limit::Cursor(cursor) => v.visit_limit_cursor_mut(cursor),
1409 Limit::Offset(offset) => v.visit_limit_offset_mut(offset),
1410 }
1411}
1412
1413pub fn visit_limit_cursor_mut<V>(v: &mut V, node: &mut LimitCursor)
1415where
1416 V: VisitMut + ?Sized,
1417{
1418 v.visit_expr_mut(&mut node.page_size);
1419 if let Some(after) = &mut node.after {
1420 v.visit_expr_mut(after);
1421 }
1422}
1423
1424pub fn visit_limit_offset_mut<V>(v: &mut V, node: &mut LimitOffset)
1426where
1427 V: VisitMut + ?Sized,
1428{
1429 v.visit_expr_mut(&mut node.limit);
1430 if let Some(offset) = &mut node.offset {
1431 v.visit_expr_mut(offset);
1432 }
1433}
1434
1435pub fn visit_order_by_mut<V>(v: &mut V, node: &mut OrderBy)
1437where
1438 V: VisitMut + ?Sized,
1439{
1440 for expr in &mut node.exprs {
1441 v.visit_order_by_expr_mut(expr);
1442 }
1443}
1444
1445pub fn visit_order_by_expr_mut<V>(v: &mut V, node: &mut OrderByExpr)
1447where
1448 V: VisitMut + ?Sized,
1449{
1450 v.visit_expr_mut(&mut node.expr);
1451}
1452
1453pub fn visit_path_mut<V>(v: &mut V, node: &mut Path)
1455where
1456 V: VisitMut + ?Sized,
1457{
1458 v.visit_projection_mut(&mut node.projection);
1459}
1460
1461pub fn visit_projection_mut<V>(v: &mut V, node: &mut Projection)
1463where
1464 V: VisitMut + ?Sized,
1465{
1466}
1467
1468pub fn visit_returning_mut<V>(v: &mut V, node: &mut Returning)
1470where
1471 V: VisitMut + ?Sized,
1472{
1473 match node {
1474 Returning::Model { include } => {
1475 for inc in include {
1476 v.visit_include_mut(inc);
1477 }
1478 }
1479 Returning::Changed => {}
1480 Returning::Star => {}
1481 Returning::Project(expr) => v.visit_expr_mut(expr),
1482 Returning::Expr(expr) => v.visit_expr_mut(expr),
1483 }
1484}
1485
1486pub fn visit_include_mut<V>(v: &mut V, node: &mut Include)
1488where
1489 V: VisitMut + ?Sized,
1490{
1491 v.visit_path_mut(&mut node.path);
1492 if let Some(query) = &mut node.query {
1493 v.visit_stmt_query_mut(query);
1494 }
1495}
1496
1497pub fn visit_source_mut<V>(v: &mut V, node: &mut Source)
1499where
1500 V: VisitMut + ?Sized,
1501{
1502 match node {
1503 Source::Model(source_model) => v.visit_source_model_mut(source_model),
1504 Source::Table(source_table) => v.visit_source_table_mut(source_table),
1505 }
1506}
1507
1508pub fn visit_source_model_mut<V>(v: &mut V, node: &mut SourceModel)
1510where
1511 V: VisitMut + ?Sized,
1512{
1513 if let Some(association) = &mut node.via {
1514 v.visit_association_mut(association);
1515 }
1516}
1517
1518pub fn visit_source_table_mut<V>(v: &mut V, node: &mut SourceTable)
1520where
1521 V: VisitMut + ?Sized,
1522{
1523 for table_ref in &mut node.tables {
1524 v.visit_table_ref_mut(table_ref);
1525 }
1526 for table_with_joins in &mut node.from {
1527 v.visit_table_with_joins_mut(table_with_joins);
1528 }
1529}
1530
1531pub fn visit_source_table_id_mut<V>(v: &mut V, node: &mut SourceTableId)
1533where
1534 V: VisitMut + ?Sized,
1535{
1536 }
1538
1539pub fn visit_table_factor_mut<V>(v: &mut V, node: &mut TableFactor)
1541where
1542 V: VisitMut + ?Sized,
1543{
1544 match node {
1545 TableFactor::Table(table_id) => v.visit_source_table_id_mut(table_id),
1546 }
1547}
1548
1549pub fn visit_stmt_mut<V>(v: &mut V, node: &mut Statement)
1551where
1552 V: VisitMut + ?Sized,
1553{
1554 match node {
1555 Statement::Delete(stmt) => v.visit_stmt_delete_mut(stmt),
1556 Statement::Insert(stmt) => v.visit_stmt_insert_mut(stmt),
1557 Statement::Query(stmt) => v.visit_stmt_query_mut(stmt),
1558 Statement::Update(stmt) => v.visit_stmt_update_mut(stmt),
1559 }
1560}
1561
1562pub fn visit_stmt_delete_mut<V>(v: &mut V, node: &mut Delete)
1564where
1565 V: VisitMut + ?Sized,
1566{
1567 v.visit_source_mut(&mut node.from);
1568 v.visit_filter_mut(&mut node.filter);
1569 v.visit_condition_mut(&mut node.condition);
1570
1571 if let Some(returning) = &mut node.returning {
1572 v.visit_returning_mut(returning);
1573 }
1574}
1575
1576pub fn visit_stmt_insert_mut<V>(v: &mut V, node: &mut Insert)
1578where
1579 V: VisitMut + ?Sized,
1580{
1581 v.visit_insert_target_mut(&mut node.target);
1582 v.visit_stmt_query_mut(&mut node.source);
1583
1584 if let Some(upsert) = &mut node.upsert {
1585 v.visit_assignments_mut(&mut upsert.shared);
1586 v.visit_assignments_mut(&mut upsert.defaults);
1587 v.visit_assignments_mut(&mut upsert.update_defaults);
1588 v.visit_assignments_mut(&mut upsert.create);
1589 v.visit_assignments_mut(&mut upsert.update);
1590 }
1591
1592 if let Some(returning) = &mut node.returning {
1593 v.visit_returning_mut(returning);
1594 }
1595}
1596
1597pub fn visit_stmt_query_mut<V>(v: &mut V, node: &mut Query)
1599where
1600 V: VisitMut + ?Sized,
1601{
1602 if let Some(with) = &mut node.with {
1603 v.visit_with_mut(with);
1604 }
1605
1606 v.visit_expr_set_mut(&mut node.body);
1607
1608 if let Some(order_by) = &mut node.order_by {
1609 v.visit_order_by_mut(order_by);
1610 }
1611
1612 if let Some(limit) = &mut node.limit {
1613 v.visit_limit_mut(limit);
1614 }
1615}
1616
1617pub fn visit_stmt_select_mut<V>(v: &mut V, node: &mut Select)
1619where
1620 V: VisitMut + ?Sized,
1621{
1622 v.visit_source_mut(&mut node.source);
1623 v.visit_filter_mut(&mut node.filter);
1624 v.visit_returning_mut(&mut node.returning);
1625}
1626
1627pub fn visit_stmt_update_mut<V>(v: &mut V, node: &mut Update)
1629where
1630 V: VisitMut + ?Sized,
1631{
1632 v.visit_update_target_mut(&mut node.target);
1633 v.visit_assignments_mut(&mut node.assignments);
1634 v.visit_filter_mut(&mut node.filter);
1635 v.visit_condition_mut(&mut node.condition);
1636
1637 if let Some(returning) = &mut node.returning {
1638 v.visit_returning_mut(returning);
1639 }
1640}
1641
1642pub fn visit_table_derived_mut<V>(v: &mut V, node: &mut TableDerived)
1644where
1645 V: VisitMut + ?Sized,
1646{
1647 v.visit_stmt_query_mut(&mut node.subquery);
1648}
1649
1650pub fn visit_table_ref_mut<V>(v: &mut V, node: &mut TableRef)
1652where
1653 V: VisitMut + ?Sized,
1654{
1655 match node {
1656 TableRef::Cte { .. } => {}
1657 TableRef::Derived(table_derived) => v.visit_table_derived_mut(table_derived),
1658 TableRef::Table(_) => {}
1659 TableRef::RowsFrom(funcs) => {
1660 for func in funcs {
1661 v.visit_expr_func_mut(func);
1662 }
1663 }
1664 TableRef::Arg(expr_arg) => v.visit_expr_arg_mut(expr_arg),
1665 }
1666}
1667
1668pub fn visit_table_with_joins_mut<V>(v: &mut V, node: &mut TableWithJoins)
1670where
1671 V: VisitMut + ?Sized,
1672{
1673 v.visit_table_factor_mut(&mut node.relation);
1674 for join in &mut node.joins {
1675 v.visit_join_mut(join);
1676 }
1677}
1678
1679pub fn visit_type_mut<V>(v: &mut V, node: &mut Type)
1681where
1682 V: VisitMut + ?Sized,
1683{
1684 }
1686
1687pub fn visit_update_target_mut<V>(v: &mut V, node: &mut UpdateTarget)
1689where
1690 V: VisitMut + ?Sized,
1691{
1692 if let UpdateTarget::Query(stmt) = node {
1693 v.visit_stmt_query_mut(stmt)
1694 }
1695}
1696
1697pub fn visit_value_mut<V>(v: &mut V, node: &mut Value)
1699where
1700 V: VisitMut + ?Sized,
1701{
1702 if let Value::Record(node) = node {
1703 v.visit_value_record(node);
1704 }
1705}
1706
1707pub fn visit_value_record<V>(v: &mut V, node: &mut ValueRecord)
1709where
1710 V: VisitMut + ?Sized,
1711{
1712 for expr in &mut node.fields {
1713 v.visit_value_mut(expr);
1714 }
1715}
1716
1717pub fn visit_values_mut<V>(v: &mut V, node: &mut Values)
1719where
1720 V: VisitMut + ?Sized,
1721{
1722 for expr in &mut node.rows {
1723 v.visit_expr_mut(expr);
1724 }
1725}
1726
1727pub fn visit_with_mut<V>(v: &mut V, node: &mut With)
1729where
1730 V: VisitMut + ?Sized,
1731{
1732 for cte in &mut node.ctes {
1733 v.visit_cte_mut(cte);
1734 }
1735}
1736
1737pub fn for_each_expr_mut<F>(node: &mut impl Node, f: F)
1740where
1741 F: FnMut(&mut Expr),
1742{
1743 struct ForEach<F> {
1744 f: F,
1745 }
1746
1747 impl<F> VisitMut for ForEach<F>
1748 where
1749 F: FnMut(&mut Expr),
1750 {
1751 fn visit_expr_mut(&mut self, node: &mut Expr) {
1752 visit_expr_mut(self, node);
1753 (self.f)(node);
1754 }
1755 }
1756
1757 node.visit_mut(ForEach { f });
1758}
1759
1760pub fn walk_expr_scoped_mut<F>(expr: &mut Expr, scope_depth: usize, mut f: F)
1778where
1779 F: FnMut(&mut Expr, usize) -> bool,
1780{
1781 walk_expr_scoped_mut_ref(expr, scope_depth, &mut f);
1782}
1783
1784fn walk_expr_scoped_mut_ref<F>(expr: &mut Expr, scope_depth: usize, f: &mut F)
1785where
1786 F: FnMut(&mut Expr, usize) -> bool,
1787{
1788 struct ScopedWalk<'a, F> {
1789 f: &'a mut F,
1790 scope_depth: usize,
1791 }
1792
1793 impl<F> VisitMut for ScopedWalk<'_, F>
1794 where
1795 F: FnMut(&mut Expr, usize) -> bool,
1796 {
1797 fn visit_expr_mut(&mut self, node: &mut Expr) {
1798 if !(self.f)(node, self.scope_depth) {
1799 return;
1800 }
1801 visit_expr_mut(self, node);
1802 }
1803
1804 fn visit_expr_let_mut(&mut self, node: &mut ExprLet) {
1805 for binding in &mut node.bindings {
1806 self.visit_expr_mut(binding);
1807 }
1808 self.scope_depth += 1;
1809 self.visit_expr_mut(&mut node.body);
1810 self.scope_depth -= 1;
1811 }
1812
1813 fn visit_expr_map_mut(&mut self, node: &mut ExprMap) {
1814 self.visit_expr_mut(&mut node.base);
1815 self.scope_depth += 1;
1816 self.visit_expr_mut(&mut node.map);
1817 self.scope_depth -= 1;
1818 }
1819 }
1820
1821 ScopedWalk { f, scope_depth }.visit_expr_mut(expr);
1822}