nodedb_query/expr/
types.rs1use nodedb_types::Value;
4
5#[derive(Debug, Clone, PartialEq, 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 PartialEq,
51 Eq,
52 serde::Serialize,
53 serde::Deserialize,
54 zerompk::ToMessagePack,
55 zerompk::FromMessagePack,
56)]
57#[msgpack(c_enum)]
58pub enum BinaryOp {
59 Add,
60 Sub,
61 Mul,
62 Div,
63 Mod,
64 Eq,
65 NotEq,
66 Gt,
67 GtEq,
68 Lt,
69 LtEq,
70 And,
71 Or,
72 Concat,
73}
74
75#[derive(
77 Debug,
78 Clone,
79 PartialEq,
80 Eq,
81 serde::Serialize,
82 serde::Deserialize,
83 zerompk::ToMessagePack,
84 zerompk::FromMessagePack,
85)]
86#[msgpack(c_enum)]
87pub enum CastType {
88 Int,
89 Float,
90 String,
91 Bool,
92}
93
94#[derive(
96 Debug,
97 Clone,
98 serde::Serialize,
99 serde::Deserialize,
100 zerompk::ToMessagePack,
101 zerompk::FromMessagePack,
102)]
103pub struct ComputedColumn {
104 pub alias: String,
105 pub expr: SqlExpr,
106}