use nodedb_types::Value;
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum SqlExpr {
Column(String),
Literal(Value),
BinaryOp {
left: Box<SqlExpr>,
op: BinaryOp,
right: Box<SqlExpr>,
},
Negate(Box<SqlExpr>),
Function { name: String, args: Vec<SqlExpr> },
Cast {
expr: Box<SqlExpr>,
to_type: CastType,
},
Case {
operand: Option<Box<SqlExpr>>,
when_thens: Vec<(SqlExpr, SqlExpr)>,
else_expr: Option<Box<SqlExpr>>,
},
Coalesce(Vec<SqlExpr>),
NullIf(Box<SqlExpr>, Box<SqlExpr>),
IsNull { expr: Box<SqlExpr>, negated: bool },
OldColumn(String),
}
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
#[msgpack(c_enum)]
pub enum BinaryOp {
Add,
Sub,
Mul,
Div,
Mod,
Eq,
NotEq,
Gt,
GtEq,
Lt,
LtEq,
And,
Or,
Concat,
}
#[derive(
Debug,
Clone,
PartialEq,
Eq,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
#[msgpack(c_enum)]
pub enum CastType {
Int,
Float,
String,
Bool,
}
#[derive(
Debug,
Clone,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub struct ComputedColumn {
pub alias: String,
pub expr: SqlExpr,
}