use crate::expr::SqlExpr;
#[derive(
Debug,
Clone,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub struct WindowFuncSpec {
pub alias: String,
pub func_name: String,
pub args: Vec<SqlExpr>,
pub partition_by: Vec<String>,
pub order_by: Vec<(String, bool)>,
pub frame: WindowFrame,
}
#[derive(
Debug,
Clone,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub struct WindowFrame {
pub mode: String,
pub start: FrameBound,
pub end: FrameBound,
}
impl Default for WindowFrame {
fn default() -> Self {
Self {
mode: "range".into(),
start: FrameBound::UnboundedPreceding,
end: FrameBound::CurrentRow,
}
}
}
#[derive(
Debug,
Clone,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub enum FrameBound {
UnboundedPreceding,
Preceding(u64),
CurrentRow,
Following(u64),
UnboundedFollowing,
}