fn window()

in src/functions.rs [322:356]


fn window(
    name: &str,
    args: Vec<PyExpr>,
    partition_by: Option<Vec<PyExpr>>,
    order_by: Option<Vec<PySortExpr>>,
    window_frame: Option<PyWindowFrame>,
    ctx: Option<PySessionContext>,
) -> PyResult<PyExpr> {
    let fun = find_window_fn(name, ctx)?;

    let window_frame = window_frame
        .map(|w| w.into())
        .unwrap_or(WindowFrame::new(order_by.as_ref().map(|v| !v.is_empty())));

    Ok(PyExpr {
        expr: datafusion::logical_expr::Expr::WindowFunction(WindowFunction {
            fun,
            params: WindowFunctionParams {
                args: args.into_iter().map(|x| x.expr).collect::<Vec<_>>(),
                partition_by: partition_by
                    .unwrap_or_default()
                    .into_iter()
                    .map(|x| x.expr)
                    .collect::<Vec<_>>(),
                order_by: order_by
                    .unwrap_or_default()
                    .into_iter()
                    .map(|x| x.into())
                    .collect::<Vec<_>>(),
                window_frame,
                null_treatment: None,
            },
        }),
    })
}