(&mut self, expr: &Expr)
| 78 | type Break = (); |
| 79 | |
| 80 | fn pre_visit_expr(&mut self, expr: &Expr) -> ControlFlow<()> { |
| 81 | if let Expr::Function(f) = expr |
| 82 | && self.functions.is_aggregate(&function_name(f)) |
| 83 | // A function with an OVER clause is a window function, not an |
| 84 | // aggregate. Window functions are handled by the window planner |
| 85 | // and must not trigger the GROUP BY / aggregate plan path. |
| 86 | && f.over.is_none() |
| 87 | { |
| 88 | self.found = true; |
| 89 | return ControlFlow::Break(()); |
| 90 | } |
| 91 | ControlFlow::Continue(()) |
| 92 | } |
| 93 | } |
| 94 | |
| 95 | // ── Extractor ─────────────────────────────────────────────────────── |
nothing calls this directly
no test coverage detected