(
&self,
window_expr: &[Expr],
select: &mut SelectBuilder,
agg: Option<&Aggregate>,
)
| 479 | } |
| 480 | |
| 481 | fn project_window_output( |
| 482 | &self, |
| 483 | window_expr: &[Expr], |
| 484 | select: &mut SelectBuilder, |
| 485 | agg: Option<&Aggregate>, |
| 486 | ) -> Result<()> { |
| 487 | let mut items = if select.already_projected() { |
| 488 | select.pop_projections() |
| 489 | } else { |
| 490 | vec![ast::SelectItem::Wildcard( |
| 491 | ast::WildcardAdditionalOptions::default(), |
| 492 | )] |
| 493 | }; |
| 494 | |
| 495 | items.extend( |
| 496 | window_expr |
| 497 | .iter() |
| 498 | .map(|expr| { |
| 499 | let expr = if let Some(agg) = agg { |
| 500 | unproject_agg_exprs(expr.clone(), agg, None)? |
| 501 | } else { |
| 502 | expr.clone() |
| 503 | }; |
| 504 | self.select_item_to_sql(&expr) |
| 505 | }) |
| 506 | .collect::<Result<Vec<_>>>()?, |
| 507 | ); |
| 508 | select.projection(items); |
| 509 | |
| 510 | Ok(()) |
| 511 | } |
| 512 | |
| 513 | fn window_input_requires_derived_subquery(plan: &LogicalPlan) -> bool { |
| 514 | // These operators either produce a SELECT list or apply SQL clauses |
no test coverage detected