use crate::lib::ast::predule::{
BetweenExpression, BinaryOperatorExpression, CallExpression, ListExpression,
NotBetweenExpression, ParenthesesExpression, SelectColumn, SubqueryExpression,
UnaryOperatorExpression, WhereClause,
};
use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Clone, Debug, PartialEq)]
pub enum SQLExpression {
Unary(Box<UnaryOperatorExpression>), Binary(Box<BinaryOperatorExpression>), Between(Box<BetweenExpression>), NotBetween(Box<NotBetweenExpression>), Parentheses(Box<ParenthesesExpression>), FunctionCall(CallExpression), Subquery(SubqueryExpression),
Integer(i64),
Float(f64),
Boolean(bool),
String(String),
List(ListExpression),
SelectColumn(SelectColumn),
Null,
}
impl SQLExpression {
pub fn is_unary(&self) -> bool {
#[allow(clippy::match_like_matches_macro)]
match self.clone() {
Self::Unary(_) => true,
_ => false,
}
}
}
impl From<SQLExpression> for WhereClause {
fn from(value: SQLExpression) -> WhereClause {
WhereClause {
expression: Some(Box::new(value)),
}
}
}
impl From<SQLExpression> for Option<Box<SQLExpression>> {
fn from(value: SQLExpression) -> Option<Box<SQLExpression>> {
Some(Box::new(value))
}
}