#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ArrayDimType {
Int64,
Float64,
TimestampMs,
String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ArrayAttrType {
Int64,
Float64,
String,
Bytes,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ArrayCellOrderAst {
RowMajor,
ColMajor,
#[default]
Hilbert,
ZOrder,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ArrayTileOrderAst {
RowMajor,
ColMajor,
#[default]
Hilbert,
ZOrder,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ArrayDomainBound {
Int64(i64),
Float64(f64),
TimestampMs(i64),
String(String),
}
#[derive(Debug, Clone, PartialEq)]
pub struct ArrayDimAst {
pub name: String,
pub dtype: ArrayDimType,
pub lo: ArrayDomainBound,
pub hi: ArrayDomainBound,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ArrayAttrAst {
pub name: String,
pub dtype: ArrayAttrType,
pub nullable: bool,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ArrayCoordLiteral {
Int64(i64),
Float64(f64),
String(String),
}
#[derive(Debug, Clone, PartialEq)]
pub enum ArrayAttrLiteral {
Int64(i64),
Float64(f64),
String(String),
Bytes(Vec<u8>),
Null,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ArrayInsertRow {
pub coords: Vec<ArrayCoordLiteral>,
pub attrs: Vec<ArrayAttrLiteral>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct NamedDimRange {
pub dim: String,
pub lo: ArrayCoordLiteral,
pub hi: ArrayCoordLiteral,
}
#[derive(Debug, Clone, Default, PartialEq)]
pub struct ArraySliceAst {
pub dim_ranges: Vec<NamedDimRange>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ArrayReducerAst {
Sum,
Count,
Min,
Max,
Mean,
}
impl ArrayReducerAst {
pub fn parse(s: &str) -> Option<Self> {
match s.to_ascii_lowercase().as_str() {
"sum" => Some(ArrayReducerAst::Sum),
"count" => Some(ArrayReducerAst::Count),
"min" => Some(ArrayReducerAst::Min),
"max" => Some(ArrayReducerAst::Max),
"mean" | "avg" => Some(ArrayReducerAst::Mean),
_ => None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ArrayBinaryOpAst {
Add,
Sub,
Mul,
Div,
}
impl ArrayBinaryOpAst {
pub fn parse(s: &str) -> Option<Self> {
match s.to_ascii_lowercase().as_str() {
"add" | "+" => Some(ArrayBinaryOpAst::Add),
"sub" | "-" => Some(ArrayBinaryOpAst::Sub),
"mul" | "*" => Some(ArrayBinaryOpAst::Mul),
"div" | "/" => Some(ArrayBinaryOpAst::Div),
_ => None,
}
}
}