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