use super::core::WindowFunction;
use crate::distributed::dataframe::DistributedDataFrame;
use crate::distributed::execution::{ExecutionPlan, Operation};
use crate::error::Result;
pub trait WindowFunctionExt {
fn window(&self, window_functions: &[WindowFunction]) -> Result<DistributedDataFrame>;
}
impl WindowFunctionExt for DistributedDataFrame {
fn window(&self, window_functions: &[WindowFunction]) -> Result<DistributedDataFrame> {
let window_functions = window_functions.to_vec();
let operation = Operation::Window { window_functions };
if self.is_lazy() {
let mut new_df = self.clone_empty();
new_df.add_pending_operation(operation, vec![self.id().to_string()]);
Ok(new_df)
} else {
self.execute_operation(operation, vec![self.id().to_string()])
}
}
}