1#![allow(unused_variables)]
2
3use super::{
4 Assignment, Assignments, Association, Condition, Cte, Delete, Expr, ExprAllOp, ExprAnd,
5 ExprAny, ExprAnyOp, ExprArg, ExprBinaryOp, ExprCast, ExprColumn, ExprError, ExprExists,
6 ExprFunc, ExprInList, ExprInSubquery, ExprIntersects, ExprIsNull, ExprIsSuperset,
7 ExprIsVariant, ExprLength, ExprLet, ExprLike, ExprList, ExprMap, ExprMatch, ExprNot, ExprOr,
8 ExprProject, ExprRecord, ExprReference, ExprSet, ExprSetOp, ExprStartsWith, ExprStmt, Filter,
9 FuncCount, FuncLastInsertId, Insert, InsertTarget, Join, JoinOp, Limit, LimitCursor,
10 LimitOffset, Node, OrderBy, OrderByExpr, Path, Projection, Query, Returning, Select, Source,
11 SourceModel, SourceTable, SourceTableId, Statement, TableDerived, TableFactor, TableRef,
12 TableWithJoins, Type, Update, UpdateTarget, Value, ValueRecord, Values, With,
13};
14
15pub trait VisitMut {
39 fn visit_mut<N: Node>(&mut self, i: &mut N)
41 where
42 Self: Sized,
43 {
44 i.visit_mut(self);
45 }
46
47 fn visit_assignment_mut(&mut self, i: &mut Assignment) {
51 visit_assignment_mut(self, i);
52 }
53
54 fn visit_assignments_mut(&mut self, i: &mut Assignments) {
58 visit_assignments_mut(self, i);
59 }
60
61 fn visit_association_mut(&mut self, i: &mut Association) {
65 visit_association_mut(self, i);
66 }
67
68 fn visit_cte_mut(&mut self, i: &mut Cte) {
72 visit_cte_mut(self, i);
73 }
74
75 fn visit_expr_mut(&mut self, i: &mut Expr) {
79 visit_expr_mut(self, i);
80 }
81
82 fn visit_expr_and_mut(&mut self, i: &mut ExprAnd) {
86 visit_expr_and_mut(self, i);
87 }
88
89 fn visit_expr_any_mut(&mut self, i: &mut ExprAny) {
93 visit_expr_any_mut(self, i);
94 }
95
96 fn visit_expr_arg_mut(&mut self, i: &mut ExprArg) {
100 visit_expr_arg_mut(self, i);
101 }
102
103 fn visit_expr_any_op_mut(&mut self, i: &mut ExprAnyOp) {
107 visit_expr_any_op_mut(self, i);
108 }
109
110 fn visit_expr_all_op_mut(&mut self, i: &mut ExprAllOp) {
114 visit_expr_all_op_mut(self, i);
115 }
116
117 fn visit_expr_binary_op_mut(&mut self, i: &mut ExprBinaryOp) {
121 visit_expr_binary_op_mut(self, i);
122 }
123
124 fn visit_expr_cast_mut(&mut self, i: &mut ExprCast) {
128 visit_expr_cast_mut(self, i);
129 }
130
131 fn visit_expr_column_mut(&mut self, i: &mut ExprColumn) {
135 visit_expr_column_mut(self, i);
136 }
137
138 fn visit_expr_default_mut(&mut self) {
142 visit_expr_default_mut(self);
143 }
144
145 fn visit_expr_error_mut(&mut self, i: &mut ExprError) {
149 visit_expr_error_mut(self, i);
150 }
151
152 fn visit_expr_exists_mut(&mut self, i: &mut ExprExists) {
156 visit_expr_exists_mut(self, i);
157 }
158
159 fn visit_expr_func_mut(&mut self, i: &mut ExprFunc) {
163 visit_expr_func_mut(self, i);
164 }
165
166 fn visit_expr_func_count_mut(&mut self, i: &mut FuncCount) {
170 visit_expr_func_count_mut(self, i);
171 }
172
173 fn visit_expr_func_last_insert_id_mut(&mut self, i: &mut FuncLastInsertId) {
177 visit_expr_func_last_insert_id_mut(self, i);
178 }
179
180 fn visit_expr_in_list_mut(&mut self, i: &mut ExprInList) {
184 visit_expr_in_list_mut(self, i);
185 }
186
187 fn visit_expr_in_subquery_mut(&mut self, i: &mut ExprInSubquery) {
191 visit_expr_in_subquery_mut(self, i);
192 }
193
194 fn visit_expr_intersects_mut(&mut self, i: &mut ExprIntersects) {
198 visit_expr_intersects_mut(self, i);
199 }
200
201 fn visit_expr_is_null_mut(&mut self, i: &mut ExprIsNull) {
205 visit_expr_is_null_mut(self, i);
206 }
207
208 fn visit_expr_is_superset_mut(&mut self, i: &mut ExprIsSuperset) {
212 visit_expr_is_superset_mut(self, i);
213 }
214
215 fn visit_expr_is_variant_mut(&mut self, i: &mut ExprIsVariant) {
219 visit_expr_is_variant_mut(self, i);
220 }
221
222 fn visit_expr_length_mut(&mut self, i: &mut ExprLength) {
226 visit_expr_length_mut(self, i);
227 }
228
229 fn visit_expr_let_mut(&mut self, i: &mut ExprLet) {
233 visit_expr_let_mut(self, i);
234 }
235
236 fn visit_expr_like_mut(&mut self, i: &mut ExprLike) {
240 visit_expr_like_mut(self, i);
241 }
242
243 fn visit_expr_map_mut(&mut self, i: &mut ExprMap) {
247 visit_expr_map_mut(self, i);
248 }
249
250 fn visit_expr_match_mut(&mut self, i: &mut ExprMatch) {
254 visit_expr_match_mut(self, i);
255 }
256
257 fn visit_expr_not_mut(&mut self, i: &mut ExprNot) {
261 visit_expr_not_mut(self, i);
262 }
263
264 fn visit_expr_or_mut(&mut self, i: &mut ExprOr) {
268 visit_expr_or_mut(self, i);
269 }
270
271 fn visit_expr_list_mut(&mut self, i: &mut ExprList) {
275 visit_expr_list_mut(self, i);
276 }
277
278 fn visit_expr_record_mut(&mut self, i: &mut ExprRecord) {
282 visit_expr_record_mut(self, i);
283 }
284
285 fn visit_expr_reference_mut(&mut self, i: &mut ExprReference) {
289 visit_expr_reference_mut(self, i);
290 }
291
292 fn visit_expr_set_mut(&mut self, i: &mut ExprSet) {
296 visit_expr_set_mut(self, i);
297 }
298
299 fn visit_expr_set_op_mut(&mut self, i: &mut ExprSetOp) {
303 visit_expr_set_op_mut(self, i);
304 }
305
306 fn visit_expr_starts_with_mut(&mut self, i: &mut ExprStartsWith) {
310 visit_expr_starts_with_mut(self, i);
311 }
312
313 fn visit_expr_stmt_mut(&mut self, i: &mut ExprStmt) {
317 visit_expr_stmt_mut(self, i);
318 }
319
320 fn visit_filter_mut(&mut self, i: &mut Filter) {
324 visit_filter_mut(self, i);
325 }
326
327 fn visit_condition_mut(&mut self, i: &mut Condition) {
331 visit_condition_mut(self, i);
332 }
333
334 fn visit_expr_project_mut(&mut self, i: &mut ExprProject) {
338 visit_expr_project_mut(self, i);
339 }
340
341 fn visit_insert_target_mut(&mut self, i: &mut InsertTarget) {
345 visit_insert_target_mut(self, i);
346 }
347
348 fn visit_join_mut(&mut self, i: &mut Join) {
352 visit_join_mut(self, i);
353 }
354
355 fn visit_limit_mut(&mut self, i: &mut Limit) {
359 visit_limit_mut(self, i);
360 }
361
362 fn visit_limit_cursor_mut(&mut self, i: &mut LimitCursor) {
366 visit_limit_cursor_mut(self, i);
367 }
368
369 fn visit_limit_offset_mut(&mut self, i: &mut LimitOffset) {
373 visit_limit_offset_mut(self, i);
374 }
375
376 fn visit_order_by_mut(&mut self, i: &mut OrderBy) {
380 visit_order_by_mut(self, i);
381 }
382
383 fn visit_order_by_expr_mut(&mut self, i: &mut OrderByExpr) {
387 visit_order_by_expr_mut(self, i);
388 }
389
390 fn visit_path_mut(&mut self, i: &mut Path) {
394 visit_path_mut(self, i);
395 }
396
397 fn visit_projection_mut(&mut self, i: &mut Projection) {
401 visit_projection_mut(self, i);
402 }
403
404 fn visit_returning_mut(&mut self, i: &mut Returning) {
408 visit_returning_mut(self, i);
409 }
410
411 fn visit_source_mut(&mut self, i: &mut Source) {
415 visit_source_mut(self, i);
416 }
417
418 fn visit_source_model_mut(&mut self, i: &mut SourceModel) {
422 visit_source_model_mut(self, i);
423 }
424
425 fn visit_source_table_mut(&mut self, i: &mut SourceTable) {
429 visit_source_table_mut(self, i);
430 }
431
432 fn visit_source_table_id_mut(&mut self, i: &mut SourceTableId) {
436 visit_source_table_id_mut(self, i);
437 }
438
439 fn visit_stmt_mut(&mut self, i: &mut Statement) {
443 visit_stmt_mut(self, i);
444 }
445
446 fn visit_stmt_delete_mut(&mut self, i: &mut Delete) {
450 visit_stmt_delete_mut(self, i);
451 }
452
453 fn visit_stmt_insert_mut(&mut self, i: &mut Insert) {
457 visit_stmt_insert_mut(self, i);
458 }
459
460 fn visit_stmt_query_mut(&mut self, i: &mut Query) {
464 visit_stmt_query_mut(self, i);
465 }
466
467 fn visit_stmt_select_mut(&mut self, i: &mut Select) {
471 visit_stmt_select_mut(self, i);
472 }
473
474 fn visit_stmt_update_mut(&mut self, i: &mut Update) {
478 visit_stmt_update_mut(self, i);
479 }
480
481 fn visit_table_derived_mut(&mut self, i: &mut TableDerived) {
485 visit_table_derived_mut(self, i);
486 }
487
488 fn visit_table_ref_mut(&mut self, i: &mut TableRef) {
492 visit_table_ref_mut(self, i);
493 }
494
495 fn visit_table_factor_mut(&mut self, i: &mut TableFactor) {
499 visit_table_factor_mut(self, i);
500 }
501
502 fn visit_table_with_joins_mut(&mut self, i: &mut TableWithJoins) {
506 visit_table_with_joins_mut(self, i);
507 }
508
509 fn visit_type_mut(&mut self, i: &mut Type) {
513 visit_type_mut(self, i);
514 }
515
516 fn visit_update_target_mut(&mut self, i: &mut UpdateTarget) {
520 visit_update_target_mut(self, i);
521 }
522
523 fn visit_value_mut(&mut self, i: &mut Value) {
527 visit_value_mut(self, i);
528 }
529
530 fn visit_value_record(&mut self, i: &mut ValueRecord) {
534 visit_value_record(self, i);
535 }
536
537 fn visit_values_mut(&mut self, i: &mut Values) {
541 visit_values_mut(self, i);
542 }
543
544 fn visit_with_mut(&mut self, i: &mut With) {
548 visit_with_mut(self, i);
549 }
550}
551
552impl<V: VisitMut> VisitMut for &mut V {
553 fn visit_assignment_mut(&mut self, i: &mut Assignment) {
554 VisitMut::visit_assignment_mut(&mut **self, i);
555 }
556
557 fn visit_assignments_mut(&mut self, i: &mut Assignments) {
558 VisitMut::visit_assignments_mut(&mut **self, i);
559 }
560
561 fn visit_association_mut(&mut self, i: &mut Association) {
562 VisitMut::visit_association_mut(&mut **self, i);
563 }
564
565 fn visit_cte_mut(&mut self, i: &mut Cte) {
566 VisitMut::visit_cte_mut(&mut **self, i);
567 }
568
569 fn visit_expr_mut(&mut self, i: &mut Expr) {
570 VisitMut::visit_expr_mut(&mut **self, i);
571 }
572
573 fn visit_expr_and_mut(&mut self, i: &mut ExprAnd) {
574 VisitMut::visit_expr_and_mut(&mut **self, i);
575 }
576
577 fn visit_expr_arg_mut(&mut self, i: &mut ExprArg) {
578 VisitMut::visit_expr_arg_mut(&mut **self, i);
579 }
580
581 fn visit_expr_any_op_mut(&mut self, i: &mut ExprAnyOp) {
582 VisitMut::visit_expr_any_op_mut(&mut **self, i);
583 }
584
585 fn visit_expr_all_op_mut(&mut self, i: &mut ExprAllOp) {
586 VisitMut::visit_expr_all_op_mut(&mut **self, i);
587 }
588
589 fn visit_expr_binary_op_mut(&mut self, i: &mut ExprBinaryOp) {
590 VisitMut::visit_expr_binary_op_mut(&mut **self, i);
591 }
592
593 fn visit_expr_cast_mut(&mut self, i: &mut ExprCast) {
594 VisitMut::visit_expr_cast_mut(&mut **self, i);
595 }
596
597 fn visit_expr_column_mut(&mut self, i: &mut ExprColumn) {
598 VisitMut::visit_expr_column_mut(&mut **self, i);
599 }
600
601 fn visit_expr_default_mut(&mut self) {
602 VisitMut::visit_expr_default_mut(&mut **self);
603 }
604
605 fn visit_expr_error_mut(&mut self, i: &mut ExprError) {
606 VisitMut::visit_expr_error_mut(&mut **self, i);
607 }
608
609 fn visit_expr_exists_mut(&mut self, i: &mut ExprExists) {
610 VisitMut::visit_expr_exists_mut(&mut **self, i);
611 }
612
613 fn visit_expr_func_mut(&mut self, i: &mut ExprFunc) {
614 VisitMut::visit_expr_func_mut(&mut **self, i);
615 }
616
617 fn visit_expr_func_count_mut(&mut self, i: &mut FuncCount) {
618 VisitMut::visit_expr_func_count_mut(&mut **self, i);
619 }
620
621 fn visit_expr_in_list_mut(&mut self, i: &mut ExprInList) {
622 VisitMut::visit_expr_in_list_mut(&mut **self, i);
623 }
624
625 fn visit_expr_in_subquery_mut(&mut self, i: &mut ExprInSubquery) {
626 VisitMut::visit_expr_in_subquery_mut(&mut **self, i);
627 }
628
629 fn visit_expr_intersects_mut(&mut self, i: &mut ExprIntersects) {
630 VisitMut::visit_expr_intersects_mut(&mut **self, i);
631 }
632
633 fn visit_expr_is_null_mut(&mut self, i: &mut ExprIsNull) {
634 VisitMut::visit_expr_is_null_mut(&mut **self, i);
635 }
636
637 fn visit_expr_is_superset_mut(&mut self, i: &mut ExprIsSuperset) {
638 VisitMut::visit_expr_is_superset_mut(&mut **self, i);
639 }
640
641 fn visit_expr_is_variant_mut(&mut self, i: &mut ExprIsVariant) {
642 VisitMut::visit_expr_is_variant_mut(&mut **self, i);
643 }
644
645 fn visit_expr_length_mut(&mut self, i: &mut ExprLength) {
646 VisitMut::visit_expr_length_mut(&mut **self, i);
647 }
648
649 fn visit_expr_let_mut(&mut self, i: &mut ExprLet) {
650 VisitMut::visit_expr_let_mut(&mut **self, i);
651 }
652
653 fn visit_expr_like_mut(&mut self, i: &mut ExprLike) {
654 VisitMut::visit_expr_like_mut(&mut **self, i);
655 }
656
657 fn visit_expr_map_mut(&mut self, i: &mut ExprMap) {
658 VisitMut::visit_expr_map_mut(&mut **self, i);
659 }
660
661 fn visit_expr_match_mut(&mut self, i: &mut ExprMatch) {
662 VisitMut::visit_expr_match_mut(&mut **self, i);
663 }
664
665 fn visit_expr_not_mut(&mut self, i: &mut ExprNot) {
666 VisitMut::visit_expr_not_mut(&mut **self, i);
667 }
668
669 fn visit_expr_or_mut(&mut self, i: &mut ExprOr) {
670 VisitMut::visit_expr_or_mut(&mut **self, i);
671 }
672
673 fn visit_expr_list_mut(&mut self, i: &mut ExprList) {
674 VisitMut::visit_expr_list_mut(&mut **self, i);
675 }
676
677 fn visit_expr_record_mut(&mut self, i: &mut ExprRecord) {
678 VisitMut::visit_expr_record_mut(&mut **self, i);
679 }
680
681 fn visit_expr_reference_mut(&mut self, i: &mut ExprReference) {
682 VisitMut::visit_expr_reference_mut(&mut **self, i);
683 }
684
685 fn visit_expr_set_mut(&mut self, i: &mut ExprSet) {
686 VisitMut::visit_expr_set_mut(&mut **self, i);
687 }
688
689 fn visit_expr_set_op_mut(&mut self, i: &mut ExprSetOp) {
690 VisitMut::visit_expr_set_op_mut(&mut **self, i);
691 }
692
693 fn visit_expr_starts_with_mut(&mut self, i: &mut ExprStartsWith) {
694 VisitMut::visit_expr_starts_with_mut(&mut **self, i);
695 }
696
697 fn visit_expr_stmt_mut(&mut self, i: &mut ExprStmt) {
698 VisitMut::visit_expr_stmt_mut(&mut **self, i);
699 }
700
701 fn visit_filter_mut(&mut self, i: &mut Filter) {
702 VisitMut::visit_filter_mut(&mut **self, i);
703 }
704
705 fn visit_condition_mut(&mut self, i: &mut Condition) {
706 VisitMut::visit_condition_mut(&mut **self, i);
707 }
708
709 fn visit_expr_project_mut(&mut self, i: &mut ExprProject) {
710 VisitMut::visit_expr_project_mut(&mut **self, i);
711 }
712
713 fn visit_insert_target_mut(&mut self, i: &mut InsertTarget) {
714 VisitMut::visit_insert_target_mut(&mut **self, i);
715 }
716
717 fn visit_join_mut(&mut self, i: &mut Join) {
718 VisitMut::visit_join_mut(&mut **self, i);
719 }
720
721 fn visit_limit_mut(&mut self, i: &mut Limit) {
722 VisitMut::visit_limit_mut(&mut **self, i);
723 }
724
725 fn visit_limit_cursor_mut(&mut self, i: &mut LimitCursor) {
726 VisitMut::visit_limit_cursor_mut(&mut **self, i);
727 }
728
729 fn visit_limit_offset_mut(&mut self, i: &mut LimitOffset) {
730 VisitMut::visit_limit_offset_mut(&mut **self, i);
731 }
732
733 fn visit_order_by_mut(&mut self, i: &mut OrderBy) {
734 VisitMut::visit_order_by_mut(&mut **self, i);
735 }
736
737 fn visit_order_by_expr_mut(&mut self, i: &mut OrderByExpr) {
738 VisitMut::visit_order_by_expr_mut(&mut **self, i);
739 }
740
741 fn visit_path_mut(&mut self, i: &mut Path) {
742 VisitMut::visit_path_mut(&mut **self, i);
743 }
744
745 fn visit_projection_mut(&mut self, i: &mut Projection) {
746 VisitMut::visit_projection_mut(&mut **self, i);
747 }
748
749 fn visit_returning_mut(&mut self, i: &mut Returning) {
750 VisitMut::visit_returning_mut(&mut **self, i);
751 }
752
753 fn visit_source_mut(&mut self, i: &mut Source) {
754 VisitMut::visit_source_mut(&mut **self, i);
755 }
756
757 fn visit_source_model_mut(&mut self, i: &mut SourceModel) {
758 VisitMut::visit_source_model_mut(&mut **self, i);
759 }
760
761 fn visit_source_table_mut(&mut self, i: &mut SourceTable) {
762 VisitMut::visit_source_table_mut(&mut **self, i);
763 }
764
765 fn visit_source_table_id_mut(&mut self, i: &mut SourceTableId) {
766 VisitMut::visit_source_table_id_mut(&mut **self, i);
767 }
768
769 fn visit_stmt_mut(&mut self, i: &mut Statement) {
770 VisitMut::visit_stmt_mut(&mut **self, i);
771 }
772
773 fn visit_stmt_delete_mut(&mut self, i: &mut Delete) {
774 VisitMut::visit_stmt_delete_mut(&mut **self, i);
775 }
776
777 fn visit_stmt_insert_mut(&mut self, i: &mut Insert) {
778 VisitMut::visit_stmt_insert_mut(&mut **self, i);
779 }
780
781 fn visit_stmt_query_mut(&mut self, i: &mut Query) {
782 VisitMut::visit_stmt_query_mut(&mut **self, i);
783 }
784
785 fn visit_stmt_select_mut(&mut self, i: &mut Select) {
786 VisitMut::visit_stmt_select_mut(&mut **self, i);
787 }
788
789 fn visit_stmt_update_mut(&mut self, i: &mut Update) {
790 VisitMut::visit_stmt_update_mut(&mut **self, i);
791 }
792
793 fn visit_table_derived_mut(&mut self, i: &mut TableDerived) {
794 VisitMut::visit_table_derived_mut(&mut **self, i);
795 }
796
797 fn visit_table_ref_mut(&mut self, i: &mut TableRef) {
798 VisitMut::visit_table_ref_mut(&mut **self, i);
799 }
800
801 fn visit_table_factor_mut(&mut self, i: &mut TableFactor) {
802 VisitMut::visit_table_factor_mut(&mut **self, i);
803 }
804
805 fn visit_table_with_joins_mut(&mut self, i: &mut TableWithJoins) {
806 VisitMut::visit_table_with_joins_mut(&mut **self, i);
807 }
808
809 fn visit_type_mut(&mut self, i: &mut Type) {
810 VisitMut::visit_type_mut(&mut **self, i);
811 }
812
813 fn visit_update_target_mut(&mut self, i: &mut UpdateTarget) {
814 VisitMut::visit_update_target_mut(&mut **self, i);
815 }
816
817 fn visit_value_mut(&mut self, i: &mut Value) {
818 VisitMut::visit_value_mut(&mut **self, i);
819 }
820
821 fn visit_value_record(&mut self, i: &mut ValueRecord) {
822 VisitMut::visit_value_record(&mut **self, i);
823 }
824
825 fn visit_values_mut(&mut self, i: &mut Values) {
826 VisitMut::visit_values_mut(&mut **self, i);
827 }
828
829 fn visit_with_mut(&mut self, i: &mut With) {
830 VisitMut::visit_with_mut(&mut **self, i);
831 }
832}
833
834pub fn visit_assignment_mut<V>(v: &mut V, node: &mut Assignment)
836where
837 V: VisitMut + ?Sized,
838{
839 match node {
840 Assignment::Set(expr)
841 | Assignment::Insert(expr)
842 | Assignment::Remove(expr)
843 | Assignment::Append(expr)
844 | Assignment::RemoveAt(expr)
845 | Assignment::Add(expr)
846 | Assignment::Subtract(expr) => {
847 v.visit_expr_mut(expr);
848 }
849 Assignment::Pop => {}
850 Assignment::Batch(entries) => {
851 for entry in entries {
852 visit_assignment_mut(v, entry);
853 }
854 }
855 }
856}
857
858pub fn visit_assignments_mut<V>(v: &mut V, node: &mut Assignments)
860where
861 V: VisitMut + ?Sized,
862{
863 for (_, assignment) in node.iter_mut() {
864 v.visit_assignment_mut(assignment);
865 }
866}
867
868pub fn visit_association_mut<V>(v: &mut V, node: &mut Association)
870where
871 V: VisitMut + ?Sized,
872{
873 v.visit_stmt_query_mut(&mut node.source);
874}
875
876pub fn visit_cte_mut<V>(v: &mut V, node: &mut Cte)
878where
879 V: VisitMut + ?Sized,
880{
881 v.visit_stmt_query_mut(&mut node.query);
882}
883
884pub fn visit_expr_mut<V>(v: &mut V, node: &mut Expr)
886where
887 V: VisitMut + ?Sized,
888{
889 match node {
890 Expr::AllOp(expr) => v.visit_expr_all_op_mut(expr),
891 Expr::And(expr) => v.visit_expr_and_mut(expr),
892 Expr::Any(expr) => v.visit_expr_any_mut(expr),
893 Expr::AnyOp(expr) => v.visit_expr_any_op_mut(expr),
894 Expr::Arg(expr) => v.visit_expr_arg_mut(expr),
895 Expr::BinaryOp(expr) => v.visit_expr_binary_op_mut(expr),
896 Expr::Cast(expr) => v.visit_expr_cast_mut(expr),
897 Expr::Default => v.visit_expr_default_mut(),
898 Expr::Error(expr) => v.visit_expr_error_mut(expr),
899 Expr::Exists(expr) => v.visit_expr_exists_mut(expr),
900 Expr::Func(expr) => v.visit_expr_func_mut(expr),
901 Expr::Ident(_) => {}
902 Expr::InList(expr) => v.visit_expr_in_list_mut(expr),
903 Expr::InSubquery(expr) => v.visit_expr_in_subquery_mut(expr),
904 Expr::Intersects(expr) => v.visit_expr_intersects_mut(expr),
905 Expr::IsNull(expr) => v.visit_expr_is_null_mut(expr),
906 Expr::IsSuperset(expr) => v.visit_expr_is_superset_mut(expr),
907 Expr::IsVariant(expr) => v.visit_expr_is_variant_mut(expr),
908 Expr::Length(expr) => v.visit_expr_length_mut(expr),
909 Expr::Let(expr) => v.visit_expr_let_mut(expr),
910 Expr::Like(expr) => v.visit_expr_like_mut(expr),
911 Expr::Map(expr) => v.visit_expr_map_mut(expr),
912 Expr::Match(expr) => v.visit_expr_match_mut(expr),
913 Expr::Not(expr) => v.visit_expr_not_mut(expr),
914 Expr::Or(expr) => v.visit_expr_or_mut(expr),
915 Expr::Project(expr) => v.visit_expr_project_mut(expr),
916 Expr::Record(expr) => v.visit_expr_record_mut(expr),
917 Expr::Reference(expr) => v.visit_expr_reference_mut(expr),
918 Expr::List(expr) => v.visit_expr_list_mut(expr),
919 Expr::StartsWith(expr) => v.visit_expr_starts_with_mut(expr),
920 Expr::Stmt(expr) => v.visit_expr_stmt_mut(expr),
921 Expr::Value(expr) => v.visit_value_mut(expr),
922 }
923}
924
925pub fn visit_expr_and_mut<V>(v: &mut V, node: &mut ExprAnd)
927where
928 V: VisitMut + ?Sized,
929{
930 for expr in node {
931 v.visit_expr_mut(expr);
932 }
933}
934
935pub fn visit_expr_any_mut<V>(v: &mut V, node: &mut ExprAny)
937where
938 V: VisitMut + ?Sized,
939{
940 v.visit_expr_mut(&mut node.expr);
941}
942
943pub fn visit_expr_arg_mut<V>(v: &mut V, node: &mut ExprArg)
945where
946 V: VisitMut + ?Sized,
947{
948}
949
950pub fn visit_expr_binary_op_mut<V>(v: &mut V, node: &mut ExprBinaryOp)
952where
953 V: VisitMut + ?Sized,
954{
955 v.visit_expr_mut(&mut node.lhs);
956 v.visit_expr_mut(&mut node.rhs);
957}
958
959pub fn visit_expr_any_op_mut<V>(v: &mut V, node: &mut ExprAnyOp)
961where
962 V: VisitMut + ?Sized,
963{
964 v.visit_expr_mut(&mut node.lhs);
965 v.visit_expr_mut(&mut node.rhs);
966}
967
968pub fn visit_expr_all_op_mut<V>(v: &mut V, node: &mut ExprAllOp)
970where
971 V: VisitMut + ?Sized,
972{
973 v.visit_expr_mut(&mut node.lhs);
974 v.visit_expr_mut(&mut node.rhs);
975}
976
977pub fn visit_expr_cast_mut<V>(v: &mut V, node: &mut ExprCast)
979where
980 V: VisitMut + ?Sized,
981{
982 v.visit_expr_mut(&mut node.expr);
983 v.visit_type_mut(&mut node.ty);
984}
985
986pub fn visit_expr_column_mut<V>(v: &mut V, node: &mut ExprColumn)
988where
989 V: VisitMut + ?Sized,
990{
991}
992
993pub fn visit_expr_default_mut<V>(v: &mut V)
995where
996 V: VisitMut + ?Sized,
997{
998}
999
1000pub fn visit_expr_error_mut<V>(v: &mut V, node: &mut ExprError)
1002where
1003 V: VisitMut + ?Sized,
1004{
1005 }
1007
1008pub fn visit_expr_exists_mut<V>(v: &mut V, node: &mut ExprExists)
1010where
1011 V: VisitMut + ?Sized,
1012{
1013 v.visit_stmt_query_mut(&mut node.subquery);
1014}
1015
1016pub fn visit_expr_func_mut<V>(v: &mut V, node: &mut ExprFunc)
1018where
1019 V: VisitMut + ?Sized,
1020{
1021 match node {
1022 ExprFunc::Count(func) => v.visit_expr_func_count_mut(func),
1023 ExprFunc::LastInsertId(func) => v.visit_expr_func_last_insert_id_mut(func),
1024 }
1025}
1026
1027pub fn visit_expr_func_count_mut<V>(v: &mut V, node: &mut FuncCount)
1029where
1030 V: VisitMut + ?Sized,
1031{
1032 if let Some(expr) = &mut node.arg {
1033 v.visit_expr_mut(expr);
1034 }
1035
1036 if let Some(expr) = &mut node.filter {
1037 v.visit_expr_mut(expr);
1038 }
1039}
1040
1041pub fn visit_expr_func_last_insert_id_mut<V>(_v: &mut V, _node: &mut FuncLastInsertId)
1043where
1044 V: VisitMut + ?Sized,
1045{
1046 }
1048
1049pub fn visit_expr_in_list_mut<V>(v: &mut V, node: &mut ExprInList)
1051where
1052 V: VisitMut + ?Sized,
1053{
1054 v.visit_expr_mut(&mut node.expr);
1055 v.visit_expr_mut(&mut node.list);
1056}
1057
1058pub fn visit_expr_in_subquery_mut<V>(v: &mut V, node: &mut ExprInSubquery)
1060where
1061 V: VisitMut + ?Sized,
1062{
1063 v.visit_expr_mut(&mut node.expr);
1064 v.visit_stmt_query_mut(&mut node.query);
1065}
1066
1067pub fn visit_expr_intersects_mut<V>(v: &mut V, node: &mut ExprIntersects)
1069where
1070 V: VisitMut + ?Sized,
1071{
1072 v.visit_expr_mut(&mut node.lhs);
1073 v.visit_expr_mut(&mut node.rhs);
1074}
1075
1076pub fn visit_expr_is_null_mut<V>(v: &mut V, node: &mut ExprIsNull)
1078where
1079 V: VisitMut + ?Sized,
1080{
1081 v.visit_expr_mut(&mut node.expr);
1082}
1083
1084pub fn visit_expr_is_superset_mut<V>(v: &mut V, node: &mut ExprIsSuperset)
1086where
1087 V: VisitMut + ?Sized,
1088{
1089 v.visit_expr_mut(&mut node.lhs);
1090 v.visit_expr_mut(&mut node.rhs);
1091}
1092
1093pub fn visit_expr_is_variant_mut<V>(v: &mut V, node: &mut ExprIsVariant)
1095where
1096 V: VisitMut + ?Sized,
1097{
1098 v.visit_expr_mut(&mut node.expr);
1099}
1100
1101pub fn visit_expr_length_mut<V>(v: &mut V, node: &mut ExprLength)
1103where
1104 V: VisitMut + ?Sized,
1105{
1106 v.visit_expr_mut(&mut node.expr);
1107}
1108
1109pub fn visit_expr_let_mut<V>(v: &mut V, node: &mut ExprLet)
1111where
1112 V: VisitMut + ?Sized,
1113{
1114 for binding in &mut node.bindings {
1115 v.visit_expr_mut(binding);
1116 }
1117 v.visit_expr_mut(&mut node.body);
1118}
1119
1120pub fn visit_expr_like_mut<V>(v: &mut V, node: &mut ExprLike)
1122where
1123 V: VisitMut + ?Sized,
1124{
1125 v.visit_expr_mut(&mut node.expr);
1126 v.visit_expr_mut(&mut node.pattern);
1127}
1128
1129pub fn visit_expr_map_mut<V>(v: &mut V, node: &mut ExprMap)
1131where
1132 V: VisitMut + ?Sized,
1133{
1134 v.visit_expr_mut(&mut node.base);
1135 v.visit_expr_mut(&mut node.map);
1136}
1137
1138pub fn visit_expr_match_mut<V>(v: &mut V, node: &mut ExprMatch)
1140where
1141 V: VisitMut + ?Sized,
1142{
1143 v.visit_expr_mut(&mut node.subject);
1144 for arm in &mut node.arms {
1145 v.visit_expr_mut(&mut arm.expr);
1146 }
1147 v.visit_expr_mut(&mut node.else_expr);
1148}
1149
1150pub fn visit_expr_not_mut<V>(v: &mut V, node: &mut ExprNot)
1152where
1153 V: VisitMut + ?Sized,
1154{
1155 v.visit_expr_mut(&mut node.expr);
1156}
1157
1158pub fn visit_expr_or_mut<V>(v: &mut V, node: &mut ExprOr)
1160where
1161 V: VisitMut + ?Sized,
1162{
1163 for expr in node {
1164 v.visit_expr_mut(expr);
1165 }
1166}
1167
1168pub fn visit_expr_list_mut<V>(v: &mut V, node: &mut ExprList)
1170where
1171 V: VisitMut + ?Sized,
1172{
1173 for e in &mut node.items {
1174 v.visit_expr_mut(e);
1175 }
1176}
1177
1178pub fn visit_expr_record_mut<V>(v: &mut V, node: &mut ExprRecord)
1180where
1181 V: VisitMut + ?Sized,
1182{
1183 for expr in &mut **node {
1184 v.visit_expr_mut(expr);
1185 }
1186}
1187
1188pub fn visit_expr_reference_mut<V>(v: &mut V, node: &mut ExprReference)
1190where
1191 V: VisitMut + ?Sized,
1192{
1193 match node {
1194 ExprReference::Model { .. } => {}
1195 ExprReference::Field { .. } => {}
1196 ExprReference::Column(expr_column) => v.visit_expr_column_mut(expr_column),
1197 }
1198}
1199
1200pub fn visit_expr_set_mut<V>(v: &mut V, node: &mut ExprSet)
1202where
1203 V: VisitMut + ?Sized,
1204{
1205 match node {
1206 ExprSet::Select(expr) => v.visit_stmt_select_mut(expr),
1207 ExprSet::SetOp(expr) => v.visit_expr_set_op_mut(expr),
1208 ExprSet::Update(expr) => v.visit_stmt_update_mut(expr),
1209 ExprSet::Values(expr) => v.visit_values_mut(expr),
1210 ExprSet::Insert(expr) => v.visit_stmt_insert_mut(expr),
1211 }
1212}
1213
1214pub fn visit_expr_set_op_mut<V>(v: &mut V, node: &mut ExprSetOp)
1216where
1217 V: VisitMut + ?Sized,
1218{
1219 for operand in &mut node.operands {
1220 v.visit_expr_set_mut(operand);
1221 }
1222}
1223
1224pub fn visit_expr_starts_with_mut<V>(v: &mut V, node: &mut ExprStartsWith)
1226where
1227 V: VisitMut + ?Sized,
1228{
1229 v.visit_expr_mut(&mut node.expr);
1230 v.visit_expr_mut(&mut node.prefix);
1231}
1232
1233pub fn visit_expr_stmt_mut<V>(v: &mut V, node: &mut ExprStmt)
1235where
1236 V: VisitMut + ?Sized,
1237{
1238 v.visit_stmt_mut(&mut node.stmt);
1239}
1240
1241pub fn visit_expr_project_mut<V>(v: &mut V, node: &mut ExprProject)
1243where
1244 V: VisitMut + ?Sized,
1245{
1246 v.visit_expr_mut(&mut node.base);
1247 v.visit_projection_mut(&mut node.projection);
1248}
1249
1250pub fn visit_filter_mut<V>(v: &mut V, node: &mut Filter)
1252where
1253 V: VisitMut + ?Sized,
1254{
1255 if let Some(expr) = &mut node.expr {
1256 v.visit_expr_mut(expr);
1257 }
1258}
1259
1260pub fn visit_condition_mut<V>(v: &mut V, node: &mut Condition)
1262where
1263 V: VisitMut + ?Sized,
1264{
1265 if let Some(expr) = &mut node.expr {
1266 v.visit_expr_mut(expr);
1267 }
1268}
1269
1270pub fn visit_insert_target_mut<V>(v: &mut V, node: &mut InsertTarget)
1272where
1273 V: VisitMut + ?Sized,
1274{
1275 if let InsertTarget::Scope(stmt) = node {
1276 v.visit_stmt_query_mut(stmt)
1277 }
1278}
1279
1280pub fn visit_join_mut<V>(v: &mut V, node: &mut Join)
1282where
1283 V: VisitMut + ?Sized,
1284{
1285 v.visit_source_table_id_mut(&mut node.table);
1286 match &mut node.constraint {
1287 JoinOp::Inner(expr) | JoinOp::Left(expr) => v.visit_expr_mut(expr),
1288 }
1289}
1290
1291pub fn visit_limit_mut<V>(v: &mut V, node: &mut Limit)
1293where
1294 V: VisitMut + ?Sized,
1295{
1296 match node {
1297 Limit::Cursor(cursor) => v.visit_limit_cursor_mut(cursor),
1298 Limit::Offset(offset) => v.visit_limit_offset_mut(offset),
1299 }
1300}
1301
1302pub fn visit_limit_cursor_mut<V>(v: &mut V, node: &mut LimitCursor)
1304where
1305 V: VisitMut + ?Sized,
1306{
1307 v.visit_expr_mut(&mut node.page_size);
1308 if let Some(after) = &mut node.after {
1309 v.visit_expr_mut(after);
1310 }
1311}
1312
1313pub fn visit_limit_offset_mut<V>(v: &mut V, node: &mut LimitOffset)
1315where
1316 V: VisitMut + ?Sized,
1317{
1318 v.visit_expr_mut(&mut node.limit);
1319 if let Some(offset) = &mut node.offset {
1320 v.visit_expr_mut(offset);
1321 }
1322}
1323
1324pub fn visit_order_by_mut<V>(v: &mut V, node: &mut OrderBy)
1326where
1327 V: VisitMut + ?Sized,
1328{
1329 for expr in &mut node.exprs {
1330 v.visit_order_by_expr_mut(expr);
1331 }
1332}
1333
1334pub fn visit_order_by_expr_mut<V>(v: &mut V, node: &mut OrderByExpr)
1336where
1337 V: VisitMut + ?Sized,
1338{
1339 v.visit_expr_mut(&mut node.expr);
1340}
1341
1342pub fn visit_path_mut<V>(v: &mut V, node: &mut Path)
1344where
1345 V: VisitMut + ?Sized,
1346{
1347 v.visit_projection_mut(&mut node.projection);
1348}
1349
1350pub fn visit_projection_mut<V>(v: &mut V, node: &mut Projection)
1352where
1353 V: VisitMut + ?Sized,
1354{
1355}
1356
1357pub fn visit_returning_mut<V>(v: &mut V, node: &mut Returning)
1359where
1360 V: VisitMut + ?Sized,
1361{
1362 match node {
1363 Returning::Model { include } => {
1364 for path in include {
1365 v.visit_path_mut(path);
1366 }
1367 }
1368 Returning::Changed => {}
1369 Returning::Project(expr) => v.visit_expr_mut(expr),
1370 Returning::Expr(expr) => v.visit_expr_mut(expr),
1371 }
1372}
1373
1374pub fn visit_source_mut<V>(v: &mut V, node: &mut Source)
1376where
1377 V: VisitMut + ?Sized,
1378{
1379 match node {
1380 Source::Model(source_model) => v.visit_source_model_mut(source_model),
1381 Source::Table(source_table) => v.visit_source_table_mut(source_table),
1382 }
1383}
1384
1385pub fn visit_source_model_mut<V>(v: &mut V, node: &mut SourceModel)
1387where
1388 V: VisitMut + ?Sized,
1389{
1390 if let Some(association) = &mut node.via {
1391 v.visit_association_mut(association);
1392 }
1393}
1394
1395pub fn visit_source_table_mut<V>(v: &mut V, node: &mut SourceTable)
1397where
1398 V: VisitMut + ?Sized,
1399{
1400 for table_ref in &mut node.tables {
1401 v.visit_table_ref_mut(table_ref);
1402 }
1403 for table_with_joins in &mut node.from {
1404 v.visit_table_with_joins_mut(table_with_joins);
1405 }
1406}
1407
1408pub fn visit_source_table_id_mut<V>(v: &mut V, node: &mut SourceTableId)
1410where
1411 V: VisitMut + ?Sized,
1412{
1413 }
1415
1416pub fn visit_table_factor_mut<V>(v: &mut V, node: &mut TableFactor)
1418where
1419 V: VisitMut + ?Sized,
1420{
1421 match node {
1422 TableFactor::Table(table_id) => v.visit_source_table_id_mut(table_id),
1423 }
1424}
1425
1426pub fn visit_stmt_mut<V>(v: &mut V, node: &mut Statement)
1428where
1429 V: VisitMut + ?Sized,
1430{
1431 match node {
1432 Statement::Delete(stmt) => v.visit_stmt_delete_mut(stmt),
1433 Statement::Insert(stmt) => v.visit_stmt_insert_mut(stmt),
1434 Statement::Query(stmt) => v.visit_stmt_query_mut(stmt),
1435 Statement::Update(stmt) => v.visit_stmt_update_mut(stmt),
1436 }
1437}
1438
1439pub fn visit_stmt_delete_mut<V>(v: &mut V, node: &mut Delete)
1441where
1442 V: VisitMut + ?Sized,
1443{
1444 v.visit_source_mut(&mut node.from);
1445 v.visit_filter_mut(&mut node.filter);
1446 v.visit_condition_mut(&mut node.condition);
1447
1448 if let Some(returning) = &mut node.returning {
1449 v.visit_returning_mut(returning);
1450 }
1451}
1452
1453pub fn visit_stmt_insert_mut<V>(v: &mut V, node: &mut Insert)
1455where
1456 V: VisitMut + ?Sized,
1457{
1458 v.visit_insert_target_mut(&mut node.target);
1459 v.visit_stmt_query_mut(&mut node.source);
1460
1461 if let Some(returning) = &mut node.returning {
1462 v.visit_returning_mut(returning);
1463 }
1464}
1465
1466pub fn visit_stmt_query_mut<V>(v: &mut V, node: &mut Query)
1468where
1469 V: VisitMut + ?Sized,
1470{
1471 if let Some(with) = &mut node.with {
1472 v.visit_with_mut(with);
1473 }
1474
1475 v.visit_expr_set_mut(&mut node.body);
1476
1477 if let Some(order_by) = &mut node.order_by {
1478 v.visit_order_by_mut(order_by);
1479 }
1480
1481 if let Some(limit) = &mut node.limit {
1482 v.visit_limit_mut(limit);
1483 }
1484}
1485
1486pub fn visit_stmt_select_mut<V>(v: &mut V, node: &mut Select)
1488where
1489 V: VisitMut + ?Sized,
1490{
1491 v.visit_source_mut(&mut node.source);
1492 v.visit_filter_mut(&mut node.filter);
1493 v.visit_returning_mut(&mut node.returning);
1494}
1495
1496pub fn visit_stmt_update_mut<V>(v: &mut V, node: &mut Update)
1498where
1499 V: VisitMut + ?Sized,
1500{
1501 v.visit_update_target_mut(&mut node.target);
1502 v.visit_assignments_mut(&mut node.assignments);
1503 v.visit_filter_mut(&mut node.filter);
1504 v.visit_condition_mut(&mut node.condition);
1505
1506 if let Some(returning) = &mut node.returning {
1507 v.visit_returning_mut(returning);
1508 }
1509}
1510
1511pub fn visit_table_derived_mut<V>(v: &mut V, node: &mut TableDerived)
1513where
1514 V: VisitMut + ?Sized,
1515{
1516 v.visit_stmt_query_mut(&mut node.subquery);
1517}
1518
1519pub fn visit_table_ref_mut<V>(v: &mut V, node: &mut TableRef)
1521where
1522 V: VisitMut + ?Sized,
1523{
1524 match node {
1525 TableRef::Cte { .. } => {}
1526 TableRef::Derived(table_derived) => v.visit_table_derived_mut(table_derived),
1527 TableRef::Table(_) => {}
1528 TableRef::Arg(expr_arg) => v.visit_expr_arg_mut(expr_arg),
1529 }
1530}
1531
1532pub fn visit_table_with_joins_mut<V>(v: &mut V, node: &mut TableWithJoins)
1534where
1535 V: VisitMut + ?Sized,
1536{
1537 v.visit_table_factor_mut(&mut node.relation);
1538 for join in &mut node.joins {
1539 v.visit_join_mut(join);
1540 }
1541}
1542
1543pub fn visit_type_mut<V>(v: &mut V, node: &mut Type)
1545where
1546 V: VisitMut + ?Sized,
1547{
1548 }
1550
1551pub fn visit_update_target_mut<V>(v: &mut V, node: &mut UpdateTarget)
1553where
1554 V: VisitMut + ?Sized,
1555{
1556 if let UpdateTarget::Query(stmt) = node {
1557 v.visit_stmt_query_mut(stmt)
1558 }
1559}
1560
1561pub fn visit_value_mut<V>(v: &mut V, node: &mut Value)
1563where
1564 V: VisitMut + ?Sized,
1565{
1566 if let Value::Record(node) = node {
1567 v.visit_value_record(node);
1568 }
1569}
1570
1571pub fn visit_value_record<V>(v: &mut V, node: &mut ValueRecord)
1573where
1574 V: VisitMut + ?Sized,
1575{
1576 for expr in &mut node.fields {
1577 v.visit_value_mut(expr);
1578 }
1579}
1580
1581pub fn visit_values_mut<V>(v: &mut V, node: &mut Values)
1583where
1584 V: VisitMut + ?Sized,
1585{
1586 for expr in &mut node.rows {
1587 v.visit_expr_mut(expr);
1588 }
1589}
1590
1591pub fn visit_with_mut<V>(v: &mut V, node: &mut With)
1593where
1594 V: VisitMut + ?Sized,
1595{
1596 for cte in &mut node.ctes {
1597 v.visit_cte_mut(cte);
1598 }
1599}
1600
1601pub fn for_each_expr_mut<F>(node: &mut impl Node, f: F)
1604where
1605 F: FnMut(&mut Expr),
1606{
1607 struct ForEach<F> {
1608 f: F,
1609 }
1610
1611 impl<F> VisitMut for ForEach<F>
1612 where
1613 F: FnMut(&mut Expr),
1614 {
1615 fn visit_expr_mut(&mut self, node: &mut Expr) {
1616 visit_expr_mut(self, node);
1617 (self.f)(node);
1618 }
1619 }
1620
1621 node.visit_mut(ForEach { f });
1622}
1623
1624pub fn walk_expr_scoped_mut<F>(expr: &mut Expr, scope_depth: usize, mut f: F)
1642where
1643 F: FnMut(&mut Expr, usize) -> bool,
1644{
1645 walk_expr_scoped_mut_ref(expr, scope_depth, &mut f);
1646}
1647
1648fn walk_expr_scoped_mut_ref<F>(expr: &mut Expr, scope_depth: usize, f: &mut F)
1649where
1650 F: FnMut(&mut Expr, usize) -> bool,
1651{
1652 struct ScopedWalk<'a, F> {
1653 f: &'a mut F,
1654 scope_depth: usize,
1655 }
1656
1657 impl<F> VisitMut for ScopedWalk<'_, F>
1658 where
1659 F: FnMut(&mut Expr, usize) -> bool,
1660 {
1661 fn visit_expr_mut(&mut self, node: &mut Expr) {
1662 if !(self.f)(node, self.scope_depth) {
1663 return;
1664 }
1665 visit_expr_mut(self, node);
1666 }
1667
1668 fn visit_expr_let_mut(&mut self, node: &mut ExprLet) {
1669 for binding in &mut node.bindings {
1670 self.visit_expr_mut(binding);
1671 }
1672 self.scope_depth += 1;
1673 self.visit_expr_mut(&mut node.body);
1674 self.scope_depth -= 1;
1675 }
1676
1677 fn visit_expr_map_mut(&mut self, node: &mut ExprMap) {
1678 self.visit_expr_mut(&mut node.base);
1679 self.scope_depth += 1;
1680 self.visit_expr_mut(&mut node.map);
1681 self.scope_depth -= 1;
1682 }
1683 }
1684
1685 ScopedWalk { f, scope_depth }.visit_expr_mut(expr);
1686}