use crate::types::Vector;
#[derive(Debug, Clone, PartialEq)]
pub struct SelectStatement {
pub table: String,
pub columns: Vec<String>,
pub where_clause: Option<Condition>,
pub order_by: Option<OrderBy>,
pub limit: Option<usize>,
}
#[derive(Debug, Clone, PartialEq)]
pub enum Condition {
Vector(VectorCondition),
Scalar(ScalarCondition),
And(Box<Condition>, Box<Condition>),
Or(Box<Condition>, Box<Condition>),
Not(Box<Condition>),
}
#[derive(Debug, Clone, PartialEq)]
pub struct VectorCondition {
pub column: String,
pub vector: Vector,
pub op: Operator,
pub threshold: f32,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ScalarCondition {
pub field: String,
pub op: Operator,
pub value: Literal,
}
#[derive(Debug, Clone, PartialEq)]
pub enum Operator {
Eq,
NotEq,
Lt,
LtEq,
Gt,
GtEq,
Like,
}
#[derive(Debug, Clone, PartialEq)]
pub enum Literal {
String(String),
Float(f64),
Integer(i64),
Bool(bool),
}
#[derive(Debug, Clone, PartialEq)]
pub struct OrderBy {
pub field: String,
pub descending: bool,
}