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 {
15 fn visit<N: Node>(&mut self, i: &N)
16 where
17 Self: Sized,
18 {
19 i.visit(self);
20 }
21
22 fn visit_assignment(&mut self, i: &Assignment) {
23 visit_assignment(self, i);
24 }
25
26 fn visit_assignments(&mut self, i: &Assignments) {
27 visit_assignments(self, i);
28 }
29
30 fn visit_association(&mut self, i: &Association) {
31 visit_association(self, i);
32 }
33
34 fn visit_cte(&mut self, i: &Cte) {
35 visit_cte(self, i);
36 }
37
38 fn visit_expr(&mut self, i: &Expr) {
39 visit_expr(self, i);
40 }
41
42 fn visit_expr_and(&mut self, i: &ExprAnd) {
43 visit_expr_and(self, i);
44 }
45
46 fn visit_expr_any(&mut self, i: &ExprAny) {
47 visit_expr_any(self, i);
48 }
49
50 fn visit_expr_arg(&mut self, i: &ExprArg) {
51 visit_expr_arg(self, i);
52 }
53
54 fn visit_expr_binary_op(&mut self, i: &ExprBinaryOp) {
55 visit_expr_binary_op(self, i);
56 }
57
58 fn visit_expr_cast(&mut self, i: &ExprCast) {
59 visit_expr_cast(self, i);
60 }
61
62 fn visit_expr_column(&mut self, i: &ExprColumn) {
63 visit_expr_column(self, i);
64 }
65
66 fn visit_expr_default(&mut self) {
67 visit_expr_default(self);
68 }
69
70 fn visit_expr_error(&mut self, i: &ExprError) {
71 visit_expr_error(self, i);
72 }
73
74 fn visit_expr_exists(&mut self, i: &ExprExists) {
75 visit_expr_exists(self, i);
76 }
77
78 fn visit_expr_func(&mut self, i: &ExprFunc) {
79 visit_expr_func(self, i);
80 }
81
82 fn visit_expr_func_count(&mut self, i: &FuncCount) {
83 visit_expr_func_count(self, i);
84 }
85
86 fn visit_expr_func_last_insert_id(&mut self, i: &FuncLastInsertId) {
87 visit_expr_func_last_insert_id(self, i);
88 }
89
90 fn visit_expr_in_list(&mut self, i: &ExprInList) {
91 visit_expr_in_list(self, i);
92 }
93
94 fn visit_expr_in_subquery(&mut self, i: &ExprInSubquery) {
95 visit_expr_in_subquery(self, i);
96 }
97
98 fn visit_expr_is_null(&mut self, i: &ExprIsNull) {
99 visit_expr_is_null(self, i);
100 }
101
102 fn visit_expr_is_variant(&mut self, i: &ExprIsVariant) {
103 visit_expr_is_variant(self, i);
104 }
105
106 fn visit_expr_let(&mut self, i: &ExprLet) {
107 visit_expr_let(self, i);
108 }
109
110 fn visit_expr_map(&mut self, i: &ExprMap) {
111 visit_expr_map(self, i);
112 }
113
114 fn visit_expr_match(&mut self, i: &ExprMatch) {
115 visit_expr_match(self, i);
116 }
117
118 fn visit_expr_not(&mut self, i: &ExprNot) {
119 visit_expr_not(self, i);
120 }
121
122 fn visit_expr_or(&mut self, i: &ExprOr) {
123 visit_expr_or(self, i);
124 }
125
126 fn visit_expr_list(&mut self, i: &ExprList) {
127 visit_expr_list(self, i);
128 }
129
130 fn visit_expr_record(&mut self, i: &ExprRecord) {
131 visit_expr_record(self, i);
132 }
133
134 fn visit_expr_reference(&mut self, i: &ExprReference) {
135 visit_expr_reference(self, i);
136 }
137
138 fn visit_expr_set(&mut self, i: &ExprSet) {
139 visit_expr_set(self, i);
140 }
141
142 fn visit_expr_set_op(&mut self, i: &ExprSetOp) {
143 visit_expr_set_op(self, i);
144 }
145
146 fn visit_expr_stmt(&mut self, i: &ExprStmt) {
147 visit_expr_stmt(self, i);
148 }
149
150 fn visit_filter(&mut self, i: &Filter) {
151 visit_filter(self, i);
152 }
153
154 fn visit_condition(&mut self, i: &Condition) {
155 visit_condition(self, i);
156 }
157
158 fn visit_expr_project(&mut self, i: &ExprProject) {
159 visit_expr_project(self, i);
160 }
161
162 fn visit_insert_target(&mut self, i: &InsertTarget) {
163 visit_insert_target(self, i);
164 }
165
166 fn visit_join(&mut self, i: &Join) {
167 visit_join(self, i);
168 }
169
170 fn visit_limit(&mut self, i: &Limit) {
171 visit_limit(self, i);
172 }
173
174 fn visit_offset(&mut self, i: &Offset) {
175 visit_offset(self, i);
176 }
177
178 fn visit_order_by(&mut self, i: &OrderBy) {
179 visit_order_by(self, i);
180 }
181
182 fn visit_order_by_expr(&mut self, i: &OrderByExpr) {
183 visit_order_by_expr(self, i);
184 }
185
186 fn visit_path(&mut self, i: &Path) {
187 visit_path(self, i);
188 }
189
190 fn visit_projection(&mut self, i: &Projection) {
191 visit_projection(self, i);
192 }
193
194 fn visit_returning(&mut self, i: &Returning) {
195 visit_returning(self, i);
196 }
197
198 fn visit_source(&mut self, i: &Source) {
199 visit_source(self, i);
200 }
201
202 fn visit_source_model(&mut self, i: &SourceModel) {
203 visit_source_model(self, i);
204 }
205
206 fn visit_source_table(&mut self, i: &SourceTable) {
207 visit_source_table(self, i);
208 }
209
210 fn visit_source_table_id(&mut self, i: &SourceTableId) {
211 visit_source_table_id(self, i);
212 }
213
214 fn visit_stmt(&mut self, i: &Statement) {
215 visit_stmt(self, i);
216 }
217
218 fn visit_stmt_delete(&mut self, i: &Delete) {
219 visit_stmt_delete(self, i);
220 }
221
222 fn visit_stmt_insert(&mut self, i: &Insert) {
223 visit_stmt_insert(self, i);
224 }
225
226 fn visit_stmt_query(&mut self, i: &Query) {
227 visit_stmt_query(self, i);
228 }
229
230 fn visit_stmt_select(&mut self, i: &Select) {
231 visit_stmt_select(self, i);
232 }
233
234 fn visit_stmt_update(&mut self, i: &Update) {
235 visit_stmt_update(self, i);
236 }
237
238 fn visit_table_derived(&mut self, i: &TableDerived) {
239 visit_table_derived(self, i);
240 }
241
242 fn visit_table_ref(&mut self, i: &TableRef) {
243 visit_table_ref(self, i);
244 }
245
246 fn visit_table_factor(&mut self, i: &TableFactor) {
247 visit_table_factor(self, i);
248 }
249
250 fn visit_table_with_joins(&mut self, i: &TableWithJoins) {
251 visit_table_with_joins(self, i);
252 }
253
254 fn visit_type(&mut self, i: &Type) {
255 visit_type(self, i);
256 }
257
258 fn visit_update_target(&mut self, i: &UpdateTarget) {
259 visit_update_target(self, i);
260 }
261
262 fn visit_value(&mut self, i: &Value) {
263 visit_value(self, i);
264 }
265
266 fn visit_value_record(&mut self, i: &ValueRecord) {
267 visit_value_record(self, i);
268 }
269
270 fn visit_values(&mut self, i: &Values) {
271 visit_values(self, i);
272 }
273
274 fn visit_with(&mut self, i: &With) {
275 visit_with(self, i);
276 }
277}
278
279impl<V: Visit> Visit for &mut V {
280 fn visit_assignment(&mut self, i: &Assignment) {
281 Visit::visit_assignment(&mut **self, i);
282 }
283
284 fn visit_assignments(&mut self, i: &Assignments) {
285 Visit::visit_assignments(&mut **self, i);
286 }
287
288 fn visit_association(&mut self, i: &Association) {
289 Visit::visit_association(&mut **self, i);
290 }
291
292 fn visit_cte(&mut self, i: &Cte) {
293 Visit::visit_cte(&mut **self, i);
294 }
295
296 fn visit_expr(&mut self, i: &Expr) {
297 Visit::visit_expr(&mut **self, i);
298 }
299
300 fn visit_expr_and(&mut self, i: &ExprAnd) {
301 Visit::visit_expr_and(&mut **self, i);
302 }
303
304 fn visit_expr_arg(&mut self, i: &ExprArg) {
305 Visit::visit_expr_arg(&mut **self, i);
306 }
307
308 fn visit_expr_binary_op(&mut self, i: &ExprBinaryOp) {
309 Visit::visit_expr_binary_op(&mut **self, i);
310 }
311
312 fn visit_expr_cast(&mut self, i: &ExprCast) {
313 Visit::visit_expr_cast(&mut **self, i);
314 }
315
316 fn visit_expr_column(&mut self, i: &ExprColumn) {
317 Visit::visit_expr_column(&mut **self, i);
318 }
319
320 fn visit_expr_default(&mut self) {
321 Visit::visit_expr_default(&mut **self);
322 }
323
324 fn visit_expr_error(&mut self, i: &ExprError) {
325 Visit::visit_expr_error(&mut **self, i);
326 }
327
328 fn visit_expr_exists(&mut self, i: &ExprExists) {
329 Visit::visit_expr_exists(&mut **self, i);
330 }
331
332 fn visit_expr_func(&mut self, i: &ExprFunc) {
333 Visit::visit_expr_func(&mut **self, i);
334 }
335
336 fn visit_expr_func_count(&mut self, i: &FuncCount) {
337 Visit::visit_expr_func_count(&mut **self, i);
338 }
339
340 fn visit_expr_in_list(&mut self, i: &ExprInList) {
341 Visit::visit_expr_in_list(&mut **self, i);
342 }
343
344 fn visit_expr_in_subquery(&mut self, i: &ExprInSubquery) {
345 Visit::visit_expr_in_subquery(&mut **self, i);
346 }
347
348 fn visit_expr_is_null(&mut self, i: &ExprIsNull) {
349 Visit::visit_expr_is_null(&mut **self, i);
350 }
351
352 fn visit_expr_is_variant(&mut self, i: &ExprIsVariant) {
353 Visit::visit_expr_is_variant(&mut **self, i);
354 }
355
356 fn visit_expr_let(&mut self, i: &ExprLet) {
357 Visit::visit_expr_let(&mut **self, i);
358 }
359
360 fn visit_expr_map(&mut self, i: &ExprMap) {
361 Visit::visit_expr_map(&mut **self, i);
362 }
363
364 fn visit_expr_match(&mut self, i: &ExprMatch) {
365 Visit::visit_expr_match(&mut **self, i);
366 }
367
368 fn visit_expr_not(&mut self, i: &ExprNot) {
369 Visit::visit_expr_not(&mut **self, i);
370 }
371
372 fn visit_expr_or(&mut self, i: &ExprOr) {
373 Visit::visit_expr_or(&mut **self, i);
374 }
375
376 fn visit_expr_list(&mut self, i: &ExprList) {
377 Visit::visit_expr_list(&mut **self, i);
378 }
379
380 fn visit_expr_record(&mut self, i: &ExprRecord) {
381 Visit::visit_expr_record(&mut **self, i);
382 }
383
384 fn visit_expr_reference(&mut self, i: &ExprReference) {
385 Visit::visit_expr_reference(&mut **self, i);
386 }
387
388 fn visit_expr_set(&mut self, i: &ExprSet) {
389 Visit::visit_expr_set(&mut **self, i);
390 }
391
392 fn visit_expr_set_op(&mut self, i: &ExprSetOp) {
393 Visit::visit_expr_set_op(&mut **self, i);
394 }
395
396 fn visit_expr_stmt(&mut self, i: &ExprStmt) {
397 Visit::visit_expr_stmt(&mut **self, i);
398 }
399
400 fn visit_filter(&mut self, i: &Filter) {
401 Visit::visit_filter(&mut **self, i);
402 }
403
404 fn visit_condition(&mut self, i: &Condition) {
405 Visit::visit_condition(&mut **self, i);
406 }
407
408 fn visit_expr_project(&mut self, i: &ExprProject) {
409 Visit::visit_expr_project(&mut **self, i);
410 }
411
412 fn visit_insert_target(&mut self, i: &InsertTarget) {
413 Visit::visit_insert_target(&mut **self, i);
414 }
415
416 fn visit_join(&mut self, i: &Join) {
417 Visit::visit_join(&mut **self, i);
418 }
419
420 fn visit_limit(&mut self, i: &Limit) {
421 Visit::visit_limit(&mut **self, i);
422 }
423
424 fn visit_offset(&mut self, i: &Offset) {
425 Visit::visit_offset(&mut **self, i);
426 }
427
428 fn visit_order_by(&mut self, i: &OrderBy) {
429 Visit::visit_order_by(&mut **self, i);
430 }
431
432 fn visit_order_by_expr(&mut self, i: &OrderByExpr) {
433 Visit::visit_order_by_expr(&mut **self, i);
434 }
435
436 fn visit_path(&mut self, i: &Path) {
437 Visit::visit_path(&mut **self, i);
438 }
439
440 fn visit_projection(&mut self, i: &Projection) {
441 Visit::visit_projection(&mut **self, i);
442 }
443
444 fn visit_returning(&mut self, i: &Returning) {
445 Visit::visit_returning(&mut **self, i);
446 }
447
448 fn visit_source(&mut self, i: &Source) {
449 Visit::visit_source(&mut **self, i);
450 }
451
452 fn visit_source_model(&mut self, i: &SourceModel) {
453 Visit::visit_source_model(&mut **self, i);
454 }
455
456 fn visit_source_table(&mut self, i: &SourceTable) {
457 Visit::visit_source_table(&mut **self, i);
458 }
459
460 fn visit_source_table_id(&mut self, i: &SourceTableId) {
461 Visit::visit_source_table_id(&mut **self, i);
462 }
463
464 fn visit_stmt(&mut self, i: &Statement) {
465 Visit::visit_stmt(&mut **self, i);
466 }
467
468 fn visit_stmt_delete(&mut self, i: &Delete) {
469 Visit::visit_stmt_delete(&mut **self, i);
470 }
471
472 fn visit_stmt_insert(&mut self, i: &Insert) {
473 Visit::visit_stmt_insert(&mut **self, i);
474 }
475
476 fn visit_stmt_query(&mut self, i: &Query) {
477 Visit::visit_stmt_query(&mut **self, i);
478 }
479
480 fn visit_stmt_select(&mut self, i: &Select) {
481 Visit::visit_stmt_select(&mut **self, i);
482 }
483
484 fn visit_stmt_update(&mut self, i: &Update) {
485 Visit::visit_stmt_update(&mut **self, i);
486 }
487
488 fn visit_table_derived(&mut self, i: &TableDerived) {
489 Visit::visit_table_derived(&mut **self, i);
490 }
491
492 fn visit_table_ref(&mut self, i: &TableRef) {
493 Visit::visit_table_ref(&mut **self, i);
494 }
495
496 fn visit_table_factor(&mut self, i: &TableFactor) {
497 Visit::visit_table_factor(&mut **self, i);
498 }
499
500 fn visit_table_with_joins(&mut self, i: &TableWithJoins) {
501 Visit::visit_table_with_joins(&mut **self, i);
502 }
503
504 fn visit_type(&mut self, i: &Type) {
505 Visit::visit_type(&mut **self, i);
506 }
507
508 fn visit_update_target(&mut self, i: &UpdateTarget) {
509 Visit::visit_update_target(&mut **self, i);
510 }
511
512 fn visit_value(&mut self, i: &Value) {
513 Visit::visit_value(&mut **self, i);
514 }
515
516 fn visit_value_record(&mut self, i: &ValueRecord) {
517 Visit::visit_value_record(&mut **self, i);
518 }
519
520 fn visit_values(&mut self, i: &Values) {
521 Visit::visit_values(&mut **self, i);
522 }
523
524 fn visit_with(&mut self, i: &With) {
525 Visit::visit_with(&mut **self, i);
526 }
527}
528
529pub fn visit_assignment<V>(v: &mut V, node: &Assignment)
530where
531 V: Visit + ?Sized,
532{
533 v.visit_expr(&node.expr);
534}
535
536pub fn visit_assignments<V>(v: &mut V, node: &Assignments)
537where
538 V: Visit + ?Sized,
539{
540 for (_, assignment) in node.iter() {
541 v.visit_assignment(assignment);
542 }
543}
544
545pub fn visit_association<V>(v: &mut V, node: &Association)
546where
547 V: Visit + ?Sized,
548{
549 v.visit_stmt_query(&node.source);
550}
551
552pub fn visit_cte<V>(v: &mut V, node: &Cte)
553where
554 V: Visit + ?Sized,
555{
556 v.visit_stmt_query(&node.query);
557}
558
559pub fn visit_expr<V>(v: &mut V, node: &Expr)
560where
561 V: Visit + ?Sized,
562{
563 match node {
564 Expr::And(expr) => v.visit_expr_and(expr),
565 Expr::Any(expr) => v.visit_expr_any(expr),
566 Expr::Arg(expr) => v.visit_expr_arg(expr),
567 Expr::BinaryOp(expr) => v.visit_expr_binary_op(expr),
568 Expr::Cast(expr) => v.visit_expr_cast(expr),
569 Expr::Default => v.visit_expr_default(),
570 Expr::Error(expr) => v.visit_expr_error(expr),
571 Expr::Exists(expr) => v.visit_expr_exists(expr),
572 Expr::Func(expr) => v.visit_expr_func(expr),
573 Expr::InList(expr) => v.visit_expr_in_list(expr),
574 Expr::InSubquery(expr) => v.visit_expr_in_subquery(expr),
575 Expr::IsNull(expr) => v.visit_expr_is_null(expr),
576 Expr::IsVariant(expr) => v.visit_expr_is_variant(expr),
577 Expr::Let(expr) => v.visit_expr_let(expr),
578 Expr::Map(expr) => v.visit_expr_map(expr),
579 Expr::Match(expr) => v.visit_expr_match(expr),
580 Expr::Not(expr) => v.visit_expr_not(expr),
581 Expr::Or(expr) => v.visit_expr_or(expr),
582 Expr::Project(expr) => v.visit_expr_project(expr),
583 Expr::Record(expr) => v.visit_expr_record(expr),
584 Expr::Reference(expr) => v.visit_expr_reference(expr),
585 Expr::List(expr) => v.visit_expr_list(expr),
586 Expr::Stmt(expr) => v.visit_expr_stmt(expr),
587 Expr::Value(expr) => v.visit_value(expr),
588 }
589}
590
591pub fn visit_expr_and<V>(v: &mut V, node: &ExprAnd)
592where
593 V: Visit + ?Sized,
594{
595 for expr in node {
596 v.visit_expr(expr);
597 }
598}
599
600pub fn visit_expr_any<V>(v: &mut V, node: &ExprAny)
601where
602 V: Visit + ?Sized,
603{
604 v.visit_expr(&node.expr);
605}
606
607pub fn visit_expr_arg<V>(v: &mut V, node: &ExprArg)
608where
609 V: Visit + ?Sized,
610{
611}
612
613pub fn visit_expr_binary_op<V>(v: &mut V, node: &ExprBinaryOp)
614where
615 V: Visit + ?Sized,
616{
617 v.visit_expr(&node.lhs);
618 v.visit_expr(&node.rhs);
619}
620
621pub fn visit_expr_cast<V>(v: &mut V, node: &ExprCast)
622where
623 V: Visit + ?Sized,
624{
625 v.visit_expr(&node.expr);
626 v.visit_type(&node.ty);
627}
628
629pub fn visit_expr_column<V>(v: &mut V, node: &ExprColumn)
630where
631 V: Visit + ?Sized,
632{
633}
634
635pub fn visit_expr_default<V>(v: &mut V)
636where
637 V: Visit + ?Sized,
638{
639}
640
641pub fn visit_expr_error<V>(v: &mut V, node: &ExprError)
642where
643 V: Visit + ?Sized,
644{
645 }
647
648pub fn visit_expr_exists<V>(v: &mut V, node: &ExprExists)
649where
650 V: Visit + ?Sized,
651{
652 v.visit_stmt_query(&node.subquery);
653}
654
655pub fn visit_expr_func<V>(v: &mut V, node: &ExprFunc)
656where
657 V: Visit + ?Sized,
658{
659 match node {
660 ExprFunc::Count(func) => v.visit_expr_func_count(func),
661 ExprFunc::LastInsertId(func) => v.visit_expr_func_last_insert_id(func),
662 }
663}
664
665pub fn visit_expr_func_count<V>(v: &mut V, node: &FuncCount)
666where
667 V: Visit + ?Sized,
668{
669 if let Some(expr) = &node.arg {
670 v.visit_expr(expr);
671 }
672
673 if let Some(expr) = &node.filter {
674 v.visit_expr(expr);
675 }
676}
677
678pub fn visit_expr_func_last_insert_id<V>(_v: &mut V, _node: &FuncLastInsertId)
679where
680 V: Visit + ?Sized,
681{
682 }
684
685pub fn visit_expr_in_list<V>(v: &mut V, node: &ExprInList)
686where
687 V: Visit + ?Sized,
688{
689 v.visit_expr(&node.expr);
690 v.visit_expr(&node.list);
691}
692
693pub fn visit_expr_in_subquery<V>(v: &mut V, node: &ExprInSubquery)
694where
695 V: Visit + ?Sized,
696{
697 v.visit_expr(&node.expr);
698 v.visit_stmt_query(&node.query);
699}
700
701pub fn visit_expr_is_null<V>(v: &mut V, node: &ExprIsNull)
702where
703 V: Visit + ?Sized,
704{
705 v.visit_expr(&node.expr);
706}
707
708pub fn visit_expr_is_variant<V>(v: &mut V, node: &ExprIsVariant)
709where
710 V: Visit + ?Sized,
711{
712 v.visit_expr(&node.expr);
713}
714
715pub fn visit_expr_let<V>(v: &mut V, node: &ExprLet)
716where
717 V: Visit + ?Sized,
718{
719 for binding in &node.bindings {
720 v.visit_expr(binding);
721 }
722 v.visit_expr(&node.body);
723}
724
725pub fn visit_expr_map<V>(v: &mut V, node: &ExprMap)
726where
727 V: Visit + ?Sized,
728{
729 v.visit_expr(&node.base);
730 v.visit_expr(&node.map);
731}
732
733pub fn visit_expr_match<V>(v: &mut V, node: &ExprMatch)
734where
735 V: Visit + ?Sized,
736{
737 v.visit_expr(&node.subject);
738 for arm in &node.arms {
739 v.visit_expr(&arm.expr);
740 }
741 v.visit_expr(&node.else_expr);
742}
743
744pub fn visit_expr_not<V>(v: &mut V, node: &ExprNot)
745where
746 V: Visit + ?Sized,
747{
748 v.visit_expr(&node.expr);
749}
750
751pub fn visit_expr_or<V>(v: &mut V, node: &ExprOr)
752where
753 V: Visit + ?Sized,
754{
755 for expr in node {
756 v.visit_expr(expr);
757 }
758}
759
760pub fn visit_expr_list<V>(v: &mut V, node: &ExprList)
761where
762 V: Visit + ?Sized,
763{
764 for expr in &node.items {
765 v.visit_expr(expr);
766 }
767}
768
769pub fn visit_expr_record<V>(v: &mut V, node: &ExprRecord)
770where
771 V: Visit + ?Sized,
772{
773 for expr in &**node {
774 v.visit_expr(expr);
775 }
776}
777
778pub fn visit_expr_reference<V>(v: &mut V, node: &ExprReference)
779where
780 V: Visit + ?Sized,
781{
782 match node {
783 ExprReference::Model { .. } => {}
784 ExprReference::Field { .. } => {}
785 ExprReference::Column(expr_column) => v.visit_expr_column(expr_column),
786 }
787}
788
789pub fn visit_expr_set<V>(v: &mut V, node: &ExprSet)
790where
791 V: Visit + ?Sized,
792{
793 match node {
794 ExprSet::Select(expr) => v.visit_stmt_select(expr),
795 ExprSet::SetOp(expr) => v.visit_expr_set_op(expr),
796 ExprSet::Update(expr) => v.visit_stmt_update(expr),
797 ExprSet::Values(expr) => v.visit_values(expr),
798 ExprSet::Insert(expr) => v.visit_stmt_insert(expr),
799 }
800}
801
802pub fn visit_expr_set_op<V>(v: &mut V, node: &ExprSetOp)
803where
804 V: Visit + ?Sized,
805{
806 for operand in &node.operands {
807 v.visit_expr_set(operand);
808 }
809}
810
811pub fn visit_expr_stmt<V>(v: &mut V, node: &ExprStmt)
812where
813 V: Visit + ?Sized,
814{
815 v.visit_stmt(&node.stmt);
816}
817
818pub fn visit_expr_project<V>(v: &mut V, node: &ExprProject)
819where
820 V: Visit + ?Sized,
821{
822 v.visit_expr(&node.base);
823 v.visit_projection(&node.projection);
824}
825
826pub fn visit_filter<V>(v: &mut V, node: &Filter)
827where
828 V: Visit + ?Sized,
829{
830 if let Some(expr) = &node.expr {
831 v.visit_expr(expr);
832 }
833}
834
835pub fn visit_condition<V>(v: &mut V, node: &Condition)
836where
837 V: Visit + ?Sized,
838{
839 if let Some(expr) = &node.expr {
840 v.visit_expr(expr);
841 }
842}
843
844pub fn visit_insert_target<V>(v: &mut V, node: &InsertTarget)
845where
846 V: Visit + ?Sized,
847{
848 if let InsertTarget::Scope(stmt) = node {
849 v.visit_stmt_query(stmt);
850 }
851}
852
853pub fn visit_join<V>(v: &mut V, node: &Join)
854where
855 V: Visit + ?Sized,
856{
857 v.visit_source_table_id(&node.table);
858 match &node.constraint {
859 JoinOp::Left(expr) => v.visit_expr(expr),
860 }
861}
862
863pub fn visit_limit<V>(v: &mut V, node: &Limit)
864where
865 V: Visit + ?Sized,
866{
867 v.visit_expr(&node.limit);
868
869 if let Some(offset) = &node.offset {
870 v.visit_offset(offset);
871 }
872}
873
874pub fn visit_offset<V>(v: &mut V, node: &Offset)
875where
876 V: Visit + ?Sized,
877{
878 match node {
879 Offset::After(expr) => v.visit_expr(expr),
880 Offset::Count(expr) => v.visit_expr(expr),
881 }
882}
883
884pub fn visit_order_by<V>(v: &mut V, node: &OrderBy)
885where
886 V: Visit + ?Sized,
887{
888 for expr in &node.exprs {
889 v.visit_order_by_expr(expr);
890 }
891}
892
893pub fn visit_order_by_expr<V>(v: &mut V, node: &OrderByExpr)
894where
895 V: Visit + ?Sized,
896{
897 v.visit_expr(&node.expr);
898}
899
900pub fn visit_path<V>(v: &mut V, node: &Path)
901where
902 V: Visit + ?Sized,
903{
904 v.visit_projection(&node.projection);
905}
906
907pub fn visit_projection<V>(v: &mut V, node: &Projection)
908where
909 V: Visit + ?Sized,
910{
911}
912
913pub fn visit_returning<V>(v: &mut V, node: &Returning)
914where
915 V: Visit + ?Sized,
916{
917 match node {
918 Returning::Model { include } => {
919 for path in include {
920 v.visit_path(path);
921 }
922 }
923 Returning::Changed => {}
924 Returning::Expr(expr) => v.visit_expr(expr),
925 Returning::Value(expr) => v.visit_expr(expr),
926 }
927}
928
929pub fn visit_source<V>(v: &mut V, node: &Source)
930where
931 V: Visit + ?Sized,
932{
933 match node {
934 Source::Model(source_model) => v.visit_source_model(source_model),
935 Source::Table(source_table) => v.visit_source_table(source_table),
936 }
937}
938
939pub fn visit_source_model<V>(v: &mut V, node: &SourceModel)
940where
941 V: Visit + ?Sized,
942{
943 if let Some(association) = &node.via {
944 v.visit_association(association);
945 }
946}
947
948pub fn visit_source_table<V>(v: &mut V, node: &SourceTable)
949where
950 V: Visit + ?Sized,
951{
952 for table_ref in &node.tables {
953 v.visit_table_ref(table_ref);
954 }
955 for table_with_joins in &node.from {
956 v.visit_table_with_joins(table_with_joins);
957 }
958}
959
960pub fn visit_source_table_id<V>(v: &mut V, node: &SourceTableId)
961where
962 V: Visit + ?Sized,
963{
964 }
966
967pub fn visit_table_factor<V>(v: &mut V, node: &TableFactor)
968where
969 V: Visit + ?Sized,
970{
971 match node {
972 TableFactor::Table(table_id) => v.visit_source_table_id(table_id),
973 }
974}
975
976pub fn visit_stmt<V>(v: &mut V, node: &Statement)
977where
978 V: Visit + ?Sized,
979{
980 match node {
981 Statement::Delete(stmt) => v.visit_stmt_delete(stmt),
982 Statement::Insert(stmt) => v.visit_stmt_insert(stmt),
983 Statement::Query(stmt) => v.visit_stmt_query(stmt),
984 Statement::Update(stmt) => v.visit_stmt_update(stmt),
985 }
986}
987
988pub fn visit_stmt_delete<V>(v: &mut V, node: &Delete)
989where
990 V: Visit + ?Sized,
991{
992 v.visit_source(&node.from);
993 v.visit_filter(&node.filter);
994
995 if let Some(returning) = &node.returning {
996 v.visit_returning(returning);
997 }
998}
999
1000pub fn visit_stmt_insert<V>(v: &mut V, node: &Insert)
1001where
1002 V: Visit + ?Sized,
1003{
1004 if let InsertTarget::Scope(scope) = &node.target {
1005 v.visit_stmt_query(scope);
1006 }
1007 v.visit_stmt_query(&node.source);
1008
1009 if let Some(returning) = &node.returning {
1010 v.visit_returning(returning);
1011 }
1012}
1013
1014pub fn visit_stmt_query<V>(v: &mut V, node: &Query)
1015where
1016 V: Visit + ?Sized,
1017{
1018 if let Some(with) = &node.with {
1019 v.visit_with(with);
1020 }
1021
1022 v.visit_expr_set(&node.body);
1023
1024 if let Some(order_by) = &node.order_by {
1025 v.visit_order_by(order_by);
1026 }
1027
1028 if let Some(limit) = &node.limit {
1029 v.visit_limit(limit);
1030 }
1031}
1032
1033pub fn visit_stmt_select<V>(v: &mut V, node: &Select)
1034where
1035 V: Visit + ?Sized,
1036{
1037 v.visit_source(&node.source);
1038 v.visit_filter(&node.filter);
1039 v.visit_returning(&node.returning);
1040}
1041
1042pub fn visit_stmt_update<V>(v: &mut V, node: &Update)
1043where
1044 V: Visit + ?Sized,
1045{
1046 v.visit_update_target(&node.target);
1047 v.visit_assignments(&node.assignments);
1048 v.visit_filter(&node.filter);
1049 v.visit_condition(&node.condition);
1050}
1051
1052pub fn visit_table_derived<V>(v: &mut V, node: &TableDerived)
1053where
1054 V: Visit + ?Sized,
1055{
1056 v.visit_stmt_query(&node.subquery);
1057}
1058
1059pub fn visit_table_ref<V>(v: &mut V, node: &TableRef)
1060where
1061 V: Visit + ?Sized,
1062{
1063 match node {
1064 TableRef::Cte { .. } => {}
1065 TableRef::Derived(table_derived) => v.visit_table_derived(table_derived),
1066 TableRef::Table(_) => {}
1067 TableRef::Arg(expr_arg) => v.visit_expr_arg(expr_arg),
1068 }
1069}
1070
1071pub fn visit_table_with_joins<V>(v: &mut V, node: &TableWithJoins)
1072where
1073 V: Visit + ?Sized,
1074{
1075 v.visit_table_factor(&node.relation);
1076 for join in &node.joins {
1077 v.visit_join(join);
1078 }
1079}
1080
1081pub fn visit_type<V>(v: &mut V, node: &Type)
1082where
1083 V: Visit + ?Sized,
1084{
1085 }
1087
1088pub fn visit_update_target<V>(v: &mut V, node: &UpdateTarget)
1089where
1090 V: Visit + ?Sized,
1091{
1092 if let UpdateTarget::Query(query) = node {
1093 v.visit_stmt_query(query)
1094 }
1095}
1096
1097pub fn visit_value<V>(v: &mut V, node: &Value)
1098where
1099 V: Visit + ?Sized,
1100{
1101 if let Value::Record(node) = node {
1102 v.visit_value_record(node)
1103 }
1104}
1105
1106pub fn visit_value_record<V>(v: &mut V, node: &ValueRecord)
1107where
1108 V: Visit + ?Sized,
1109{
1110 for value in node.iter() {
1111 v.visit_value(value);
1112 }
1113}
1114
1115pub fn visit_values<V>(v: &mut V, node: &Values)
1116where
1117 V: Visit + ?Sized,
1118{
1119 for expr in &node.rows {
1120 v.visit_expr(expr);
1121 }
1122}
1123
1124pub fn visit_with<V>(v: &mut V, node: &With)
1125where
1126 V: Visit + ?Sized,
1127{
1128 for cte in &node.ctes {
1129 v.visit_cte(cte);
1130 }
1131}
1132
1133pub fn for_each_expr<F>(node: &impl Node, f: F)
1134where
1135 F: FnMut(&Expr),
1136{
1137 struct ForEach<F> {
1138 f: F,
1139 }
1140
1141 impl<F> Visit for ForEach<F>
1142 where
1143 F: FnMut(&Expr),
1144 {
1145 fn visit_expr(&mut self, node: &Expr) {
1146 visit_expr(self, node);
1147 (self.f)(node);
1148 }
1149 }
1150
1151 node.visit(ForEach { f });
1152}