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, Filter, FuncCount, FuncJsonExtract, FuncLastInsertId, Include, Insert, InsertTarget,
10 Join, JoinOp, Limit, LimitCursor, LimitOffset, Node, OrderBy, OrderByExpr, Path, Projection,
11 Query, Returning, Select, Source, SourceModel, SourceTable, SourceTableId, Statement,
12 TableDerived, TableFactor, TableRef, TableWithJoins, Type, Update, UpdateTarget, Value,
13 ValueRecord, Values, With,
14};
15
16pub trait Visit {
38 fn visit<N: Node>(&mut self, i: &N)
40 where
41 Self: Sized,
42 {
43 i.visit(self);
44 }
45
46 fn visit_assignment(&mut self, i: &Assignment) {
50 visit_assignment(self, i);
51 }
52
53 fn visit_assignments(&mut self, i: &Assignments) {
57 visit_assignments(self, i);
58 }
59
60 fn visit_association(&mut self, i: &Association) {
64 visit_association(self, i);
65 }
66
67 fn visit_cte(&mut self, i: &Cte) {
71 visit_cte(self, i);
72 }
73
74 fn visit_expr(&mut self, i: &Expr) {
78 visit_expr(self, i);
79 }
80
81 fn visit_expr_and(&mut self, i: &ExprAnd) {
85 visit_expr_and(self, i);
86 }
87
88 fn visit_expr_any(&mut self, i: &ExprAny) {
92 visit_expr_any(self, i);
93 }
94
95 fn visit_expr_arg(&mut self, i: &ExprArg) {
99 visit_expr_arg(self, i);
100 }
101
102 fn visit_expr_any_op(&mut self, i: &ExprAnyOp) {
106 visit_expr_any_op(self, i);
107 }
108
109 fn visit_expr_all_op(&mut self, i: &ExprAllOp) {
113 visit_expr_all_op(self, i);
114 }
115
116 fn visit_expr_between(&mut self, i: &ExprBetween) {
120 visit_expr_between(self, i);
121 }
122
123 fn visit_expr_binary_op(&mut self, i: &ExprBinaryOp) {
127 visit_expr_binary_op(self, i);
128 }
129
130 fn visit_expr_cast(&mut self, i: &ExprCast) {
134 visit_expr_cast(self, i);
135 }
136
137 fn visit_expr_column(&mut self, i: &ExprColumn) {
141 visit_expr_column(self, i);
142 }
143
144 fn visit_expr_default(&mut self) {
148 visit_expr_default(self);
149 }
150
151 fn visit_expr_error(&mut self, i: &ExprError) {
155 visit_expr_error(self, i);
156 }
157
158 fn visit_expr_exists(&mut self, i: &ExprExists) {
162 visit_expr_exists(self, i);
163 }
164
165 fn visit_expr_func(&mut self, i: &ExprFunc) {
169 visit_expr_func(self, i);
170 }
171
172 fn visit_expr_func_count(&mut self, i: &FuncCount) {
176 visit_expr_func_count(self, i);
177 }
178
179 fn visit_expr_func_json_extract(&mut self, i: &FuncJsonExtract) {
183 visit_expr_func_json_extract(self, i);
184 }
185
186 fn visit_expr_func_last_insert_id(&mut self, i: &FuncLastInsertId) {
190 visit_expr_func_last_insert_id(self, i);
191 }
192
193 fn visit_expr_in_list(&mut self, i: &ExprInList) {
197 visit_expr_in_list(self, i);
198 }
199
200 fn visit_expr_in_subquery(&mut self, i: &ExprInSubquery) {
204 visit_expr_in_subquery(self, i);
205 }
206
207 fn visit_expr_incoming(&mut self, i: &ExprIncoming) {
211 visit_expr_incoming(self, i);
212 }
213
214 fn visit_expr_intersects(&mut self, i: &ExprIntersects) {
218 visit_expr_intersects(self, i);
219 }
220
221 fn visit_expr_is_null(&mut self, i: &ExprIsNull) {
225 visit_expr_is_null(self, i);
226 }
227
228 fn visit_expr_is_superset(&mut self, i: &ExprIsSuperset) {
232 visit_expr_is_superset(self, i);
233 }
234
235 fn visit_expr_is_variant(&mut self, i: &ExprIsVariant) {
239 visit_expr_is_variant(self, i);
240 }
241
242 fn visit_expr_length(&mut self, i: &ExprLength) {
246 visit_expr_length(self, i);
247 }
248
249 fn visit_expr_let(&mut self, i: &ExprLet) {
253 visit_expr_let(self, i);
254 }
255
256 fn visit_expr_like(&mut self, i: &ExprLike) {
260 visit_expr_like(self, i);
261 }
262
263 fn visit_expr_map(&mut self, i: &ExprMap) {
267 visit_expr_map(self, i);
268 }
269
270 fn visit_expr_match(&mut self, i: &ExprMatch) {
274 visit_expr_match(self, i);
275 }
276
277 fn visit_expr_not(&mut self, i: &ExprNot) {
281 visit_expr_not(self, i);
282 }
283
284 fn visit_expr_or(&mut self, i: &ExprOr) {
288 visit_expr_or(self, i);
289 }
290
291 fn visit_expr_list(&mut self, i: &ExprList) {
295 visit_expr_list(self, i);
296 }
297
298 fn visit_expr_record(&mut self, i: &ExprRecord) {
302 visit_expr_record(self, i);
303 }
304
305 fn visit_expr_reference(&mut self, i: &ExprReference) {
309 visit_expr_reference(self, i);
310 }
311
312 fn visit_expr_set(&mut self, i: &ExprSet) {
316 visit_expr_set(self, i);
317 }
318
319 fn visit_expr_set_op(&mut self, i: &ExprSetOp) {
323 visit_expr_set_op(self, i);
324 }
325
326 fn visit_expr_starts_with(&mut self, i: &ExprStartsWith) {
330 visit_expr_starts_with(self, i);
331 }
332
333 fn visit_expr_stmt(&mut self, i: &ExprStmt) {
337 visit_expr_stmt(self, i);
338 }
339
340 fn visit_filter(&mut self, i: &Filter) {
344 visit_filter(self, i);
345 }
346
347 fn visit_condition(&mut self, i: &Condition) {
351 visit_condition(self, i);
352 }
353
354 fn visit_expr_project(&mut self, i: &ExprProject) {
358 visit_expr_project(self, i);
359 }
360
361 fn visit_insert_target(&mut self, i: &InsertTarget) {
365 visit_insert_target(self, i);
366 }
367
368 fn visit_join(&mut self, i: &Join) {
372 visit_join(self, i);
373 }
374
375 fn visit_limit(&mut self, i: &Limit) {
379 visit_limit(self, i);
380 }
381
382 fn visit_limit_cursor(&mut self, i: &LimitCursor) {
386 visit_limit_cursor(self, i);
387 }
388
389 fn visit_limit_offset(&mut self, i: &LimitOffset) {
393 visit_limit_offset(self, i);
394 }
395
396 fn visit_order_by(&mut self, i: &OrderBy) {
400 visit_order_by(self, i);
401 }
402
403 fn visit_order_by_expr(&mut self, i: &OrderByExpr) {
407 visit_order_by_expr(self, i);
408 }
409
410 fn visit_path(&mut self, i: &Path) {
414 visit_path(self, i);
415 }
416
417 fn visit_include(&mut self, i: &Include) {
421 visit_include(self, i);
422 }
423
424 fn visit_projection(&mut self, i: &Projection) {
428 visit_projection(self, i);
429 }
430
431 fn visit_returning(&mut self, i: &Returning) {
435 visit_returning(self, i);
436 }
437
438 fn visit_source(&mut self, i: &Source) {
442 visit_source(self, i);
443 }
444
445 fn visit_source_model(&mut self, i: &SourceModel) {
449 visit_source_model(self, i);
450 }
451
452 fn visit_source_table(&mut self, i: &SourceTable) {
456 visit_source_table(self, i);
457 }
458
459 fn visit_source_table_id(&mut self, i: &SourceTableId) {
463 visit_source_table_id(self, i);
464 }
465
466 fn visit_stmt(&mut self, i: &Statement) {
470 visit_stmt(self, i);
471 }
472
473 fn visit_stmt_delete(&mut self, i: &Delete) {
477 visit_stmt_delete(self, i);
478 }
479
480 fn visit_stmt_insert(&mut self, i: &Insert) {
484 visit_stmt_insert(self, i);
485 }
486
487 fn visit_stmt_query(&mut self, i: &Query) {
491 visit_stmt_query(self, i);
492 }
493
494 fn visit_stmt_select(&mut self, i: &Select) {
498 visit_stmt_select(self, i);
499 }
500
501 fn visit_stmt_update(&mut self, i: &Update) {
505 visit_stmt_update(self, i);
506 }
507
508 fn visit_table_derived(&mut self, i: &TableDerived) {
512 visit_table_derived(self, i);
513 }
514
515 fn visit_table_ref(&mut self, i: &TableRef) {
519 visit_table_ref(self, i);
520 }
521
522 fn visit_table_factor(&mut self, i: &TableFactor) {
526 visit_table_factor(self, i);
527 }
528
529 fn visit_table_with_joins(&mut self, i: &TableWithJoins) {
533 visit_table_with_joins(self, i);
534 }
535
536 fn visit_type(&mut self, i: &Type) {
540 visit_type(self, i);
541 }
542
543 fn visit_update_target(&mut self, i: &UpdateTarget) {
547 visit_update_target(self, i);
548 }
549
550 fn visit_value(&mut self, i: &Value) {
554 visit_value(self, i);
555 }
556
557 fn visit_value_record(&mut self, i: &ValueRecord) {
561 visit_value_record(self, i);
562 }
563
564 fn visit_values(&mut self, i: &Values) {
568 visit_values(self, i);
569 }
570
571 fn visit_with(&mut self, i: &With) {
575 visit_with(self, i);
576 }
577}
578
579impl<V: Visit> Visit for &mut V {
580 fn visit_assignment(&mut self, i: &Assignment) {
581 Visit::visit_assignment(&mut **self, i);
582 }
583
584 fn visit_assignments(&mut self, i: &Assignments) {
585 Visit::visit_assignments(&mut **self, i);
586 }
587
588 fn visit_association(&mut self, i: &Association) {
589 Visit::visit_association(&mut **self, i);
590 }
591
592 fn visit_cte(&mut self, i: &Cte) {
593 Visit::visit_cte(&mut **self, i);
594 }
595
596 fn visit_expr(&mut self, i: &Expr) {
597 Visit::visit_expr(&mut **self, i);
598 }
599
600 fn visit_expr_and(&mut self, i: &ExprAnd) {
601 Visit::visit_expr_and(&mut **self, i);
602 }
603
604 fn visit_expr_arg(&mut self, i: &ExprArg) {
605 Visit::visit_expr_arg(&mut **self, i);
606 }
607
608 fn visit_expr_any_op(&mut self, i: &ExprAnyOp) {
609 Visit::visit_expr_any_op(&mut **self, i);
610 }
611
612 fn visit_expr_all_op(&mut self, i: &ExprAllOp) {
613 Visit::visit_expr_all_op(&mut **self, i);
614 }
615
616 fn visit_expr_between(&mut self, i: &ExprBetween) {
617 Visit::visit_expr_between(&mut **self, i);
618 }
619
620 fn visit_expr_binary_op(&mut self, i: &ExprBinaryOp) {
621 Visit::visit_expr_binary_op(&mut **self, i);
622 }
623
624 fn visit_expr_cast(&mut self, i: &ExprCast) {
625 Visit::visit_expr_cast(&mut **self, i);
626 }
627
628 fn visit_expr_column(&mut self, i: &ExprColumn) {
629 Visit::visit_expr_column(&mut **self, i);
630 }
631
632 fn visit_expr_default(&mut self) {
633 Visit::visit_expr_default(&mut **self);
634 }
635
636 fn visit_expr_error(&mut self, i: &ExprError) {
637 Visit::visit_expr_error(&mut **self, i);
638 }
639
640 fn visit_expr_exists(&mut self, i: &ExprExists) {
641 Visit::visit_expr_exists(&mut **self, i);
642 }
643
644 fn visit_expr_func(&mut self, i: &ExprFunc) {
645 Visit::visit_expr_func(&mut **self, i);
646 }
647
648 fn visit_expr_func_count(&mut self, i: &FuncCount) {
649 Visit::visit_expr_func_count(&mut **self, i);
650 }
651
652 fn visit_expr_func_json_extract(&mut self, i: &FuncJsonExtract) {
653 Visit::visit_expr_func_json_extract(&mut **self, i);
654 }
655
656 fn visit_expr_in_list(&mut self, i: &ExprInList) {
657 Visit::visit_expr_in_list(&mut **self, i);
658 }
659
660 fn visit_expr_in_subquery(&mut self, i: &ExprInSubquery) {
661 Visit::visit_expr_in_subquery(&mut **self, i);
662 }
663
664 fn visit_expr_incoming(&mut self, i: &ExprIncoming) {
665 Visit::visit_expr_incoming(&mut **self, i);
666 }
667
668 fn visit_expr_intersects(&mut self, i: &ExprIntersects) {
669 Visit::visit_expr_intersects(&mut **self, i);
670 }
671
672 fn visit_expr_is_null(&mut self, i: &ExprIsNull) {
673 Visit::visit_expr_is_null(&mut **self, i);
674 }
675
676 fn visit_expr_is_superset(&mut self, i: &ExprIsSuperset) {
677 Visit::visit_expr_is_superset(&mut **self, i);
678 }
679
680 fn visit_expr_is_variant(&mut self, i: &ExprIsVariant) {
681 Visit::visit_expr_is_variant(&mut **self, i);
682 }
683
684 fn visit_expr_length(&mut self, i: &ExprLength) {
685 Visit::visit_expr_length(&mut **self, i);
686 }
687
688 fn visit_expr_let(&mut self, i: &ExprLet) {
689 Visit::visit_expr_let(&mut **self, i);
690 }
691
692 fn visit_expr_like(&mut self, i: &ExprLike) {
693 Visit::visit_expr_like(&mut **self, i);
694 }
695
696 fn visit_expr_map(&mut self, i: &ExprMap) {
697 Visit::visit_expr_map(&mut **self, i);
698 }
699
700 fn visit_expr_match(&mut self, i: &ExprMatch) {
701 Visit::visit_expr_match(&mut **self, i);
702 }
703
704 fn visit_expr_not(&mut self, i: &ExprNot) {
705 Visit::visit_expr_not(&mut **self, i);
706 }
707
708 fn visit_expr_or(&mut self, i: &ExprOr) {
709 Visit::visit_expr_or(&mut **self, i);
710 }
711
712 fn visit_expr_list(&mut self, i: &ExprList) {
713 Visit::visit_expr_list(&mut **self, i);
714 }
715
716 fn visit_expr_record(&mut self, i: &ExprRecord) {
717 Visit::visit_expr_record(&mut **self, i);
718 }
719
720 fn visit_expr_reference(&mut self, i: &ExprReference) {
721 Visit::visit_expr_reference(&mut **self, i);
722 }
723
724 fn visit_expr_set(&mut self, i: &ExprSet) {
725 Visit::visit_expr_set(&mut **self, i);
726 }
727
728 fn visit_expr_set_op(&mut self, i: &ExprSetOp) {
729 Visit::visit_expr_set_op(&mut **self, i);
730 }
731
732 fn visit_expr_starts_with(&mut self, i: &ExprStartsWith) {
733 Visit::visit_expr_starts_with(&mut **self, i);
734 }
735
736 fn visit_expr_stmt(&mut self, i: &ExprStmt) {
737 Visit::visit_expr_stmt(&mut **self, i);
738 }
739
740 fn visit_filter(&mut self, i: &Filter) {
741 Visit::visit_filter(&mut **self, i);
742 }
743
744 fn visit_condition(&mut self, i: &Condition) {
745 Visit::visit_condition(&mut **self, i);
746 }
747
748 fn visit_expr_project(&mut self, i: &ExprProject) {
749 Visit::visit_expr_project(&mut **self, i);
750 }
751
752 fn visit_insert_target(&mut self, i: &InsertTarget) {
753 Visit::visit_insert_target(&mut **self, i);
754 }
755
756 fn visit_join(&mut self, i: &Join) {
757 Visit::visit_join(&mut **self, i);
758 }
759
760 fn visit_limit(&mut self, i: &Limit) {
761 Visit::visit_limit(&mut **self, i);
762 }
763
764 fn visit_limit_cursor(&mut self, i: &LimitCursor) {
765 Visit::visit_limit_cursor(&mut **self, i);
766 }
767
768 fn visit_limit_offset(&mut self, i: &LimitOffset) {
769 Visit::visit_limit_offset(&mut **self, i);
770 }
771
772 fn visit_order_by(&mut self, i: &OrderBy) {
773 Visit::visit_order_by(&mut **self, i);
774 }
775
776 fn visit_order_by_expr(&mut self, i: &OrderByExpr) {
777 Visit::visit_order_by_expr(&mut **self, i);
778 }
779
780 fn visit_path(&mut self, i: &Path) {
781 Visit::visit_path(&mut **self, i);
782 }
783
784 fn visit_include(&mut self, i: &Include) {
785 Visit::visit_include(&mut **self, i);
786 }
787
788 fn visit_projection(&mut self, i: &Projection) {
789 Visit::visit_projection(&mut **self, i);
790 }
791
792 fn visit_returning(&mut self, i: &Returning) {
793 Visit::visit_returning(&mut **self, i);
794 }
795
796 fn visit_source(&mut self, i: &Source) {
797 Visit::visit_source(&mut **self, i);
798 }
799
800 fn visit_source_model(&mut self, i: &SourceModel) {
801 Visit::visit_source_model(&mut **self, i);
802 }
803
804 fn visit_source_table(&mut self, i: &SourceTable) {
805 Visit::visit_source_table(&mut **self, i);
806 }
807
808 fn visit_source_table_id(&mut self, i: &SourceTableId) {
809 Visit::visit_source_table_id(&mut **self, i);
810 }
811
812 fn visit_stmt(&mut self, i: &Statement) {
813 Visit::visit_stmt(&mut **self, i);
814 }
815
816 fn visit_stmt_delete(&mut self, i: &Delete) {
817 Visit::visit_stmt_delete(&mut **self, i);
818 }
819
820 fn visit_stmt_insert(&mut self, i: &Insert) {
821 Visit::visit_stmt_insert(&mut **self, i);
822 }
823
824 fn visit_stmt_query(&mut self, i: &Query) {
825 Visit::visit_stmt_query(&mut **self, i);
826 }
827
828 fn visit_stmt_select(&mut self, i: &Select) {
829 Visit::visit_stmt_select(&mut **self, i);
830 }
831
832 fn visit_stmt_update(&mut self, i: &Update) {
833 Visit::visit_stmt_update(&mut **self, i);
834 }
835
836 fn visit_table_derived(&mut self, i: &TableDerived) {
837 Visit::visit_table_derived(&mut **self, i);
838 }
839
840 fn visit_table_ref(&mut self, i: &TableRef) {
841 Visit::visit_table_ref(&mut **self, i);
842 }
843
844 fn visit_table_factor(&mut self, i: &TableFactor) {
845 Visit::visit_table_factor(&mut **self, i);
846 }
847
848 fn visit_table_with_joins(&mut self, i: &TableWithJoins) {
849 Visit::visit_table_with_joins(&mut **self, i);
850 }
851
852 fn visit_type(&mut self, i: &Type) {
853 Visit::visit_type(&mut **self, i);
854 }
855
856 fn visit_update_target(&mut self, i: &UpdateTarget) {
857 Visit::visit_update_target(&mut **self, i);
858 }
859
860 fn visit_value(&mut self, i: &Value) {
861 Visit::visit_value(&mut **self, i);
862 }
863
864 fn visit_value_record(&mut self, i: &ValueRecord) {
865 Visit::visit_value_record(&mut **self, i);
866 }
867
868 fn visit_values(&mut self, i: &Values) {
869 Visit::visit_values(&mut **self, i);
870 }
871
872 fn visit_with(&mut self, i: &With) {
873 Visit::visit_with(&mut **self, i);
874 }
875}
876
877pub fn visit_assignment<V>(v: &mut V, node: &Assignment)
879where
880 V: Visit + ?Sized,
881{
882 match node {
883 Assignment::Set(expr)
884 | Assignment::Insert(expr)
885 | Assignment::Remove(expr)
886 | Assignment::Append(expr)
887 | Assignment::RemoveAt(expr)
888 | Assignment::Add(expr)
889 | Assignment::Subtract(expr) => {
890 v.visit_expr(expr);
891 }
892 Assignment::Pop => {}
893 Assignment::Batch(entries) => {
894 for entry in entries {
895 visit_assignment(v, entry);
896 }
897 }
898 }
899}
900
901pub fn visit_assignments<V>(v: &mut V, node: &Assignments)
903where
904 V: Visit + ?Sized,
905{
906 for (_, assignment) in node.iter() {
907 v.visit_assignment(assignment);
908 }
909}
910
911pub fn visit_association<V>(v: &mut V, node: &Association)
913where
914 V: Visit + ?Sized,
915{
916 v.visit_stmt_query(&node.source);
917}
918
919pub fn visit_cte<V>(v: &mut V, node: &Cte)
921where
922 V: Visit + ?Sized,
923{
924 v.visit_stmt_query(&node.query);
925}
926
927pub fn visit_expr<V>(v: &mut V, node: &Expr)
929where
930 V: Visit + ?Sized,
931{
932 match node {
933 Expr::AllOp(expr) => v.visit_expr_all_op(expr),
934 Expr::And(expr) => v.visit_expr_and(expr),
935 Expr::Any(expr) => v.visit_expr_any(expr),
936 Expr::AnyOp(expr) => v.visit_expr_any_op(expr),
937 Expr::Arg(expr) => v.visit_expr_arg(expr),
938 Expr::Between(expr) => v.visit_expr_between(expr),
939 Expr::BinaryOp(expr) => v.visit_expr_binary_op(expr),
940 Expr::Cast(expr) => v.visit_expr_cast(expr),
941 Expr::Default => v.visit_expr_default(),
942 Expr::Error(expr) => v.visit_expr_error(expr),
943 Expr::Exists(expr) => v.visit_expr_exists(expr),
944 Expr::Func(expr) => v.visit_expr_func(expr),
945 Expr::Ident(_) => {}
946 Expr::InList(expr) => v.visit_expr_in_list(expr),
947 Expr::InSubquery(expr) => v.visit_expr_in_subquery(expr),
948 Expr::Incoming(expr) => v.visit_expr_incoming(expr),
949 Expr::Intersects(expr) => v.visit_expr_intersects(expr),
950 Expr::IsNull(expr) => v.visit_expr_is_null(expr),
951 Expr::IsSuperset(expr) => v.visit_expr_is_superset(expr),
952 Expr::IsVariant(expr) => v.visit_expr_is_variant(expr),
953 Expr::Length(expr) => v.visit_expr_length(expr),
954 Expr::Let(expr) => v.visit_expr_let(expr),
955 Expr::Like(expr) => v.visit_expr_like(expr),
956 Expr::Map(expr) => v.visit_expr_map(expr),
957 Expr::Match(expr) => v.visit_expr_match(expr),
958 Expr::Not(expr) => v.visit_expr_not(expr),
959 Expr::Or(expr) => v.visit_expr_or(expr),
960 Expr::Project(expr) => v.visit_expr_project(expr),
961 Expr::Record(expr) => v.visit_expr_record(expr),
962 Expr::Reference(expr) => v.visit_expr_reference(expr),
963 Expr::List(expr) => v.visit_expr_list(expr),
964 Expr::StartsWith(expr) => v.visit_expr_starts_with(expr),
965 Expr::Stmt(expr) => v.visit_expr_stmt(expr),
966 Expr::Value(expr) => v.visit_value(expr),
967 Expr::Static(expr) => v.visit_value(expr),
968 }
969}
970
971pub fn visit_expr_and<V>(v: &mut V, node: &ExprAnd)
973where
974 V: Visit + ?Sized,
975{
976 for expr in node {
977 v.visit_expr(expr);
978 }
979}
980
981pub fn visit_expr_any<V>(v: &mut V, node: &ExprAny)
983where
984 V: Visit + ?Sized,
985{
986 v.visit_expr(&node.expr);
987}
988
989pub fn visit_expr_arg<V>(v: &mut V, node: &ExprArg)
991where
992 V: Visit + ?Sized,
993{
994}
995
996pub fn visit_expr_binary_op<V>(v: &mut V, node: &ExprBinaryOp)
998where
999 V: Visit + ?Sized,
1000{
1001 v.visit_expr(&node.lhs);
1002 v.visit_expr(&node.rhs);
1003}
1004
1005pub fn visit_expr_any_op<V>(v: &mut V, node: &ExprAnyOp)
1007where
1008 V: Visit + ?Sized,
1009{
1010 v.visit_expr(&node.lhs);
1011 v.visit_expr(&node.rhs);
1012}
1013
1014pub fn visit_expr_all_op<V>(v: &mut V, node: &ExprAllOp)
1016where
1017 V: Visit + ?Sized,
1018{
1019 v.visit_expr(&node.lhs);
1020 v.visit_expr(&node.rhs);
1021}
1022
1023pub fn visit_expr_cast<V>(v: &mut V, node: &ExprCast)
1025where
1026 V: Visit + ?Sized,
1027{
1028 v.visit_expr(&node.expr);
1029 v.visit_type(&node.ty);
1030}
1031
1032pub fn visit_expr_column<V>(v: &mut V, node: &ExprColumn)
1034where
1035 V: Visit + ?Sized,
1036{
1037}
1038
1039pub fn visit_expr_default<V>(v: &mut V)
1041where
1042 V: Visit + ?Sized,
1043{
1044}
1045
1046pub fn visit_expr_error<V>(v: &mut V, node: &ExprError)
1048where
1049 V: Visit + ?Sized,
1050{
1051 }
1053
1054pub fn visit_expr_exists<V>(v: &mut V, node: &ExprExists)
1056where
1057 V: Visit + ?Sized,
1058{
1059 v.visit_stmt_query(&node.subquery);
1060}
1061
1062pub fn visit_expr_func<V>(v: &mut V, node: &ExprFunc)
1064where
1065 V: Visit + ?Sized,
1066{
1067 match node {
1068 ExprFunc::Count(func) => v.visit_expr_func_count(func),
1069 ExprFunc::JsonExtract(func) => v.visit_expr_func_json_extract(func),
1070 ExprFunc::LastInsertId(func) => v.visit_expr_func_last_insert_id(func),
1071 }
1072}
1073
1074pub fn visit_expr_incoming<V>(_v: &mut V, _node: &ExprIncoming)
1076where
1077 V: Visit + ?Sized,
1078{
1079}
1080
1081pub fn visit_expr_func_json_extract<V>(v: &mut V, node: &FuncJsonExtract)
1083where
1084 V: Visit + ?Sized,
1085{
1086 v.visit_expr(&node.base);
1087}
1088
1089pub fn visit_expr_func_count<V>(v: &mut V, node: &FuncCount)
1091where
1092 V: Visit + ?Sized,
1093{
1094 if let Some(expr) = &node.arg {
1095 v.visit_expr(expr);
1096 }
1097
1098 if let Some(expr) = &node.filter {
1099 v.visit_expr(expr);
1100 }
1101}
1102
1103pub fn visit_expr_func_last_insert_id<V>(_v: &mut V, _node: &FuncLastInsertId)
1105where
1106 V: Visit + ?Sized,
1107{
1108 }
1110
1111pub fn visit_expr_between<V>(v: &mut V, node: &ExprBetween)
1113where
1114 V: Visit + ?Sized,
1115{
1116 v.visit_expr(&node.expr);
1117 v.visit_expr(&node.low);
1118 v.visit_expr(&node.high);
1119}
1120
1121pub fn visit_expr_in_list<V>(v: &mut V, node: &ExprInList)
1123where
1124 V: Visit + ?Sized,
1125{
1126 v.visit_expr(&node.expr);
1127 v.visit_expr(&node.list);
1128}
1129
1130pub fn visit_expr_in_subquery<V>(v: &mut V, node: &ExprInSubquery)
1132where
1133 V: Visit + ?Sized,
1134{
1135 v.visit_expr(&node.expr);
1136 v.visit_stmt_query(&node.query);
1137}
1138
1139pub fn visit_expr_intersects<V>(v: &mut V, node: &ExprIntersects)
1141where
1142 V: Visit + ?Sized,
1143{
1144 v.visit_expr(&node.lhs);
1145 v.visit_expr(&node.rhs);
1146}
1147
1148pub fn visit_expr_is_null<V>(v: &mut V, node: &ExprIsNull)
1150where
1151 V: Visit + ?Sized,
1152{
1153 v.visit_expr(&node.expr);
1154}
1155
1156pub fn visit_expr_is_superset<V>(v: &mut V, node: &ExprIsSuperset)
1158where
1159 V: Visit + ?Sized,
1160{
1161 v.visit_expr(&node.lhs);
1162 v.visit_expr(&node.rhs);
1163}
1164
1165pub fn visit_expr_length<V>(v: &mut V, node: &ExprLength)
1167where
1168 V: Visit + ?Sized,
1169{
1170 v.visit_expr(&node.expr);
1171}
1172
1173pub fn visit_expr_is_variant<V>(v: &mut V, node: &ExprIsVariant)
1175where
1176 V: Visit + ?Sized,
1177{
1178 v.visit_expr(&node.expr);
1179}
1180
1181pub fn visit_expr_let<V>(v: &mut V, node: &ExprLet)
1183where
1184 V: Visit + ?Sized,
1185{
1186 for binding in &node.bindings {
1187 v.visit_expr(binding);
1188 }
1189 v.visit_expr(&node.body);
1190}
1191
1192pub fn visit_expr_like<V>(v: &mut V, node: &ExprLike)
1194where
1195 V: Visit + ?Sized,
1196{
1197 v.visit_expr(&node.expr);
1198 v.visit_expr(&node.pattern);
1199}
1200
1201pub fn visit_expr_map<V>(v: &mut V, node: &ExprMap)
1203where
1204 V: Visit + ?Sized,
1205{
1206 v.visit_expr(&node.base);
1207 v.visit_expr(&node.map);
1208}
1209
1210pub fn visit_expr_match<V>(v: &mut V, node: &ExprMatch)
1212where
1213 V: Visit + ?Sized,
1214{
1215 v.visit_expr(&node.subject);
1216 for arm in &node.arms {
1217 v.visit_expr(&arm.expr);
1218 }
1219 v.visit_expr(&node.else_expr);
1220}
1221
1222pub fn visit_expr_not<V>(v: &mut V, node: &ExprNot)
1224where
1225 V: Visit + ?Sized,
1226{
1227 v.visit_expr(&node.expr);
1228}
1229
1230pub fn visit_expr_or<V>(v: &mut V, node: &ExprOr)
1232where
1233 V: Visit + ?Sized,
1234{
1235 for expr in node {
1236 v.visit_expr(expr);
1237 }
1238}
1239
1240pub fn visit_expr_list<V>(v: &mut V, node: &ExprList)
1242where
1243 V: Visit + ?Sized,
1244{
1245 for expr in &node.items {
1246 v.visit_expr(expr);
1247 }
1248}
1249
1250pub fn visit_expr_record<V>(v: &mut V, node: &ExprRecord)
1252where
1253 V: Visit + ?Sized,
1254{
1255 for expr in &**node {
1256 v.visit_expr(expr);
1257 }
1258}
1259
1260pub fn visit_expr_reference<V>(v: &mut V, node: &ExprReference)
1262where
1263 V: Visit + ?Sized,
1264{
1265 match node {
1266 ExprReference::Model { .. } => {}
1267 ExprReference::Field { .. } => {}
1268 ExprReference::Column(expr_column) => v.visit_expr_column(expr_column),
1269 }
1270}
1271
1272pub fn visit_expr_set<V>(v: &mut V, node: &ExprSet)
1274where
1275 V: Visit + ?Sized,
1276{
1277 match node {
1278 ExprSet::Select(expr) => v.visit_stmt_select(expr),
1279 ExprSet::SetOp(expr) => v.visit_expr_set_op(expr),
1280 ExprSet::Update(expr) => v.visit_stmt_update(expr),
1281 ExprSet::Delete(expr) => v.visit_stmt_delete(expr),
1282 ExprSet::Values(expr) => v.visit_values(expr),
1283 ExprSet::Insert(expr) => v.visit_stmt_insert(expr),
1284 }
1285}
1286
1287pub fn visit_expr_set_op<V>(v: &mut V, node: &ExprSetOp)
1289where
1290 V: Visit + ?Sized,
1291{
1292 for operand in &node.operands {
1293 v.visit_expr_set(operand);
1294 }
1295}
1296
1297pub fn visit_expr_starts_with<V>(v: &mut V, node: &ExprStartsWith)
1299where
1300 V: Visit + ?Sized,
1301{
1302 v.visit_expr(&node.expr);
1303 v.visit_expr(&node.prefix);
1304}
1305
1306pub fn visit_expr_stmt<V>(v: &mut V, node: &ExprStmt)
1308where
1309 V: Visit + ?Sized,
1310{
1311 v.visit_stmt(&node.stmt);
1312}
1313
1314pub fn visit_expr_project<V>(v: &mut V, node: &ExprProject)
1316where
1317 V: Visit + ?Sized,
1318{
1319 v.visit_expr(&node.base);
1320 v.visit_projection(&node.projection);
1321}
1322
1323pub fn visit_filter<V>(v: &mut V, node: &Filter)
1325where
1326 V: Visit + ?Sized,
1327{
1328 if let Some(expr) = &node.expr {
1329 v.visit_expr(expr);
1330 }
1331}
1332
1333pub fn visit_condition<V>(v: &mut V, node: &Condition)
1335where
1336 V: Visit + ?Sized,
1337{
1338 if let Some(expr) = &node.expr {
1339 v.visit_expr(expr);
1340 }
1341}
1342
1343pub fn visit_insert_target<V>(v: &mut V, node: &InsertTarget)
1345where
1346 V: Visit + ?Sized,
1347{
1348 if let InsertTarget::Scope(stmt) = node {
1349 v.visit_stmt_query(stmt);
1350 }
1351}
1352
1353pub fn visit_join<V>(v: &mut V, node: &Join)
1355where
1356 V: Visit + ?Sized,
1357{
1358 v.visit_source_table_id(&node.table);
1359 match &node.constraint {
1360 JoinOp::Inner(expr) | JoinOp::Left(expr) => v.visit_expr(expr),
1361 }
1362}
1363
1364pub fn visit_limit<V>(v: &mut V, node: &Limit)
1366where
1367 V: Visit + ?Sized,
1368{
1369 match node {
1370 Limit::Cursor(cursor) => v.visit_limit_cursor(cursor),
1371 Limit::Offset(offset) => v.visit_limit_offset(offset),
1372 }
1373}
1374
1375pub fn visit_limit_cursor<V>(v: &mut V, node: &LimitCursor)
1377where
1378 V: Visit + ?Sized,
1379{
1380 v.visit_expr(&node.page_size);
1381 if let Some(after) = &node.after {
1382 v.visit_expr(after);
1383 }
1384}
1385
1386pub fn visit_limit_offset<V>(v: &mut V, node: &LimitOffset)
1388where
1389 V: Visit + ?Sized,
1390{
1391 v.visit_expr(&node.limit);
1392 if let Some(offset) = &node.offset {
1393 v.visit_expr(offset);
1394 }
1395}
1396
1397pub fn visit_order_by<V>(v: &mut V, node: &OrderBy)
1399where
1400 V: Visit + ?Sized,
1401{
1402 for expr in &node.exprs {
1403 v.visit_order_by_expr(expr);
1404 }
1405}
1406
1407pub fn visit_order_by_expr<V>(v: &mut V, node: &OrderByExpr)
1409where
1410 V: Visit + ?Sized,
1411{
1412 v.visit_expr(&node.expr);
1413}
1414
1415pub fn visit_path<V>(v: &mut V, node: &Path)
1417where
1418 V: Visit + ?Sized,
1419{
1420 v.visit_projection(&node.projection);
1421}
1422
1423pub fn visit_projection<V>(v: &mut V, node: &Projection)
1425where
1426 V: Visit + ?Sized,
1427{
1428}
1429
1430pub fn visit_returning<V>(v: &mut V, node: &Returning)
1432where
1433 V: Visit + ?Sized,
1434{
1435 match node {
1436 Returning::Model { include } => {
1437 for inc in include {
1438 v.visit_include(inc);
1439 }
1440 }
1441 Returning::Changed => {}
1442 Returning::Project(expr) => v.visit_expr(expr),
1443 Returning::Expr(expr) => v.visit_expr(expr),
1444 }
1445}
1446
1447pub fn visit_include<V>(v: &mut V, node: &Include)
1449where
1450 V: Visit + ?Sized,
1451{
1452 v.visit_path(&node.path);
1453 if let Some(query) = &node.query {
1454 v.visit_stmt_query(query);
1455 }
1456}
1457
1458pub fn visit_source<V>(v: &mut V, node: &Source)
1460where
1461 V: Visit + ?Sized,
1462{
1463 match node {
1464 Source::Model(source_model) => v.visit_source_model(source_model),
1465 Source::Table(source_table) => v.visit_source_table(source_table),
1466 }
1467}
1468
1469pub fn visit_source_model<V>(v: &mut V, node: &SourceModel)
1471where
1472 V: Visit + ?Sized,
1473{
1474 if let Some(association) = &node.via {
1475 v.visit_association(association);
1476 }
1477}
1478
1479pub fn visit_source_table<V>(v: &mut V, node: &SourceTable)
1481where
1482 V: Visit + ?Sized,
1483{
1484 for table_ref in &node.tables {
1485 v.visit_table_ref(table_ref);
1486 }
1487 for table_with_joins in &node.from {
1488 v.visit_table_with_joins(table_with_joins);
1489 }
1490}
1491
1492pub fn visit_source_table_id<V>(v: &mut V, node: &SourceTableId)
1494where
1495 V: Visit + ?Sized,
1496{
1497 }
1499
1500pub fn visit_table_factor<V>(v: &mut V, node: &TableFactor)
1502where
1503 V: Visit + ?Sized,
1504{
1505 match node {
1506 TableFactor::Table(table_id) => v.visit_source_table_id(table_id),
1507 }
1508}
1509
1510pub fn visit_stmt<V>(v: &mut V, node: &Statement)
1512where
1513 V: Visit + ?Sized,
1514{
1515 match node {
1516 Statement::Delete(stmt) => v.visit_stmt_delete(stmt),
1517 Statement::Insert(stmt) => v.visit_stmt_insert(stmt),
1518 Statement::Query(stmt) => v.visit_stmt_query(stmt),
1519 Statement::Update(stmt) => v.visit_stmt_update(stmt),
1520 }
1521}
1522
1523pub fn visit_stmt_delete<V>(v: &mut V, node: &Delete)
1525where
1526 V: Visit + ?Sized,
1527{
1528 v.visit_source(&node.from);
1529 v.visit_filter(&node.filter);
1530 v.visit_condition(&node.condition);
1531
1532 if let Some(returning) = &node.returning {
1533 v.visit_returning(returning);
1534 }
1535}
1536
1537pub fn visit_stmt_insert<V>(v: &mut V, node: &Insert)
1539where
1540 V: Visit + ?Sized,
1541{
1542 if let InsertTarget::Scope(scope) = &node.target {
1543 v.visit_stmt_query(scope);
1544 }
1545 v.visit_stmt_query(&node.source);
1546
1547 if let Some(upsert) = &node.upsert {
1548 v.visit_assignments(&upsert.shared);
1549 v.visit_assignments(&upsert.defaults);
1550 v.visit_assignments(&upsert.update_defaults);
1551 v.visit_assignments(&upsert.create);
1552 v.visit_assignments(&upsert.update);
1553 }
1554
1555 if let Some(returning) = &node.returning {
1556 v.visit_returning(returning);
1557 }
1558}
1559
1560pub fn visit_stmt_query<V>(v: &mut V, node: &Query)
1562where
1563 V: Visit + ?Sized,
1564{
1565 if let Some(with) = &node.with {
1566 v.visit_with(with);
1567 }
1568
1569 v.visit_expr_set(&node.body);
1570
1571 if let Some(order_by) = &node.order_by {
1572 v.visit_order_by(order_by);
1573 }
1574
1575 if let Some(limit) = &node.limit {
1576 v.visit_limit(limit);
1577 }
1578}
1579
1580pub fn visit_stmt_select<V>(v: &mut V, node: &Select)
1582where
1583 V: Visit + ?Sized,
1584{
1585 v.visit_source(&node.source);
1586 v.visit_filter(&node.filter);
1587 v.visit_returning(&node.returning);
1588}
1589
1590pub fn visit_stmt_update<V>(v: &mut V, node: &Update)
1592where
1593 V: Visit + ?Sized,
1594{
1595 v.visit_update_target(&node.target);
1596 v.visit_assignments(&node.assignments);
1597 v.visit_filter(&node.filter);
1598 v.visit_condition(&node.condition);
1599}
1600
1601pub fn visit_table_derived<V>(v: &mut V, node: &TableDerived)
1603where
1604 V: Visit + ?Sized,
1605{
1606 v.visit_stmt_query(&node.subquery);
1607}
1608
1609pub fn visit_table_ref<V>(v: &mut V, node: &TableRef)
1611where
1612 V: Visit + ?Sized,
1613{
1614 match node {
1615 TableRef::Cte { .. } => {}
1616 TableRef::Derived(table_derived) => v.visit_table_derived(table_derived),
1617 TableRef::Table(_) => {}
1618 TableRef::Arg(expr_arg) => v.visit_expr_arg(expr_arg),
1619 }
1620}
1621
1622pub fn visit_table_with_joins<V>(v: &mut V, node: &TableWithJoins)
1624where
1625 V: Visit + ?Sized,
1626{
1627 v.visit_table_factor(&node.relation);
1628 for join in &node.joins {
1629 v.visit_join(join);
1630 }
1631}
1632
1633pub fn visit_type<V>(v: &mut V, node: &Type)
1635where
1636 V: Visit + ?Sized,
1637{
1638 }
1640
1641pub fn visit_update_target<V>(v: &mut V, node: &UpdateTarget)
1643where
1644 V: Visit + ?Sized,
1645{
1646 if let UpdateTarget::Query(query) = node {
1647 v.visit_stmt_query(query)
1648 }
1649}
1650
1651pub fn visit_value<V>(v: &mut V, node: &Value)
1653where
1654 V: Visit + ?Sized,
1655{
1656 if let Value::Record(node) = node {
1657 v.visit_value_record(node)
1658 }
1659}
1660
1661pub fn visit_value_record<V>(v: &mut V, node: &ValueRecord)
1663where
1664 V: Visit + ?Sized,
1665{
1666 for value in node.iter() {
1667 v.visit_value(value);
1668 }
1669}
1670
1671pub fn visit_values<V>(v: &mut V, node: &Values)
1673where
1674 V: Visit + ?Sized,
1675{
1676 for expr in &node.rows {
1677 v.visit_expr(expr);
1678 }
1679}
1680
1681pub fn visit_with<V>(v: &mut V, node: &With)
1683where
1684 V: Visit + ?Sized,
1685{
1686 for cte in &node.ctes {
1687 v.visit_cte(cte);
1688 }
1689}
1690
1691pub fn for_each_expr<F>(node: &impl Node, f: F)
1696where
1697 F: FnMut(&Expr),
1698{
1699 struct ForEach<F> {
1700 f: F,
1701 }
1702
1703 impl<F> Visit for ForEach<F>
1704 where
1705 F: FnMut(&Expr),
1706 {
1707 fn visit_expr(&mut self, node: &Expr) {
1708 visit_expr(self, node);
1709 (self.f)(node);
1710 }
1711 }
1712
1713 node.visit(ForEach { f });
1714}