| 677 | /// may appear in expressions such as `IN (SELECT ...)`. |
| 678 | #[cfg_attr(feature = "recursive_protection", recursive::recursive)] |
| 679 | pub fn visit_with_subqueries<V: for<'n> TreeNodeVisitor<'n, Node = Self>>( |
| 680 | &self, |
| 681 | visitor: &mut V, |
| 682 | ) -> Result<TreeNodeRecursion> { |
| 683 | visitor |
| 684 | .f_down(self)? |
| 685 | .visit_children(|| { |
| 686 | self.apply_subqueries(|c| c.visit_with_subqueries(visitor))? |
| 687 | .visit_sibling(|| { |
| 688 | self.apply_children(|c| c.visit_with_subqueries(visitor)) |
| 689 | }) |
| 690 | })? |
| 691 | .visit_parent(|| visitor.f_up(self)) |
| 692 | } |
| 693 | |
| 694 | /// Similarly to [`Self::rewrite`], rewrites this node and its inputs using `f`, |
| 695 | /// including subqueries that may appear in expressions such as `IN (SELECT |