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,
},
}),
})
}