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 Visit {
37 fn visit<N: Node>(&mut self, i: &N)
39 where
40 Self: Sized,
41 {
42 i.visit(self);
43 }
44
45 fn visit_assignment(&mut self, i: &Assignment) {
49 visit_assignment(self, i);
50 }
51
52 fn visit_assignments(&mut self, i: &Assignments) {
56 visit_assignments(self, i);
57 }
58
59 fn visit_association(&mut self, i: &Association) {
63 visit_association(self, i);
64 }
65
66 fn visit_cte(&mut self, i: &Cte) {
70 visit_cte(self, i);
71 }
72
73 fn visit_expr(&mut self, i: &Expr) {
77 visit_expr(self, i);
78 }
79
80 fn visit_expr_and(&mut self, i: &ExprAnd) {
84 visit_expr_and(self, i);
85 }
86
87 fn visit_expr_any(&mut self, i: &ExprAny) {
91 visit_expr_any(self, i);
92 }
93
94 fn visit_expr_arg(&mut self, i: &ExprArg) {
98 visit_expr_arg(self, i);
99 }
100
101 fn visit_expr_any_op(&mut self, i: &ExprAnyOp) {
105 visit_expr_any_op(self, i);
106 }
107
108 fn visit_expr_all_op(&mut self, i: &ExprAllOp) {
112 visit_expr_all_op(self, i);
113 }
114
115 fn visit_expr_binary_op(&mut self, i: &ExprBinaryOp) {
119 visit_expr_binary_op(self, i);
120 }
121
122 fn visit_expr_cast(&mut self, i: &ExprCast) {
126 visit_expr_cast(self, i);
127 }
128
129 fn visit_expr_column(&mut self, i: &ExprColumn) {
133 visit_expr_column(self, i);
134 }
135
136 fn visit_expr_default(&mut self) {
140 visit_expr_default(self);
141 }
142
143 fn visit_expr_error(&mut self, i: &ExprError) {
147 visit_expr_error(self, i);
148 }
149
150 fn visit_expr_exists(&mut self, i: &ExprExists) {
154 visit_expr_exists(self, i);
155 }
156
157 fn visit_expr_func(&mut self, i: &ExprFunc) {
161 visit_expr_func(self, i);
162 }
163
164 fn visit_expr_func_count(&mut self, i: &FuncCount) {
168 visit_expr_func_count(self, i);
169 }
170
171 fn visit_expr_func_last_insert_id(&mut self, i: &FuncLastInsertId) {
175 visit_expr_func_last_insert_id(self, i);
176 }
177
178 fn visit_expr_in_list(&mut self, i: &ExprInList) {
182 visit_expr_in_list(self, i);
183 }
184
185 fn visit_expr_in_subquery(&mut self, i: &ExprInSubquery) {
189 visit_expr_in_subquery(self, i);
190 }
191
192 fn visit_expr_intersects(&mut self, i: &ExprIntersects) {
196 visit_expr_intersects(self, i);
197 }
198
199 fn visit_expr_is_null(&mut self, i: &ExprIsNull) {
203 visit_expr_is_null(self, i);
204 }
205
206 fn visit_expr_is_superset(&mut self, i: &ExprIsSuperset) {
210 visit_expr_is_superset(self, i);
211 }
212
213 fn visit_expr_is_variant(&mut self, i: &ExprIsVariant) {
217 visit_expr_is_variant(self, i);
218 }
219
220 fn visit_expr_length(&mut self, i: &ExprLength) {
224 visit_expr_length(self, i);
225 }
226
227 fn visit_expr_let(&mut self, i: &ExprLet) {
231 visit_expr_let(self, i);
232 }
233
234 fn visit_expr_like(&mut self, i: &ExprLike) {
238 visit_expr_like(self, i);
239 }
240
241 fn visit_expr_map(&mut self, i: &ExprMap) {
245 visit_expr_map(self, i);
246 }
247
248 fn visit_expr_match(&mut self, i: &ExprMatch) {
252 visit_expr_match(self, i);
253 }
254
255 fn visit_expr_not(&mut self, i: &ExprNot) {
259 visit_expr_not(self, i);
260 }
261
262 fn visit_expr_or(&mut self, i: &ExprOr) {
266 visit_expr_or(self, i);
267 }
268
269 fn visit_expr_list(&mut self, i: &ExprList) {
273 visit_expr_list(self, i);
274 }
275
276 fn visit_expr_record(&mut self, i: &ExprRecord) {
280 visit_expr_record(self, i);
281 }
282
283 fn visit_expr_reference(&mut self, i: &ExprReference) {
287 visit_expr_reference(self, i);
288 }
289
290 fn visit_expr_set(&mut self, i: &ExprSet) {
294 visit_expr_set(self, i);
295 }
296
297 fn visit_expr_set_op(&mut self, i: &ExprSetOp) {
301 visit_expr_set_op(self, i);
302 }
303
304 fn visit_expr_starts_with(&mut self, i: &ExprStartsWith) {
308 visit_expr_starts_with(self, i);
309 }
310
311 fn visit_expr_stmt(&mut self, i: &ExprStmt) {
315 visit_expr_stmt(self, i);
316 }
317
318 fn visit_filter(&mut self, i: &Filter) {
322 visit_filter(self, i);
323 }
324
325 fn visit_condition(&mut self, i: &Condition) {
329 visit_condition(self, i);
330 }
331
332 fn visit_expr_project(&mut self, i: &ExprProject) {
336 visit_expr_project(self, i);
337 }
338
339 fn visit_insert_target(&mut self, i: &InsertTarget) {
343 visit_insert_target(self, i);
344 }
345
346 fn visit_join(&mut self, i: &Join) {
350 visit_join(self, i);
351 }
352
353 fn visit_limit(&mut self, i: &Limit) {
357 visit_limit(self, i);
358 }
359
360 fn visit_limit_cursor(&mut self, i: &LimitCursor) {
364 visit_limit_cursor(self, i);
365 }
366
367 fn visit_limit_offset(&mut self, i: &LimitOffset) {
371 visit_limit_offset(self, i);
372 }
373
374 fn visit_order_by(&mut self, i: &OrderBy) {
378 visit_order_by(self, i);
379 }
380
381 fn visit_order_by_expr(&mut self, i: &OrderByExpr) {
385 visit_order_by_expr(self, i);
386 }
387
388 fn visit_path(&mut self, i: &Path) {
392 visit_path(self, i);
393 }
394
395 fn visit_projection(&mut self, i: &Projection) {
399 visit_projection(self, i);
400 }
401
402 fn visit_returning(&mut self, i: &Returning) {
406 visit_returning(self, i);
407 }
408
409 fn visit_source(&mut self, i: &Source) {
413 visit_source(self, i);
414 }
415
416 fn visit_source_model(&mut self, i: &SourceModel) {
420 visit_source_model(self, i);
421 }
422
423 fn visit_source_table(&mut self, i: &SourceTable) {
427 visit_source_table(self, i);
428 }
429
430 fn visit_source_table_id(&mut self, i: &SourceTableId) {
434 visit_source_table_id(self, i);
435 }
436
437 fn visit_stmt(&mut self, i: &Statement) {
441 visit_stmt(self, i);
442 }
443
444 fn visit_stmt_delete(&mut self, i: &Delete) {
448 visit_stmt_delete(self, i);
449 }
450
451 fn visit_stmt_insert(&mut self, i: &Insert) {
455 visit_stmt_insert(self, i);
456 }
457
458 fn visit_stmt_query(&mut self, i: &Query) {
462 visit_stmt_query(self, i);
463 }
464
465 fn visit_stmt_select(&mut self, i: &Select) {
469 visit_stmt_select(self, i);
470 }
471
472 fn visit_stmt_update(&mut self, i: &Update) {
476 visit_stmt_update(self, i);
477 }
478
479 fn visit_table_derived(&mut self, i: &TableDerived) {
483 visit_table_derived(self, i);
484 }
485
486 fn visit_table_ref(&mut self, i: &TableRef) {
490 visit_table_ref(self, i);
491 }
492
493 fn visit_table_factor(&mut self, i: &TableFactor) {
497 visit_table_factor(self, i);
498 }
499
500 fn visit_table_with_joins(&mut self, i: &TableWithJoins) {
504 visit_table_with_joins(self, i);
505 }
506
507 fn visit_type(&mut self, i: &Type) {
511 visit_type(self, i);
512 }
513
514 fn visit_update_target(&mut self, i: &UpdateTarget) {
518 visit_update_target(self, i);
519 }
520
521 fn visit_value(&mut self, i: &Value) {
525 visit_value(self, i);
526 }
527
528 fn visit_value_record(&mut self, i: &ValueRecord) {
532 visit_value_record(self, i);
533 }
534
535 fn visit_values(&mut self, i: &Values) {
539 visit_values(self, i);
540 }
541
542 fn visit_with(&mut self, i: &With) {
546 visit_with(self, i);
547 }
548}
549
550impl<V: Visit> Visit for &mut V {
551 fn visit_assignment(&mut self, i: &Assignment) {
552 Visit::visit_assignment(&mut **self, i);
553 }
554
555 fn visit_assignments(&mut self, i: &Assignments) {
556 Visit::visit_assignments(&mut **self, i);
557 }
558
559 fn visit_association(&mut self, i: &Association) {
560 Visit::visit_association(&mut **self, i);
561 }
562
563 fn visit_cte(&mut self, i: &Cte) {
564 Visit::visit_cte(&mut **self, i);
565 }
566
567 fn visit_expr(&mut self, i: &Expr) {
568 Visit::visit_expr(&mut **self, i);
569 }
570
571 fn visit_expr_and(&mut self, i: &ExprAnd) {
572 Visit::visit_expr_and(&mut **self, i);
573 }
574
575 fn visit_expr_arg(&mut self, i: &ExprArg) {
576 Visit::visit_expr_arg(&mut **self, i);
577 }
578
579 fn visit_expr_any_op(&mut self, i: &ExprAnyOp) {
580 Visit::visit_expr_any_op(&mut **self, i);
581 }
582
583 fn visit_expr_all_op(&mut self, i: &ExprAllOp) {
584 Visit::visit_expr_all_op(&mut **self, i);
585 }
586
587 fn visit_expr_binary_op(&mut self, i: &ExprBinaryOp) {
588 Visit::visit_expr_binary_op(&mut **self, i);
589 }
590
591 fn visit_expr_cast(&mut self, i: &ExprCast) {
592 Visit::visit_expr_cast(&mut **self, i);
593 }
594
595 fn visit_expr_column(&mut self, i: &ExprColumn) {
596 Visit::visit_expr_column(&mut **self, i);
597 }
598
599 fn visit_expr_default(&mut self) {
600 Visit::visit_expr_default(&mut **self);
601 }
602
603 fn visit_expr_error(&mut self, i: &ExprError) {
604 Visit::visit_expr_error(&mut **self, i);
605 }
606
607 fn visit_expr_exists(&mut self, i: &ExprExists) {
608 Visit::visit_expr_exists(&mut **self, i);
609 }
610
611 fn visit_expr_func(&mut self, i: &ExprFunc) {
612 Visit::visit_expr_func(&mut **self, i);
613 }
614
615 fn visit_expr_func_count(&mut self, i: &FuncCount) {
616 Visit::visit_expr_func_count(&mut **self, i);
617 }
618
619 fn visit_expr_in_list(&mut self, i: &ExprInList) {
620 Visit::visit_expr_in_list(&mut **self, i);
621 }
622
623 fn visit_expr_in_subquery(&mut self, i: &ExprInSubquery) {
624 Visit::visit_expr_in_subquery(&mut **self, i);
625 }
626
627 fn visit_expr_intersects(&mut self, i: &ExprIntersects) {
628 Visit::visit_expr_intersects(&mut **self, i);
629 }
630
631 fn visit_expr_is_null(&mut self, i: &ExprIsNull) {
632 Visit::visit_expr_is_null(&mut **self, i);
633 }
634
635 fn visit_expr_is_superset(&mut self, i: &ExprIsSuperset) {
636 Visit::visit_expr_is_superset(&mut **self, i);
637 }
638
639 fn visit_expr_is_variant(&mut self, i: &ExprIsVariant) {
640 Visit::visit_expr_is_variant(&mut **self, i);
641 }
642
643 fn visit_expr_length(&mut self, i: &ExprLength) {
644 Visit::visit_expr_length(&mut **self, i);
645 }
646
647 fn visit_expr_let(&mut self, i: &ExprLet) {
648 Visit::visit_expr_let(&mut **self, i);
649 }
650
651 fn visit_expr_like(&mut self, i: &ExprLike) {
652 Visit::visit_expr_like(&mut **self, i);
653 }
654
655 fn visit_expr_map(&mut self, i: &ExprMap) {
656 Visit::visit_expr_map(&mut **self, i);
657 }
658
659 fn visit_expr_match(&mut self, i: &ExprMatch) {
660 Visit::visit_expr_match(&mut **self, i);
661 }
662
663 fn visit_expr_not(&mut self, i: &ExprNot) {
664 Visit::visit_expr_not(&mut **self, i);
665 }
666
667 fn visit_expr_or(&mut self, i: &ExprOr) {
668 Visit::visit_expr_or(&mut **self, i);
669 }
670
671 fn visit_expr_list(&mut self, i: &ExprList) {
672 Visit::visit_expr_list(&mut **self, i);
673 }
674
675 fn visit_expr_record(&mut self, i: &ExprRecord) {
676 Visit::visit_expr_record(&mut **self, i);
677 }
678
679 fn visit_expr_reference(&mut self, i: &ExprReference) {
680 Visit::visit_expr_reference(&mut **self, i);
681 }
682
683 fn visit_expr_set(&mut self, i: &ExprSet) {
684 Visit::visit_expr_set(&mut **self, i);
685 }
686
687 fn visit_expr_set_op(&mut self, i: &ExprSetOp) {
688 Visit::visit_expr_set_op(&mut **self, i);
689 }
690
691 fn visit_expr_starts_with(&mut self, i: &ExprStartsWith) {
692 Visit::visit_expr_starts_with(&mut **self, i);
693 }
694
695 fn visit_expr_stmt(&mut self, i: &ExprStmt) {
696 Visit::visit_expr_stmt(&mut **self, i);
697 }
698
699 fn visit_filter(&mut self, i: &Filter) {
700 Visit::visit_filter(&mut **self, i);
701 }
702
703 fn visit_condition(&mut self, i: &Condition) {
704 Visit::visit_condition(&mut **self, i);
705 }
706
707 fn visit_expr_project(&mut self, i: &ExprProject) {
708 Visit::visit_expr_project(&mut **self, i);
709 }
710
711 fn visit_insert_target(&mut self, i: &InsertTarget) {
712 Visit::visit_insert_target(&mut **self, i);
713 }
714
715 fn visit_join(&mut self, i: &Join) {
716 Visit::visit_join(&mut **self, i);
717 }
718
719 fn visit_limit(&mut self, i: &Limit) {
720 Visit::visit_limit(&mut **self, i);
721 }
722
723 fn visit_limit_cursor(&mut self, i: &LimitCursor) {
724 Visit::visit_limit_cursor(&mut **self, i);
725 }
726
727 fn visit_limit_offset(&mut self, i: &LimitOffset) {
728 Visit::visit_limit_offset(&mut **self, i);
729 }
730
731 fn visit_order_by(&mut self, i: &OrderBy) {
732 Visit::visit_order_by(&mut **self, i);
733 }
734
735 fn visit_order_by_expr(&mut self, i: &OrderByExpr) {
736 Visit::visit_order_by_expr(&mut **self, i);
737 }
738
739 fn visit_path(&mut self, i: &Path) {
740 Visit::visit_path(&mut **self, i);
741 }
742
743 fn visit_projection(&mut self, i: &Projection) {
744 Visit::visit_projection(&mut **self, i);
745 }
746
747 fn visit_returning(&mut self, i: &Returning) {
748 Visit::visit_returning(&mut **self, i);
749 }
750
751 fn visit_source(&mut self, i: &Source) {
752 Visit::visit_source(&mut **self, i);
753 }
754
755 fn visit_source_model(&mut self, i: &SourceModel) {
756 Visit::visit_source_model(&mut **self, i);
757 }
758
759 fn visit_source_table(&mut self, i: &SourceTable) {
760 Visit::visit_source_table(&mut **self, i);
761 }
762
763 fn visit_source_table_id(&mut self, i: &SourceTableId) {
764 Visit::visit_source_table_id(&mut **self, i);
765 }
766
767 fn visit_stmt(&mut self, i: &Statement) {
768 Visit::visit_stmt(&mut **self, i);
769 }
770
771 fn visit_stmt_delete(&mut self, i: &Delete) {
772 Visit::visit_stmt_delete(&mut **self, i);
773 }
774
775 fn visit_stmt_insert(&mut self, i: &Insert) {
776 Visit::visit_stmt_insert(&mut **self, i);
777 }
778
779 fn visit_stmt_query(&mut self, i: &Query) {
780 Visit::visit_stmt_query(&mut **self, i);
781 }
782
783 fn visit_stmt_select(&mut self, i: &Select) {
784 Visit::visit_stmt_select(&mut **self, i);
785 }
786
787 fn visit_stmt_update(&mut self, i: &Update) {
788 Visit::visit_stmt_update(&mut **self, i);
789 }
790
791 fn visit_table_derived(&mut self, i: &TableDerived) {
792 Visit::visit_table_derived(&mut **self, i);
793 }
794
795 fn visit_table_ref(&mut self, i: &TableRef) {
796 Visit::visit_table_ref(&mut **self, i);
797 }
798
799 fn visit_table_factor(&mut self, i: &TableFactor) {
800 Visit::visit_table_factor(&mut **self, i);
801 }
802
803 fn visit_table_with_joins(&mut self, i: &TableWithJoins) {
804 Visit::visit_table_with_joins(&mut **self, i);
805 }
806
807 fn visit_type(&mut self, i: &Type) {
808 Visit::visit_type(&mut **self, i);
809 }
810
811 fn visit_update_target(&mut self, i: &UpdateTarget) {
812 Visit::visit_update_target(&mut **self, i);
813 }
814
815 fn visit_value(&mut self, i: &Value) {
816 Visit::visit_value(&mut **self, i);
817 }
818
819 fn visit_value_record(&mut self, i: &ValueRecord) {
820 Visit::visit_value_record(&mut **self, i);
821 }
822
823 fn visit_values(&mut self, i: &Values) {
824 Visit::visit_values(&mut **self, i);
825 }
826
827 fn visit_with(&mut self, i: &With) {
828 Visit::visit_with(&mut **self, i);
829 }
830}
831
832pub fn visit_assignment<V>(v: &mut V, node: &Assignment)
834where
835 V: Visit + ?Sized,
836{
837 match node {
838 Assignment::Set(expr)
839 | Assignment::Insert(expr)
840 | Assignment::Remove(expr)
841 | Assignment::Append(expr)
842 | Assignment::RemoveAt(expr)
843 | Assignment::Add(expr)
844 | Assignment::Subtract(expr) => {
845 v.visit_expr(expr);
846 }
847 Assignment::Pop => {}
848 Assignment::Batch(entries) => {
849 for entry in entries {
850 visit_assignment(v, entry);
851 }
852 }
853 }
854}
855
856pub fn visit_assignments<V>(v: &mut V, node: &Assignments)
858where
859 V: Visit + ?Sized,
860{
861 for (_, assignment) in node.iter() {
862 v.visit_assignment(assignment);
863 }
864}
865
866pub fn visit_association<V>(v: &mut V, node: &Association)
868where
869 V: Visit + ?Sized,
870{
871 v.visit_stmt_query(&node.source);
872}
873
874pub fn visit_cte<V>(v: &mut V, node: &Cte)
876where
877 V: Visit + ?Sized,
878{
879 v.visit_stmt_query(&node.query);
880}
881
882pub fn visit_expr<V>(v: &mut V, node: &Expr)
884where
885 V: Visit + ?Sized,
886{
887 match node {
888 Expr::AllOp(expr) => v.visit_expr_all_op(expr),
889 Expr::And(expr) => v.visit_expr_and(expr),
890 Expr::Any(expr) => v.visit_expr_any(expr),
891 Expr::AnyOp(expr) => v.visit_expr_any_op(expr),
892 Expr::Arg(expr) => v.visit_expr_arg(expr),
893 Expr::BinaryOp(expr) => v.visit_expr_binary_op(expr),
894 Expr::Cast(expr) => v.visit_expr_cast(expr),
895 Expr::Default => v.visit_expr_default(),
896 Expr::Error(expr) => v.visit_expr_error(expr),
897 Expr::Exists(expr) => v.visit_expr_exists(expr),
898 Expr::Func(expr) => v.visit_expr_func(expr),
899 Expr::Ident(_) => {}
900 Expr::InList(expr) => v.visit_expr_in_list(expr),
901 Expr::InSubquery(expr) => v.visit_expr_in_subquery(expr),
902 Expr::Intersects(expr) => v.visit_expr_intersects(expr),
903 Expr::IsNull(expr) => v.visit_expr_is_null(expr),
904 Expr::IsSuperset(expr) => v.visit_expr_is_superset(expr),
905 Expr::IsVariant(expr) => v.visit_expr_is_variant(expr),
906 Expr::Length(expr) => v.visit_expr_length(expr),
907 Expr::Let(expr) => v.visit_expr_let(expr),
908 Expr::Like(expr) => v.visit_expr_like(expr),
909 Expr::Map(expr) => v.visit_expr_map(expr),
910 Expr::Match(expr) => v.visit_expr_match(expr),
911 Expr::Not(expr) => v.visit_expr_not(expr),
912 Expr::Or(expr) => v.visit_expr_or(expr),
913 Expr::Project(expr) => v.visit_expr_project(expr),
914 Expr::Record(expr) => v.visit_expr_record(expr),
915 Expr::Reference(expr) => v.visit_expr_reference(expr),
916 Expr::List(expr) => v.visit_expr_list(expr),
917 Expr::StartsWith(expr) => v.visit_expr_starts_with(expr),
918 Expr::Stmt(expr) => v.visit_expr_stmt(expr),
919 Expr::Value(expr) => v.visit_value(expr),
920 }
921}
922
923pub fn visit_expr_and<V>(v: &mut V, node: &ExprAnd)
925where
926 V: Visit + ?Sized,
927{
928 for expr in node {
929 v.visit_expr(expr);
930 }
931}
932
933pub fn visit_expr_any<V>(v: &mut V, node: &ExprAny)
935where
936 V: Visit + ?Sized,
937{
938 v.visit_expr(&node.expr);
939}
940
941pub fn visit_expr_arg<V>(v: &mut V, node: &ExprArg)
943where
944 V: Visit + ?Sized,
945{
946}
947
948pub fn visit_expr_binary_op<V>(v: &mut V, node: &ExprBinaryOp)
950where
951 V: Visit + ?Sized,
952{
953 v.visit_expr(&node.lhs);
954 v.visit_expr(&node.rhs);
955}
956
957pub fn visit_expr_any_op<V>(v: &mut V, node: &ExprAnyOp)
959where
960 V: Visit + ?Sized,
961{
962 v.visit_expr(&node.lhs);
963 v.visit_expr(&node.rhs);
964}
965
966pub fn visit_expr_all_op<V>(v: &mut V, node: &ExprAllOp)
968where
969 V: Visit + ?Sized,
970{
971 v.visit_expr(&node.lhs);
972 v.visit_expr(&node.rhs);
973}
974
975pub fn visit_expr_cast<V>(v: &mut V, node: &ExprCast)
977where
978 V: Visit + ?Sized,
979{
980 v.visit_expr(&node.expr);
981 v.visit_type(&node.ty);
982}
983
984pub fn visit_expr_column<V>(v: &mut V, node: &ExprColumn)
986where
987 V: Visit + ?Sized,
988{
989}
990
991pub fn visit_expr_default<V>(v: &mut V)
993where
994 V: Visit + ?Sized,
995{
996}
997
998pub fn visit_expr_error<V>(v: &mut V, node: &ExprError)
1000where
1001 V: Visit + ?Sized,
1002{
1003 }
1005
1006pub fn visit_expr_exists<V>(v: &mut V, node: &ExprExists)
1008where
1009 V: Visit + ?Sized,
1010{
1011 v.visit_stmt_query(&node.subquery);
1012}
1013
1014pub fn visit_expr_func<V>(v: &mut V, node: &ExprFunc)
1016where
1017 V: Visit + ?Sized,
1018{
1019 match node {
1020 ExprFunc::Count(func) => v.visit_expr_func_count(func),
1021 ExprFunc::LastInsertId(func) => v.visit_expr_func_last_insert_id(func),
1022 }
1023}
1024
1025pub fn visit_expr_func_count<V>(v: &mut V, node: &FuncCount)
1027where
1028 V: Visit + ?Sized,
1029{
1030 if let Some(expr) = &node.arg {
1031 v.visit_expr(expr);
1032 }
1033
1034 if let Some(expr) = &node.filter {
1035 v.visit_expr(expr);
1036 }
1037}
1038
1039pub fn visit_expr_func_last_insert_id<V>(_v: &mut V, _node: &FuncLastInsertId)
1041where
1042 V: Visit + ?Sized,
1043{
1044 }
1046
1047pub fn visit_expr_in_list<V>(v: &mut V, node: &ExprInList)
1049where
1050 V: Visit + ?Sized,
1051{
1052 v.visit_expr(&node.expr);
1053 v.visit_expr(&node.list);
1054}
1055
1056pub fn visit_expr_in_subquery<V>(v: &mut V, node: &ExprInSubquery)
1058where
1059 V: Visit + ?Sized,
1060{
1061 v.visit_expr(&node.expr);
1062 v.visit_stmt_query(&node.query);
1063}
1064
1065pub fn visit_expr_intersects<V>(v: &mut V, node: &ExprIntersects)
1067where
1068 V: Visit + ?Sized,
1069{
1070 v.visit_expr(&node.lhs);
1071 v.visit_expr(&node.rhs);
1072}
1073
1074pub fn visit_expr_is_null<V>(v: &mut V, node: &ExprIsNull)
1076where
1077 V: Visit + ?Sized,
1078{
1079 v.visit_expr(&node.expr);
1080}
1081
1082pub fn visit_expr_is_superset<V>(v: &mut V, node: &ExprIsSuperset)
1084where
1085 V: Visit + ?Sized,
1086{
1087 v.visit_expr(&node.lhs);
1088 v.visit_expr(&node.rhs);
1089}
1090
1091pub fn visit_expr_length<V>(v: &mut V, node: &ExprLength)
1093where
1094 V: Visit + ?Sized,
1095{
1096 v.visit_expr(&node.expr);
1097}
1098
1099pub fn visit_expr_is_variant<V>(v: &mut V, node: &ExprIsVariant)
1101where
1102 V: Visit + ?Sized,
1103{
1104 v.visit_expr(&node.expr);
1105}
1106
1107pub fn visit_expr_let<V>(v: &mut V, node: &ExprLet)
1109where
1110 V: Visit + ?Sized,
1111{
1112 for binding in &node.bindings {
1113 v.visit_expr(binding);
1114 }
1115 v.visit_expr(&node.body);
1116}
1117
1118pub fn visit_expr_like<V>(v: &mut V, node: &ExprLike)
1120where
1121 V: Visit + ?Sized,
1122{
1123 v.visit_expr(&node.expr);
1124 v.visit_expr(&node.pattern);
1125}
1126
1127pub fn visit_expr_map<V>(v: &mut V, node: &ExprMap)
1129where
1130 V: Visit + ?Sized,
1131{
1132 v.visit_expr(&node.base);
1133 v.visit_expr(&node.map);
1134}
1135
1136pub fn visit_expr_match<V>(v: &mut V, node: &ExprMatch)
1138where
1139 V: Visit + ?Sized,
1140{
1141 v.visit_expr(&node.subject);
1142 for arm in &node.arms {
1143 v.visit_expr(&arm.expr);
1144 }
1145 v.visit_expr(&node.else_expr);
1146}
1147
1148pub fn visit_expr_not<V>(v: &mut V, node: &ExprNot)
1150where
1151 V: Visit + ?Sized,
1152{
1153 v.visit_expr(&node.expr);
1154}
1155
1156pub fn visit_expr_or<V>(v: &mut V, node: &ExprOr)
1158where
1159 V: Visit + ?Sized,
1160{
1161 for expr in node {
1162 v.visit_expr(expr);
1163 }
1164}
1165
1166pub fn visit_expr_list<V>(v: &mut V, node: &ExprList)
1168where
1169 V: Visit + ?Sized,
1170{
1171 for expr in &node.items {
1172 v.visit_expr(expr);
1173 }
1174}
1175
1176pub fn visit_expr_record<V>(v: &mut V, node: &ExprRecord)
1178where
1179 V: Visit + ?Sized,
1180{
1181 for expr in &**node {
1182 v.visit_expr(expr);
1183 }
1184}
1185
1186pub fn visit_expr_reference<V>(v: &mut V, node: &ExprReference)
1188where
1189 V: Visit + ?Sized,
1190{
1191 match node {
1192 ExprReference::Model { .. } => {}
1193 ExprReference::Field { .. } => {}
1194 ExprReference::Column(expr_column) => v.visit_expr_column(expr_column),
1195 }
1196}
1197
1198pub fn visit_expr_set<V>(v: &mut V, node: &ExprSet)
1200where
1201 V: Visit + ?Sized,
1202{
1203 match node {
1204 ExprSet::Select(expr) => v.visit_stmt_select(expr),
1205 ExprSet::SetOp(expr) => v.visit_expr_set_op(expr),
1206 ExprSet::Update(expr) => v.visit_stmt_update(expr),
1207 ExprSet::Values(expr) => v.visit_values(expr),
1208 ExprSet::Insert(expr) => v.visit_stmt_insert(expr),
1209 }
1210}
1211
1212pub fn visit_expr_set_op<V>(v: &mut V, node: &ExprSetOp)
1214where
1215 V: Visit + ?Sized,
1216{
1217 for operand in &node.operands {
1218 v.visit_expr_set(operand);
1219 }
1220}
1221
1222pub fn visit_expr_starts_with<V>(v: &mut V, node: &ExprStartsWith)
1224where
1225 V: Visit + ?Sized,
1226{
1227 v.visit_expr(&node.expr);
1228 v.visit_expr(&node.prefix);
1229}
1230
1231pub fn visit_expr_stmt<V>(v: &mut V, node: &ExprStmt)
1233where
1234 V: Visit + ?Sized,
1235{
1236 v.visit_stmt(&node.stmt);
1237}
1238
1239pub fn visit_expr_project<V>(v: &mut V, node: &ExprProject)
1241where
1242 V: Visit + ?Sized,
1243{
1244 v.visit_expr(&node.base);
1245 v.visit_projection(&node.projection);
1246}
1247
1248pub fn visit_filter<V>(v: &mut V, node: &Filter)
1250where
1251 V: Visit + ?Sized,
1252{
1253 if let Some(expr) = &node.expr {
1254 v.visit_expr(expr);
1255 }
1256}
1257
1258pub fn visit_condition<V>(v: &mut V, node: &Condition)
1260where
1261 V: Visit + ?Sized,
1262{
1263 if let Some(expr) = &node.expr {
1264 v.visit_expr(expr);
1265 }
1266}
1267
1268pub fn visit_insert_target<V>(v: &mut V, node: &InsertTarget)
1270where
1271 V: Visit + ?Sized,
1272{
1273 if let InsertTarget::Scope(stmt) = node {
1274 v.visit_stmt_query(stmt);
1275 }
1276}
1277
1278pub fn visit_join<V>(v: &mut V, node: &Join)
1280where
1281 V: Visit + ?Sized,
1282{
1283 v.visit_source_table_id(&node.table);
1284 match &node.constraint {
1285 JoinOp::Inner(expr) | JoinOp::Left(expr) => v.visit_expr(expr),
1286 }
1287}
1288
1289pub fn visit_limit<V>(v: &mut V, node: &Limit)
1291where
1292 V: Visit + ?Sized,
1293{
1294 match node {
1295 Limit::Cursor(cursor) => v.visit_limit_cursor(cursor),
1296 Limit::Offset(offset) => v.visit_limit_offset(offset),
1297 }
1298}
1299
1300pub fn visit_limit_cursor<V>(v: &mut V, node: &LimitCursor)
1302where
1303 V: Visit + ?Sized,
1304{
1305 v.visit_expr(&node.page_size);
1306 if let Some(after) = &node.after {
1307 v.visit_expr(after);
1308 }
1309}
1310
1311pub fn visit_limit_offset<V>(v: &mut V, node: &LimitOffset)
1313where
1314 V: Visit + ?Sized,
1315{
1316 v.visit_expr(&node.limit);
1317 if let Some(offset) = &node.offset {
1318 v.visit_expr(offset);
1319 }
1320}
1321
1322pub fn visit_order_by<V>(v: &mut V, node: &OrderBy)
1324where
1325 V: Visit + ?Sized,
1326{
1327 for expr in &node.exprs {
1328 v.visit_order_by_expr(expr);
1329 }
1330}
1331
1332pub fn visit_order_by_expr<V>(v: &mut V, node: &OrderByExpr)
1334where
1335 V: Visit + ?Sized,
1336{
1337 v.visit_expr(&node.expr);
1338}
1339
1340pub fn visit_path<V>(v: &mut V, node: &Path)
1342where
1343 V: Visit + ?Sized,
1344{
1345 v.visit_projection(&node.projection);
1346}
1347
1348pub fn visit_projection<V>(v: &mut V, node: &Projection)
1350where
1351 V: Visit + ?Sized,
1352{
1353}
1354
1355pub fn visit_returning<V>(v: &mut V, node: &Returning)
1357where
1358 V: Visit + ?Sized,
1359{
1360 match node {
1361 Returning::Model { include } => {
1362 for path in include {
1363 v.visit_path(path);
1364 }
1365 }
1366 Returning::Changed => {}
1367 Returning::Project(expr) => v.visit_expr(expr),
1368 Returning::Expr(expr) => v.visit_expr(expr),
1369 }
1370}
1371
1372pub fn visit_source<V>(v: &mut V, node: &Source)
1374where
1375 V: Visit + ?Sized,
1376{
1377 match node {
1378 Source::Model(source_model) => v.visit_source_model(source_model),
1379 Source::Table(source_table) => v.visit_source_table(source_table),
1380 }
1381}
1382
1383pub fn visit_source_model<V>(v: &mut V, node: &SourceModel)
1385where
1386 V: Visit + ?Sized,
1387{
1388 if let Some(association) = &node.via {
1389 v.visit_association(association);
1390 }
1391}
1392
1393pub fn visit_source_table<V>(v: &mut V, node: &SourceTable)
1395where
1396 V: Visit + ?Sized,
1397{
1398 for table_ref in &node.tables {
1399 v.visit_table_ref(table_ref);
1400 }
1401 for table_with_joins in &node.from {
1402 v.visit_table_with_joins(table_with_joins);
1403 }
1404}
1405
1406pub fn visit_source_table_id<V>(v: &mut V, node: &SourceTableId)
1408where
1409 V: Visit + ?Sized,
1410{
1411 }
1413
1414pub fn visit_table_factor<V>(v: &mut V, node: &TableFactor)
1416where
1417 V: Visit + ?Sized,
1418{
1419 match node {
1420 TableFactor::Table(table_id) => v.visit_source_table_id(table_id),
1421 }
1422}
1423
1424pub fn visit_stmt<V>(v: &mut V, node: &Statement)
1426where
1427 V: Visit + ?Sized,
1428{
1429 match node {
1430 Statement::Delete(stmt) => v.visit_stmt_delete(stmt),
1431 Statement::Insert(stmt) => v.visit_stmt_insert(stmt),
1432 Statement::Query(stmt) => v.visit_stmt_query(stmt),
1433 Statement::Update(stmt) => v.visit_stmt_update(stmt),
1434 }
1435}
1436
1437pub fn visit_stmt_delete<V>(v: &mut V, node: &Delete)
1439where
1440 V: Visit + ?Sized,
1441{
1442 v.visit_source(&node.from);
1443 v.visit_filter(&node.filter);
1444 v.visit_condition(&node.condition);
1445
1446 if let Some(returning) = &node.returning {
1447 v.visit_returning(returning);
1448 }
1449}
1450
1451pub fn visit_stmt_insert<V>(v: &mut V, node: &Insert)
1453where
1454 V: Visit + ?Sized,
1455{
1456 if let InsertTarget::Scope(scope) = &node.target {
1457 v.visit_stmt_query(scope);
1458 }
1459 v.visit_stmt_query(&node.source);
1460
1461 if let Some(returning) = &node.returning {
1462 v.visit_returning(returning);
1463 }
1464}
1465
1466pub fn visit_stmt_query<V>(v: &mut V, node: &Query)
1468where
1469 V: Visit + ?Sized,
1470{
1471 if let Some(with) = &node.with {
1472 v.visit_with(with);
1473 }
1474
1475 v.visit_expr_set(&node.body);
1476
1477 if let Some(order_by) = &node.order_by {
1478 v.visit_order_by(order_by);
1479 }
1480
1481 if let Some(limit) = &node.limit {
1482 v.visit_limit(limit);
1483 }
1484}
1485
1486pub fn visit_stmt_select<V>(v: &mut V, node: &Select)
1488where
1489 V: Visit + ?Sized,
1490{
1491 v.visit_source(&node.source);
1492 v.visit_filter(&node.filter);
1493 v.visit_returning(&node.returning);
1494}
1495
1496pub fn visit_stmt_update<V>(v: &mut V, node: &Update)
1498where
1499 V: Visit + ?Sized,
1500{
1501 v.visit_update_target(&node.target);
1502 v.visit_assignments(&node.assignments);
1503 v.visit_filter(&node.filter);
1504 v.visit_condition(&node.condition);
1505}
1506
1507pub fn visit_table_derived<V>(v: &mut V, node: &TableDerived)
1509where
1510 V: Visit + ?Sized,
1511{
1512 v.visit_stmt_query(&node.subquery);
1513}
1514
1515pub fn visit_table_ref<V>(v: &mut V, node: &TableRef)
1517where
1518 V: Visit + ?Sized,
1519{
1520 match node {
1521 TableRef::Cte { .. } => {}
1522 TableRef::Derived(table_derived) => v.visit_table_derived(table_derived),
1523 TableRef::Table(_) => {}
1524 TableRef::Arg(expr_arg) => v.visit_expr_arg(expr_arg),
1525 }
1526}
1527
1528pub fn visit_table_with_joins<V>(v: &mut V, node: &TableWithJoins)
1530where
1531 V: Visit + ?Sized,
1532{
1533 v.visit_table_factor(&node.relation);
1534 for join in &node.joins {
1535 v.visit_join(join);
1536 }
1537}
1538
1539pub fn visit_type<V>(v: &mut V, node: &Type)
1541where
1542 V: Visit + ?Sized,
1543{
1544 }
1546
1547pub fn visit_update_target<V>(v: &mut V, node: &UpdateTarget)
1549where
1550 V: Visit + ?Sized,
1551{
1552 if let UpdateTarget::Query(query) = node {
1553 v.visit_stmt_query(query)
1554 }
1555}
1556
1557pub fn visit_value<V>(v: &mut V, node: &Value)
1559where
1560 V: Visit + ?Sized,
1561{
1562 if let Value::Record(node) = node {
1563 v.visit_value_record(node)
1564 }
1565}
1566
1567pub fn visit_value_record<V>(v: &mut V, node: &ValueRecord)
1569where
1570 V: Visit + ?Sized,
1571{
1572 for value in node.iter() {
1573 v.visit_value(value);
1574 }
1575}
1576
1577pub fn visit_values<V>(v: &mut V, node: &Values)
1579where
1580 V: Visit + ?Sized,
1581{
1582 for expr in &node.rows {
1583 v.visit_expr(expr);
1584 }
1585}
1586
1587pub fn visit_with<V>(v: &mut V, node: &With)
1589where
1590 V: Visit + ?Sized,
1591{
1592 for cte in &node.ctes {
1593 v.visit_cte(cte);
1594 }
1595}
1596
1597pub fn for_each_expr<F>(node: &impl Node, f: F)
1602where
1603 F: FnMut(&Expr),
1604{
1605 struct ForEach<F> {
1606 f: F,
1607 }
1608
1609 impl<F> Visit for ForEach<F>
1610 where
1611 F: FnMut(&Expr),
1612 {
1613 fn visit_expr(&mut self, node: &Expr) {
1614 visit_expr(self, node);
1615 (self.f)(node);
1616 }
1617 }
1618
1619 node.visit(ForEach { f });
1620}