1#![allow(unused_variables)]
2
3use super::{
4 Assignment, Assignments, Association, Condition, Cte, Delete, Expr, ExprAnd, ExprAny, ExprArg,
5 ExprBinaryOp, ExprCast, ExprColumn, ExprError, ExprExists, ExprFunc, ExprInList,
6 ExprInSubquery, ExprIsNull, ExprIsVariant, ExprLet, ExprList, ExprMap, ExprMatch, ExprNot,
7 ExprOr, ExprProject, ExprRecord, ExprReference, ExprSet, ExprSetOp, ExprStmt, Filter,
8 FuncCount, FuncLastInsertId, Insert, InsertTarget, Join, JoinOp, Limit, Node, Offset, OrderBy,
9 OrderByExpr, Path, Projection, Query, Returning, Select, Source, SourceModel, SourceTable,
10 SourceTableId, Statement, TableDerived, TableFactor, TableRef, TableWithJoins, Type, Update,
11 UpdateTarget, Value, ValueRecord, Values, With,
12};
13
14pub trait Visit {
36 fn visit<N: Node>(&mut self, i: &N)
38 where
39 Self: Sized,
40 {
41 i.visit(self);
42 }
43
44 fn visit_assignment(&mut self, i: &Assignment) {
48 visit_assignment(self, i);
49 }
50
51 fn visit_assignments(&mut self, i: &Assignments) {
55 visit_assignments(self, i);
56 }
57
58 fn visit_association(&mut self, i: &Association) {
62 visit_association(self, i);
63 }
64
65 fn visit_cte(&mut self, i: &Cte) {
69 visit_cte(self, i);
70 }
71
72 fn visit_expr(&mut self, i: &Expr) {
76 visit_expr(self, i);
77 }
78
79 fn visit_expr_and(&mut self, i: &ExprAnd) {
83 visit_expr_and(self, i);
84 }
85
86 fn visit_expr_any(&mut self, i: &ExprAny) {
90 visit_expr_any(self, i);
91 }
92
93 fn visit_expr_arg(&mut self, i: &ExprArg) {
97 visit_expr_arg(self, i);
98 }
99
100 fn visit_expr_binary_op(&mut self, i: &ExprBinaryOp) {
104 visit_expr_binary_op(self, i);
105 }
106
107 fn visit_expr_cast(&mut self, i: &ExprCast) {
111 visit_expr_cast(self, i);
112 }
113
114 fn visit_expr_column(&mut self, i: &ExprColumn) {
118 visit_expr_column(self, i);
119 }
120
121 fn visit_expr_default(&mut self) {
125 visit_expr_default(self);
126 }
127
128 fn visit_expr_error(&mut self, i: &ExprError) {
132 visit_expr_error(self, i);
133 }
134
135 fn visit_expr_exists(&mut self, i: &ExprExists) {
139 visit_expr_exists(self, i);
140 }
141
142 fn visit_expr_func(&mut self, i: &ExprFunc) {
146 visit_expr_func(self, i);
147 }
148
149 fn visit_expr_func_count(&mut self, i: &FuncCount) {
153 visit_expr_func_count(self, i);
154 }
155
156 fn visit_expr_func_last_insert_id(&mut self, i: &FuncLastInsertId) {
160 visit_expr_func_last_insert_id(self, i);
161 }
162
163 fn visit_expr_in_list(&mut self, i: &ExprInList) {
167 visit_expr_in_list(self, i);
168 }
169
170 fn visit_expr_in_subquery(&mut self, i: &ExprInSubquery) {
174 visit_expr_in_subquery(self, i);
175 }
176
177 fn visit_expr_is_null(&mut self, i: &ExprIsNull) {
181 visit_expr_is_null(self, i);
182 }
183
184 fn visit_expr_is_variant(&mut self, i: &ExprIsVariant) {
188 visit_expr_is_variant(self, i);
189 }
190
191 fn visit_expr_let(&mut self, i: &ExprLet) {
195 visit_expr_let(self, i);
196 }
197
198 fn visit_expr_map(&mut self, i: &ExprMap) {
202 visit_expr_map(self, i);
203 }
204
205 fn visit_expr_match(&mut self, i: &ExprMatch) {
209 visit_expr_match(self, i);
210 }
211
212 fn visit_expr_not(&mut self, i: &ExprNot) {
216 visit_expr_not(self, i);
217 }
218
219 fn visit_expr_or(&mut self, i: &ExprOr) {
223 visit_expr_or(self, i);
224 }
225
226 fn visit_expr_list(&mut self, i: &ExprList) {
230 visit_expr_list(self, i);
231 }
232
233 fn visit_expr_record(&mut self, i: &ExprRecord) {
237 visit_expr_record(self, i);
238 }
239
240 fn visit_expr_reference(&mut self, i: &ExprReference) {
244 visit_expr_reference(self, i);
245 }
246
247 fn visit_expr_set(&mut self, i: &ExprSet) {
251 visit_expr_set(self, i);
252 }
253
254 fn visit_expr_set_op(&mut self, i: &ExprSetOp) {
258 visit_expr_set_op(self, i);
259 }
260
261 fn visit_expr_stmt(&mut self, i: &ExprStmt) {
265 visit_expr_stmt(self, i);
266 }
267
268 fn visit_filter(&mut self, i: &Filter) {
272 visit_filter(self, i);
273 }
274
275 fn visit_condition(&mut self, i: &Condition) {
279 visit_condition(self, i);
280 }
281
282 fn visit_expr_project(&mut self, i: &ExprProject) {
286 visit_expr_project(self, i);
287 }
288
289 fn visit_insert_target(&mut self, i: &InsertTarget) {
293 visit_insert_target(self, i);
294 }
295
296 fn visit_join(&mut self, i: &Join) {
300 visit_join(self, i);
301 }
302
303 fn visit_limit(&mut self, i: &Limit) {
307 visit_limit(self, i);
308 }
309
310 fn visit_offset(&mut self, i: &Offset) {
314 visit_offset(self, i);
315 }
316
317 fn visit_order_by(&mut self, i: &OrderBy) {
321 visit_order_by(self, i);
322 }
323
324 fn visit_order_by_expr(&mut self, i: &OrderByExpr) {
328 visit_order_by_expr(self, i);
329 }
330
331 fn visit_path(&mut self, i: &Path) {
335 visit_path(self, i);
336 }
337
338 fn visit_projection(&mut self, i: &Projection) {
342 visit_projection(self, i);
343 }
344
345 fn visit_returning(&mut self, i: &Returning) {
349 visit_returning(self, i);
350 }
351
352 fn visit_source(&mut self, i: &Source) {
356 visit_source(self, i);
357 }
358
359 fn visit_source_model(&mut self, i: &SourceModel) {
363 visit_source_model(self, i);
364 }
365
366 fn visit_source_table(&mut self, i: &SourceTable) {
370 visit_source_table(self, i);
371 }
372
373 fn visit_source_table_id(&mut self, i: &SourceTableId) {
377 visit_source_table_id(self, i);
378 }
379
380 fn visit_stmt(&mut self, i: &Statement) {
384 visit_stmt(self, i);
385 }
386
387 fn visit_stmt_delete(&mut self, i: &Delete) {
391 visit_stmt_delete(self, i);
392 }
393
394 fn visit_stmt_insert(&mut self, i: &Insert) {
398 visit_stmt_insert(self, i);
399 }
400
401 fn visit_stmt_query(&mut self, i: &Query) {
405 visit_stmt_query(self, i);
406 }
407
408 fn visit_stmt_select(&mut self, i: &Select) {
412 visit_stmt_select(self, i);
413 }
414
415 fn visit_stmt_update(&mut self, i: &Update) {
419 visit_stmt_update(self, i);
420 }
421
422 fn visit_table_derived(&mut self, i: &TableDerived) {
426 visit_table_derived(self, i);
427 }
428
429 fn visit_table_ref(&mut self, i: &TableRef) {
433 visit_table_ref(self, i);
434 }
435
436 fn visit_table_factor(&mut self, i: &TableFactor) {
440 visit_table_factor(self, i);
441 }
442
443 fn visit_table_with_joins(&mut self, i: &TableWithJoins) {
447 visit_table_with_joins(self, i);
448 }
449
450 fn visit_type(&mut self, i: &Type) {
454 visit_type(self, i);
455 }
456
457 fn visit_update_target(&mut self, i: &UpdateTarget) {
461 visit_update_target(self, i);
462 }
463
464 fn visit_value(&mut self, i: &Value) {
468 visit_value(self, i);
469 }
470
471 fn visit_value_record(&mut self, i: &ValueRecord) {
475 visit_value_record(self, i);
476 }
477
478 fn visit_values(&mut self, i: &Values) {
482 visit_values(self, i);
483 }
484
485 fn visit_with(&mut self, i: &With) {
489 visit_with(self, i);
490 }
491}
492
493impl<V: Visit> Visit for &mut V {
494 fn visit_assignment(&mut self, i: &Assignment) {
495 Visit::visit_assignment(&mut **self, i);
496 }
497
498 fn visit_assignments(&mut self, i: &Assignments) {
499 Visit::visit_assignments(&mut **self, i);
500 }
501
502 fn visit_association(&mut self, i: &Association) {
503 Visit::visit_association(&mut **self, i);
504 }
505
506 fn visit_cte(&mut self, i: &Cte) {
507 Visit::visit_cte(&mut **self, i);
508 }
509
510 fn visit_expr(&mut self, i: &Expr) {
511 Visit::visit_expr(&mut **self, i);
512 }
513
514 fn visit_expr_and(&mut self, i: &ExprAnd) {
515 Visit::visit_expr_and(&mut **self, i);
516 }
517
518 fn visit_expr_arg(&mut self, i: &ExprArg) {
519 Visit::visit_expr_arg(&mut **self, i);
520 }
521
522 fn visit_expr_binary_op(&mut self, i: &ExprBinaryOp) {
523 Visit::visit_expr_binary_op(&mut **self, i);
524 }
525
526 fn visit_expr_cast(&mut self, i: &ExprCast) {
527 Visit::visit_expr_cast(&mut **self, i);
528 }
529
530 fn visit_expr_column(&mut self, i: &ExprColumn) {
531 Visit::visit_expr_column(&mut **self, i);
532 }
533
534 fn visit_expr_default(&mut self) {
535 Visit::visit_expr_default(&mut **self);
536 }
537
538 fn visit_expr_error(&mut self, i: &ExprError) {
539 Visit::visit_expr_error(&mut **self, i);
540 }
541
542 fn visit_expr_exists(&mut self, i: &ExprExists) {
543 Visit::visit_expr_exists(&mut **self, i);
544 }
545
546 fn visit_expr_func(&mut self, i: &ExprFunc) {
547 Visit::visit_expr_func(&mut **self, i);
548 }
549
550 fn visit_expr_func_count(&mut self, i: &FuncCount) {
551 Visit::visit_expr_func_count(&mut **self, i);
552 }
553
554 fn visit_expr_in_list(&mut self, i: &ExprInList) {
555 Visit::visit_expr_in_list(&mut **self, i);
556 }
557
558 fn visit_expr_in_subquery(&mut self, i: &ExprInSubquery) {
559 Visit::visit_expr_in_subquery(&mut **self, i);
560 }
561
562 fn visit_expr_is_null(&mut self, i: &ExprIsNull) {
563 Visit::visit_expr_is_null(&mut **self, i);
564 }
565
566 fn visit_expr_is_variant(&mut self, i: &ExprIsVariant) {
567 Visit::visit_expr_is_variant(&mut **self, i);
568 }
569
570 fn visit_expr_let(&mut self, i: &ExprLet) {
571 Visit::visit_expr_let(&mut **self, i);
572 }
573
574 fn visit_expr_map(&mut self, i: &ExprMap) {
575 Visit::visit_expr_map(&mut **self, i);
576 }
577
578 fn visit_expr_match(&mut self, i: &ExprMatch) {
579 Visit::visit_expr_match(&mut **self, i);
580 }
581
582 fn visit_expr_not(&mut self, i: &ExprNot) {
583 Visit::visit_expr_not(&mut **self, i);
584 }
585
586 fn visit_expr_or(&mut self, i: &ExprOr) {
587 Visit::visit_expr_or(&mut **self, i);
588 }
589
590 fn visit_expr_list(&mut self, i: &ExprList) {
591 Visit::visit_expr_list(&mut **self, i);
592 }
593
594 fn visit_expr_record(&mut self, i: &ExprRecord) {
595 Visit::visit_expr_record(&mut **self, i);
596 }
597
598 fn visit_expr_reference(&mut self, i: &ExprReference) {
599 Visit::visit_expr_reference(&mut **self, i);
600 }
601
602 fn visit_expr_set(&mut self, i: &ExprSet) {
603 Visit::visit_expr_set(&mut **self, i);
604 }
605
606 fn visit_expr_set_op(&mut self, i: &ExprSetOp) {
607 Visit::visit_expr_set_op(&mut **self, i);
608 }
609
610 fn visit_expr_stmt(&mut self, i: &ExprStmt) {
611 Visit::visit_expr_stmt(&mut **self, i);
612 }
613
614 fn visit_filter(&mut self, i: &Filter) {
615 Visit::visit_filter(&mut **self, i);
616 }
617
618 fn visit_condition(&mut self, i: &Condition) {
619 Visit::visit_condition(&mut **self, i);
620 }
621
622 fn visit_expr_project(&mut self, i: &ExprProject) {
623 Visit::visit_expr_project(&mut **self, i);
624 }
625
626 fn visit_insert_target(&mut self, i: &InsertTarget) {
627 Visit::visit_insert_target(&mut **self, i);
628 }
629
630 fn visit_join(&mut self, i: &Join) {
631 Visit::visit_join(&mut **self, i);
632 }
633
634 fn visit_limit(&mut self, i: &Limit) {
635 Visit::visit_limit(&mut **self, i);
636 }
637
638 fn visit_offset(&mut self, i: &Offset) {
639 Visit::visit_offset(&mut **self, i);
640 }
641
642 fn visit_order_by(&mut self, i: &OrderBy) {
643 Visit::visit_order_by(&mut **self, i);
644 }
645
646 fn visit_order_by_expr(&mut self, i: &OrderByExpr) {
647 Visit::visit_order_by_expr(&mut **self, i);
648 }
649
650 fn visit_path(&mut self, i: &Path) {
651 Visit::visit_path(&mut **self, i);
652 }
653
654 fn visit_projection(&mut self, i: &Projection) {
655 Visit::visit_projection(&mut **self, i);
656 }
657
658 fn visit_returning(&mut self, i: &Returning) {
659 Visit::visit_returning(&mut **self, i);
660 }
661
662 fn visit_source(&mut self, i: &Source) {
663 Visit::visit_source(&mut **self, i);
664 }
665
666 fn visit_source_model(&mut self, i: &SourceModel) {
667 Visit::visit_source_model(&mut **self, i);
668 }
669
670 fn visit_source_table(&mut self, i: &SourceTable) {
671 Visit::visit_source_table(&mut **self, i);
672 }
673
674 fn visit_source_table_id(&mut self, i: &SourceTableId) {
675 Visit::visit_source_table_id(&mut **self, i);
676 }
677
678 fn visit_stmt(&mut self, i: &Statement) {
679 Visit::visit_stmt(&mut **self, i);
680 }
681
682 fn visit_stmt_delete(&mut self, i: &Delete) {
683 Visit::visit_stmt_delete(&mut **self, i);
684 }
685
686 fn visit_stmt_insert(&mut self, i: &Insert) {
687 Visit::visit_stmt_insert(&mut **self, i);
688 }
689
690 fn visit_stmt_query(&mut self, i: &Query) {
691 Visit::visit_stmt_query(&mut **self, i);
692 }
693
694 fn visit_stmt_select(&mut self, i: &Select) {
695 Visit::visit_stmt_select(&mut **self, i);
696 }
697
698 fn visit_stmt_update(&mut self, i: &Update) {
699 Visit::visit_stmt_update(&mut **self, i);
700 }
701
702 fn visit_table_derived(&mut self, i: &TableDerived) {
703 Visit::visit_table_derived(&mut **self, i);
704 }
705
706 fn visit_table_ref(&mut self, i: &TableRef) {
707 Visit::visit_table_ref(&mut **self, i);
708 }
709
710 fn visit_table_factor(&mut self, i: &TableFactor) {
711 Visit::visit_table_factor(&mut **self, i);
712 }
713
714 fn visit_table_with_joins(&mut self, i: &TableWithJoins) {
715 Visit::visit_table_with_joins(&mut **self, i);
716 }
717
718 fn visit_type(&mut self, i: &Type) {
719 Visit::visit_type(&mut **self, i);
720 }
721
722 fn visit_update_target(&mut self, i: &UpdateTarget) {
723 Visit::visit_update_target(&mut **self, i);
724 }
725
726 fn visit_value(&mut self, i: &Value) {
727 Visit::visit_value(&mut **self, i);
728 }
729
730 fn visit_value_record(&mut self, i: &ValueRecord) {
731 Visit::visit_value_record(&mut **self, i);
732 }
733
734 fn visit_values(&mut self, i: &Values) {
735 Visit::visit_values(&mut **self, i);
736 }
737
738 fn visit_with(&mut self, i: &With) {
739 Visit::visit_with(&mut **self, i);
740 }
741}
742
743pub fn visit_assignment<V>(v: &mut V, node: &Assignment)
745where
746 V: Visit + ?Sized,
747{
748 match node {
749 Assignment::Set(expr) | Assignment::Insert(expr) | Assignment::Remove(expr) => {
750 v.visit_expr(expr);
751 }
752 Assignment::Batch(entries) => {
753 for entry in entries {
754 visit_assignment(v, entry);
755 }
756 }
757 }
758}
759
760pub fn visit_assignments<V>(v: &mut V, node: &Assignments)
762where
763 V: Visit + ?Sized,
764{
765 for (_, assignment) in node.iter() {
766 v.visit_assignment(assignment);
767 }
768}
769
770pub fn visit_association<V>(v: &mut V, node: &Association)
772where
773 V: Visit + ?Sized,
774{
775 v.visit_stmt_query(&node.source);
776}
777
778pub fn visit_cte<V>(v: &mut V, node: &Cte)
780where
781 V: Visit + ?Sized,
782{
783 v.visit_stmt_query(&node.query);
784}
785
786pub fn visit_expr<V>(v: &mut V, node: &Expr)
788where
789 V: Visit + ?Sized,
790{
791 match node {
792 Expr::And(expr) => v.visit_expr_and(expr),
793 Expr::Any(expr) => v.visit_expr_any(expr),
794 Expr::Arg(expr) => v.visit_expr_arg(expr),
795 Expr::BinaryOp(expr) => v.visit_expr_binary_op(expr),
796 Expr::Cast(expr) => v.visit_expr_cast(expr),
797 Expr::Default => v.visit_expr_default(),
798 Expr::Error(expr) => v.visit_expr_error(expr),
799 Expr::Exists(expr) => v.visit_expr_exists(expr),
800 Expr::Func(expr) => v.visit_expr_func(expr),
801 Expr::InList(expr) => v.visit_expr_in_list(expr),
802 Expr::InSubquery(expr) => v.visit_expr_in_subquery(expr),
803 Expr::IsNull(expr) => v.visit_expr_is_null(expr),
804 Expr::IsVariant(expr) => v.visit_expr_is_variant(expr),
805 Expr::Let(expr) => v.visit_expr_let(expr),
806 Expr::Map(expr) => v.visit_expr_map(expr),
807 Expr::Match(expr) => v.visit_expr_match(expr),
808 Expr::Not(expr) => v.visit_expr_not(expr),
809 Expr::Or(expr) => v.visit_expr_or(expr),
810 Expr::Project(expr) => v.visit_expr_project(expr),
811 Expr::Record(expr) => v.visit_expr_record(expr),
812 Expr::Reference(expr) => v.visit_expr_reference(expr),
813 Expr::List(expr) => v.visit_expr_list(expr),
814 Expr::Stmt(expr) => v.visit_expr_stmt(expr),
815 Expr::Value(expr) => v.visit_value(expr),
816 }
817}
818
819pub fn visit_expr_and<V>(v: &mut V, node: &ExprAnd)
821where
822 V: Visit + ?Sized,
823{
824 for expr in node {
825 v.visit_expr(expr);
826 }
827}
828
829pub fn visit_expr_any<V>(v: &mut V, node: &ExprAny)
831where
832 V: Visit + ?Sized,
833{
834 v.visit_expr(&node.expr);
835}
836
837pub fn visit_expr_arg<V>(v: &mut V, node: &ExprArg)
839where
840 V: Visit + ?Sized,
841{
842}
843
844pub fn visit_expr_binary_op<V>(v: &mut V, node: &ExprBinaryOp)
846where
847 V: Visit + ?Sized,
848{
849 v.visit_expr(&node.lhs);
850 v.visit_expr(&node.rhs);
851}
852
853pub fn visit_expr_cast<V>(v: &mut V, node: &ExprCast)
855where
856 V: Visit + ?Sized,
857{
858 v.visit_expr(&node.expr);
859 v.visit_type(&node.ty);
860}
861
862pub fn visit_expr_column<V>(v: &mut V, node: &ExprColumn)
864where
865 V: Visit + ?Sized,
866{
867}
868
869pub fn visit_expr_default<V>(v: &mut V)
871where
872 V: Visit + ?Sized,
873{
874}
875
876pub fn visit_expr_error<V>(v: &mut V, node: &ExprError)
878where
879 V: Visit + ?Sized,
880{
881 }
883
884pub fn visit_expr_exists<V>(v: &mut V, node: &ExprExists)
886where
887 V: Visit + ?Sized,
888{
889 v.visit_stmt_query(&node.subquery);
890}
891
892pub fn visit_expr_func<V>(v: &mut V, node: &ExprFunc)
894where
895 V: Visit + ?Sized,
896{
897 match node {
898 ExprFunc::Count(func) => v.visit_expr_func_count(func),
899 ExprFunc::LastInsertId(func) => v.visit_expr_func_last_insert_id(func),
900 }
901}
902
903pub fn visit_expr_func_count<V>(v: &mut V, node: &FuncCount)
905where
906 V: Visit + ?Sized,
907{
908 if let Some(expr) = &node.arg {
909 v.visit_expr(expr);
910 }
911
912 if let Some(expr) = &node.filter {
913 v.visit_expr(expr);
914 }
915}
916
917pub fn visit_expr_func_last_insert_id<V>(_v: &mut V, _node: &FuncLastInsertId)
919where
920 V: Visit + ?Sized,
921{
922 }
924
925pub fn visit_expr_in_list<V>(v: &mut V, node: &ExprInList)
927where
928 V: Visit + ?Sized,
929{
930 v.visit_expr(&node.expr);
931 v.visit_expr(&node.list);
932}
933
934pub fn visit_expr_in_subquery<V>(v: &mut V, node: &ExprInSubquery)
936where
937 V: Visit + ?Sized,
938{
939 v.visit_expr(&node.expr);
940 v.visit_stmt_query(&node.query);
941}
942
943pub fn visit_expr_is_null<V>(v: &mut V, node: &ExprIsNull)
945where
946 V: Visit + ?Sized,
947{
948 v.visit_expr(&node.expr);
949}
950
951pub fn visit_expr_is_variant<V>(v: &mut V, node: &ExprIsVariant)
953where
954 V: Visit + ?Sized,
955{
956 v.visit_expr(&node.expr);
957}
958
959pub fn visit_expr_let<V>(v: &mut V, node: &ExprLet)
961where
962 V: Visit + ?Sized,
963{
964 for binding in &node.bindings {
965 v.visit_expr(binding);
966 }
967 v.visit_expr(&node.body);
968}
969
970pub fn visit_expr_map<V>(v: &mut V, node: &ExprMap)
972where
973 V: Visit + ?Sized,
974{
975 v.visit_expr(&node.base);
976 v.visit_expr(&node.map);
977}
978
979pub fn visit_expr_match<V>(v: &mut V, node: &ExprMatch)
981where
982 V: Visit + ?Sized,
983{
984 v.visit_expr(&node.subject);
985 for arm in &node.arms {
986 v.visit_expr(&arm.expr);
987 }
988 v.visit_expr(&node.else_expr);
989}
990
991pub fn visit_expr_not<V>(v: &mut V, node: &ExprNot)
993where
994 V: Visit + ?Sized,
995{
996 v.visit_expr(&node.expr);
997}
998
999pub fn visit_expr_or<V>(v: &mut V, node: &ExprOr)
1001where
1002 V: Visit + ?Sized,
1003{
1004 for expr in node {
1005 v.visit_expr(expr);
1006 }
1007}
1008
1009pub fn visit_expr_list<V>(v: &mut V, node: &ExprList)
1011where
1012 V: Visit + ?Sized,
1013{
1014 for expr in &node.items {
1015 v.visit_expr(expr);
1016 }
1017}
1018
1019pub fn visit_expr_record<V>(v: &mut V, node: &ExprRecord)
1021where
1022 V: Visit + ?Sized,
1023{
1024 for expr in &**node {
1025 v.visit_expr(expr);
1026 }
1027}
1028
1029pub fn visit_expr_reference<V>(v: &mut V, node: &ExprReference)
1031where
1032 V: Visit + ?Sized,
1033{
1034 match node {
1035 ExprReference::Model { .. } => {}
1036 ExprReference::Field { .. } => {}
1037 ExprReference::Column(expr_column) => v.visit_expr_column(expr_column),
1038 }
1039}
1040
1041pub fn visit_expr_set<V>(v: &mut V, node: &ExprSet)
1043where
1044 V: Visit + ?Sized,
1045{
1046 match node {
1047 ExprSet::Select(expr) => v.visit_stmt_select(expr),
1048 ExprSet::SetOp(expr) => v.visit_expr_set_op(expr),
1049 ExprSet::Update(expr) => v.visit_stmt_update(expr),
1050 ExprSet::Values(expr) => v.visit_values(expr),
1051 ExprSet::Insert(expr) => v.visit_stmt_insert(expr),
1052 }
1053}
1054
1055pub fn visit_expr_set_op<V>(v: &mut V, node: &ExprSetOp)
1057where
1058 V: Visit + ?Sized,
1059{
1060 for operand in &node.operands {
1061 v.visit_expr_set(operand);
1062 }
1063}
1064
1065pub fn visit_expr_stmt<V>(v: &mut V, node: &ExprStmt)
1067where
1068 V: Visit + ?Sized,
1069{
1070 v.visit_stmt(&node.stmt);
1071}
1072
1073pub fn visit_expr_project<V>(v: &mut V, node: &ExprProject)
1075where
1076 V: Visit + ?Sized,
1077{
1078 v.visit_expr(&node.base);
1079 v.visit_projection(&node.projection);
1080}
1081
1082pub fn visit_filter<V>(v: &mut V, node: &Filter)
1084where
1085 V: Visit + ?Sized,
1086{
1087 if let Some(expr) = &node.expr {
1088 v.visit_expr(expr);
1089 }
1090}
1091
1092pub fn visit_condition<V>(v: &mut V, node: &Condition)
1094where
1095 V: Visit + ?Sized,
1096{
1097 if let Some(expr) = &node.expr {
1098 v.visit_expr(expr);
1099 }
1100}
1101
1102pub fn visit_insert_target<V>(v: &mut V, node: &InsertTarget)
1104where
1105 V: Visit + ?Sized,
1106{
1107 if let InsertTarget::Scope(stmt) = node {
1108 v.visit_stmt_query(stmt);
1109 }
1110}
1111
1112pub fn visit_join<V>(v: &mut V, node: &Join)
1114where
1115 V: Visit + ?Sized,
1116{
1117 v.visit_source_table_id(&node.table);
1118 match &node.constraint {
1119 JoinOp::Left(expr) => v.visit_expr(expr),
1120 }
1121}
1122
1123pub fn visit_limit<V>(v: &mut V, node: &Limit)
1125where
1126 V: Visit + ?Sized,
1127{
1128 v.visit_expr(&node.limit);
1129
1130 if let Some(offset) = &node.offset {
1131 v.visit_offset(offset);
1132 }
1133}
1134
1135pub fn visit_offset<V>(v: &mut V, node: &Offset)
1137where
1138 V: Visit + ?Sized,
1139{
1140 match node {
1141 Offset::After(expr) => v.visit_expr(expr),
1142 Offset::Count(expr) => v.visit_expr(expr),
1143 }
1144}
1145
1146pub fn visit_order_by<V>(v: &mut V, node: &OrderBy)
1148where
1149 V: Visit + ?Sized,
1150{
1151 for expr in &node.exprs {
1152 v.visit_order_by_expr(expr);
1153 }
1154}
1155
1156pub fn visit_order_by_expr<V>(v: &mut V, node: &OrderByExpr)
1158where
1159 V: Visit + ?Sized,
1160{
1161 v.visit_expr(&node.expr);
1162}
1163
1164pub fn visit_path<V>(v: &mut V, node: &Path)
1166where
1167 V: Visit + ?Sized,
1168{
1169 v.visit_projection(&node.projection);
1170}
1171
1172pub fn visit_projection<V>(v: &mut V, node: &Projection)
1174where
1175 V: Visit + ?Sized,
1176{
1177}
1178
1179pub fn visit_returning<V>(v: &mut V, node: &Returning)
1181where
1182 V: Visit + ?Sized,
1183{
1184 match node {
1185 Returning::Model { include } => {
1186 for path in include {
1187 v.visit_path(path);
1188 }
1189 }
1190 Returning::Changed => {}
1191 Returning::Expr(expr) => v.visit_expr(expr),
1192 Returning::Value(expr) => v.visit_expr(expr),
1193 }
1194}
1195
1196pub fn visit_source<V>(v: &mut V, node: &Source)
1198where
1199 V: Visit + ?Sized,
1200{
1201 match node {
1202 Source::Model(source_model) => v.visit_source_model(source_model),
1203 Source::Table(source_table) => v.visit_source_table(source_table),
1204 }
1205}
1206
1207pub fn visit_source_model<V>(v: &mut V, node: &SourceModel)
1209where
1210 V: Visit + ?Sized,
1211{
1212 if let Some(association) = &node.via {
1213 v.visit_association(association);
1214 }
1215}
1216
1217pub fn visit_source_table<V>(v: &mut V, node: &SourceTable)
1219where
1220 V: Visit + ?Sized,
1221{
1222 for table_ref in &node.tables {
1223 v.visit_table_ref(table_ref);
1224 }
1225 for table_with_joins in &node.from {
1226 v.visit_table_with_joins(table_with_joins);
1227 }
1228}
1229
1230pub fn visit_source_table_id<V>(v: &mut V, node: &SourceTableId)
1232where
1233 V: Visit + ?Sized,
1234{
1235 }
1237
1238pub fn visit_table_factor<V>(v: &mut V, node: &TableFactor)
1240where
1241 V: Visit + ?Sized,
1242{
1243 match node {
1244 TableFactor::Table(table_id) => v.visit_source_table_id(table_id),
1245 }
1246}
1247
1248pub fn visit_stmt<V>(v: &mut V, node: &Statement)
1250where
1251 V: Visit + ?Sized,
1252{
1253 match node {
1254 Statement::Delete(stmt) => v.visit_stmt_delete(stmt),
1255 Statement::Insert(stmt) => v.visit_stmt_insert(stmt),
1256 Statement::Query(stmt) => v.visit_stmt_query(stmt),
1257 Statement::Update(stmt) => v.visit_stmt_update(stmt),
1258 }
1259}
1260
1261pub fn visit_stmt_delete<V>(v: &mut V, node: &Delete)
1263where
1264 V: Visit + ?Sized,
1265{
1266 v.visit_source(&node.from);
1267 v.visit_filter(&node.filter);
1268
1269 if let Some(returning) = &node.returning {
1270 v.visit_returning(returning);
1271 }
1272}
1273
1274pub fn visit_stmt_insert<V>(v: &mut V, node: &Insert)
1276where
1277 V: Visit + ?Sized,
1278{
1279 if let InsertTarget::Scope(scope) = &node.target {
1280 v.visit_stmt_query(scope);
1281 }
1282 v.visit_stmt_query(&node.source);
1283
1284 if let Some(returning) = &node.returning {
1285 v.visit_returning(returning);
1286 }
1287}
1288
1289pub fn visit_stmt_query<V>(v: &mut V, node: &Query)
1291where
1292 V: Visit + ?Sized,
1293{
1294 if let Some(with) = &node.with {
1295 v.visit_with(with);
1296 }
1297
1298 v.visit_expr_set(&node.body);
1299
1300 if let Some(order_by) = &node.order_by {
1301 v.visit_order_by(order_by);
1302 }
1303
1304 if let Some(limit) = &node.limit {
1305 v.visit_limit(limit);
1306 }
1307}
1308
1309pub fn visit_stmt_select<V>(v: &mut V, node: &Select)
1311where
1312 V: Visit + ?Sized,
1313{
1314 v.visit_source(&node.source);
1315 v.visit_filter(&node.filter);
1316 v.visit_returning(&node.returning);
1317}
1318
1319pub fn visit_stmt_update<V>(v: &mut V, node: &Update)
1321where
1322 V: Visit + ?Sized,
1323{
1324 v.visit_update_target(&node.target);
1325 v.visit_assignments(&node.assignments);
1326 v.visit_filter(&node.filter);
1327 v.visit_condition(&node.condition);
1328}
1329
1330pub fn visit_table_derived<V>(v: &mut V, node: &TableDerived)
1332where
1333 V: Visit + ?Sized,
1334{
1335 v.visit_stmt_query(&node.subquery);
1336}
1337
1338pub fn visit_table_ref<V>(v: &mut V, node: &TableRef)
1340where
1341 V: Visit + ?Sized,
1342{
1343 match node {
1344 TableRef::Cte { .. } => {}
1345 TableRef::Derived(table_derived) => v.visit_table_derived(table_derived),
1346 TableRef::Table(_) => {}
1347 TableRef::Arg(expr_arg) => v.visit_expr_arg(expr_arg),
1348 }
1349}
1350
1351pub fn visit_table_with_joins<V>(v: &mut V, node: &TableWithJoins)
1353where
1354 V: Visit + ?Sized,
1355{
1356 v.visit_table_factor(&node.relation);
1357 for join in &node.joins {
1358 v.visit_join(join);
1359 }
1360}
1361
1362pub fn visit_type<V>(v: &mut V, node: &Type)
1364where
1365 V: Visit + ?Sized,
1366{
1367 }
1369
1370pub fn visit_update_target<V>(v: &mut V, node: &UpdateTarget)
1372where
1373 V: Visit + ?Sized,
1374{
1375 if let UpdateTarget::Query(query) = node {
1376 v.visit_stmt_query(query)
1377 }
1378}
1379
1380pub fn visit_value<V>(v: &mut V, node: &Value)
1382where
1383 V: Visit + ?Sized,
1384{
1385 if let Value::Record(node) = node {
1386 v.visit_value_record(node)
1387 }
1388}
1389
1390pub fn visit_value_record<V>(v: &mut V, node: &ValueRecord)
1392where
1393 V: Visit + ?Sized,
1394{
1395 for value in node.iter() {
1396 v.visit_value(value);
1397 }
1398}
1399
1400pub fn visit_values<V>(v: &mut V, node: &Values)
1402where
1403 V: Visit + ?Sized,
1404{
1405 for expr in &node.rows {
1406 v.visit_expr(expr);
1407 }
1408}
1409
1410pub fn visit_with<V>(v: &mut V, node: &With)
1412where
1413 V: Visit + ?Sized,
1414{
1415 for cte in &node.ctes {
1416 v.visit_cte(cte);
1417 }
1418}
1419
1420pub fn for_each_expr<F>(node: &impl Node, f: F)
1425where
1426 F: FnMut(&Expr),
1427{
1428 struct ForEach<F> {
1429 f: F,
1430 }
1431
1432 impl<F> Visit for ForEach<F>
1433 where
1434 F: FnMut(&Expr),
1435 {
1436 fn visit_expr(&mut self, node: &Expr) {
1437 visit_expr(self, node);
1438 (self.f)(node);
1439 }
1440 }
1441
1442 node.visit(ForEach { f });
1443}