use crate::types::SqlPlan;
#[derive(Debug, Clone, PartialEq)]
pub enum SqlValue {
Int(i64),
Float(f64),
String(String),
Bool(bool),
Null,
Bytes(Vec<u8>),
Array(Vec<SqlValue>),
}
#[derive(Debug, Clone)]
pub enum SqlExpr {
Column { table: Option<String>, name: String },
Literal(SqlValue),
BinaryOp {
left: Box<SqlExpr>,
op: BinaryOp,
right: Box<SqlExpr>,
},
UnaryOp { op: UnaryOp, expr: Box<SqlExpr> },
Function {
name: String,
args: Vec<SqlExpr>,
distinct: bool,
},
Case {
operand: Option<Box<SqlExpr>>,
when_then: Vec<(SqlExpr, SqlExpr)>,
else_expr: Option<Box<SqlExpr>>,
},
Cast { expr: Box<SqlExpr>, to_type: String },
Subquery(Box<SqlPlan>),
Wildcard,
IsNull { expr: Box<SqlExpr>, negated: bool },
InList {
expr: Box<SqlExpr>,
list: Vec<SqlExpr>,
negated: bool,
},
Between {
expr: Box<SqlExpr>,
low: Box<SqlExpr>,
high: Box<SqlExpr>,
negated: bool,
},
Like {
expr: Box<SqlExpr>,
pattern: Box<SqlExpr>,
negated: bool,
},
ArrayLiteral(Vec<SqlExpr>),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BinaryOp {
Add,
Sub,
Mul,
Div,
Mod,
Eq,
Ne,
Gt,
Ge,
Lt,
Le,
And,
Or,
Concat,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum UnaryOp {
Neg,
Not,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SqlDataType {
Int64,
Float64,
String,
Bool,
Bytes,
Timestamp,
Decimal,
Uuid,
Vector(usize),
Geometry,
}