use std::time::Duration;
use super::{
expressions::Expr, memory::Parameter, Guard, Origin, StreamReference, Type, WindowReference,
};
#[derive(Debug, Clone)]
pub struct Window {
pub wref: WindowReference,
pub op: WindowOperation,
pub target: StreamReference,
pub caller: StreamReference,
pub origin: Origin,
pub origin_pacing: Guard,
pub kind: WindowKind,
pub ty: Type,
}
#[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd)]
pub enum WindowOperation {
Sum,
Average,
Conjunction,
Disjunction,
Min,
Max,
Integral,
Count,
Product,
Last,
Variance,
Covariance,
StandardDeviation,
NthPercentile(u8),
}
impl WindowOperation {
pub fn returns_option(&self) -> bool {
match self {
WindowOperation::Sum
| WindowOperation::Conjunction
| WindowOperation::Disjunction
| WindowOperation::Integral
| WindowOperation::Count
| WindowOperation::Product => false,
WindowOperation::Average
| WindowOperation::Min
| WindowOperation::Max
| WindowOperation::Last
| WindowOperation::Variance
| WindowOperation::Covariance
| WindowOperation::StandardDeviation
| WindowOperation::NthPercentile(_) => true,
}
}
}
#[derive(Debug, Clone)]
pub enum WindowKind {
Sliding {
duration: Duration,
bucket_count: usize,
bucket_duration: Duration,
wait: bool,
},
Discrete {
num_values: usize,
wait: bool,
},
Instances {
selection: InstanceSelection,
},
}
#[derive(Debug, Clone)]
pub enum InstanceSelection {
All,
Fresh,
FilteredAll {
parameters: Vec<Parameter>,
cond: Expr,
},
FilteredFresh {
parameters: Vec<Parameter>,
cond: Expr,
},
}