use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum WindowFunctionType {
RowNumber,
Rank,
DenseRank,
}
impl WindowFunctionType {
#[must_use]
pub fn default_alias(&self) -> &'static str {
match self {
Self::RowNumber => "row_number",
Self::Rank => "rank",
Self::DenseRank => "dense_rank",
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct WindowOrderBy {
pub column: String,
pub descending: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OverClause {
#[serde(default)]
pub partition_by: Vec<String>,
#[serde(default)]
pub order_by: Vec<WindowOrderBy>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct WindowFunction {
pub function_type: WindowFunctionType,
pub over_clause: OverClause,
pub alias: Option<String>,
}