nodedb_query/expr/
types.rs1use nodedb_types::Value;
4
5#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
7pub enum SqlExpr {
8 Column(String),
10 Literal(Value),
12 BinaryOp {
14 left: Box<SqlExpr>,
15 op: BinaryOp,
16 right: Box<SqlExpr>,
17 },
18 Negate(Box<SqlExpr>),
20 Function { name: String, args: Vec<SqlExpr> },
22 Cast {
24 expr: Box<SqlExpr>,
25 to_type: CastType,
26 },
27 Case {
29 operand: Option<Box<SqlExpr>>,
30 when_thens: Vec<(SqlExpr, SqlExpr)>,
31 else_expr: Option<Box<SqlExpr>>,
32 },
33 Coalesce(Vec<SqlExpr>),
35 NullIf(Box<SqlExpr>, Box<SqlExpr>),
37 IsNull { expr: Box<SqlExpr>, negated: bool },
39 OldColumn(String),
43}
44
45#[derive(
47 Debug,
48 Clone,
49 Copy,
50 serde::Serialize,
51 serde::Deserialize,
52 zerompk::ToMessagePack,
53 zerompk::FromMessagePack,
54)]
55#[msgpack(c_enum)]
56pub enum BinaryOp {
57 Add,
58 Sub,
59 Mul,
60 Div,
61 Mod,
62 Eq,
63 NotEq,
64 Gt,
65 GtEq,
66 Lt,
67 LtEq,
68 And,
69 Or,
70 Concat,
71}
72
73#[derive(
75 Debug,
76 Clone,
77 serde::Serialize,
78 serde::Deserialize,
79 zerompk::ToMessagePack,
80 zerompk::FromMessagePack,
81)]
82#[msgpack(c_enum)]
83pub enum CastType {
84 Int,
85 Float,
86 String,
87 Bool,
88}
89
90#[derive(
92 Debug,
93 Clone,
94 serde::Serialize,
95 serde::Deserialize,
96 zerompk::ToMessagePack,
97 zerompk::FromMessagePack,
98)]
99pub struct ComputedColumn {
100 pub alias: String,
101 pub expr: SqlExpr,
102}