1use crate::types::SqlPlan;
8
9#[derive(Debug, Clone, PartialEq)]
11pub enum SqlValue {
12 Int(i64),
13 Float(f64),
14 String(String),
15 Bool(bool),
16 Null,
17 Bytes(Vec<u8>),
18 Array(Vec<SqlValue>),
19}
20
21#[derive(Debug, Clone)]
23pub enum SqlExpr {
24 Column { table: Option<String>, name: String },
26 Literal(SqlValue),
28 BinaryOp {
30 left: Box<SqlExpr>,
31 op: BinaryOp,
32 right: Box<SqlExpr>,
33 },
34 UnaryOp { op: UnaryOp, expr: Box<SqlExpr> },
36 Function {
38 name: String,
39 args: Vec<SqlExpr>,
40 distinct: bool,
41 },
42 Case {
44 operand: Option<Box<SqlExpr>>,
45 when_then: Vec<(SqlExpr, SqlExpr)>,
46 else_expr: Option<Box<SqlExpr>>,
47 },
48 Cast { expr: Box<SqlExpr>, to_type: String },
50 Subquery(Box<SqlPlan>),
52 Wildcard,
54 IsNull { expr: Box<SqlExpr>, negated: bool },
56 InList {
58 expr: Box<SqlExpr>,
59 list: Vec<SqlExpr>,
60 negated: bool,
61 },
62 Between {
64 expr: Box<SqlExpr>,
65 low: Box<SqlExpr>,
66 high: Box<SqlExpr>,
67 negated: bool,
68 },
69 Like {
71 expr: Box<SqlExpr>,
72 pattern: Box<SqlExpr>,
73 negated: bool,
74 },
75 ArrayLiteral(Vec<SqlExpr>),
77}
78
79#[derive(Debug, Clone, Copy, PartialEq, Eq)]
81pub enum BinaryOp {
82 Add,
84 Sub,
85 Mul,
86 Div,
87 Mod,
88 Eq,
90 Ne,
91 Gt,
92 Ge,
93 Lt,
94 Le,
95 And,
97 Or,
98 Concat,
100}
101
102#[derive(Debug, Clone, Copy, PartialEq, Eq)]
104pub enum UnaryOp {
105 Neg,
106 Not,
107}
108
109#[derive(Debug, Clone, PartialEq, Eq)]
111pub enum SqlDataType {
112 Int64,
113 Float64,
114 String,
115 Bool,
116 Bytes,
117 Timestamp,
118 Decimal,
119 Uuid,
120 Vector(usize),
121 Geometry,
122}