use crate::query::QueryBuilder;
use serde_json::Value;
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum Client {
Mysql,
Postgres,
Sqlite,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum Statement {
Value(String, crate::query::Operator, Value),
SubChain(Box<QueryBuilder>),
OrChain(Box<QueryBuilder>),
Raw((String, Option<Vec<Value>>)),
}
impl Statement {
pub fn to_query_builder(&mut self) -> &mut QueryBuilder {
match self {
Statement::OrChain(query) => query,
Statement::SubChain(query) => query,
_ => panic!("Statement::to_query_builder() called on non-chain statement"),
}
}
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq)]
pub enum Method {
Select,
Insert,
InsertMany,
Update,
Delete,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum Select {
Columns(Vec<String>),
Raw(String, Option<Vec<Value>>),
Builder(String, crate::builder::ChainBuilder),
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum Common {
With(String, bool, crate::builder::ChainBuilder),
Union(bool, crate::builder::ChainBuilder),
Limit(usize),
Offset(usize),
GroupBy(Vec<String>),
GroupByRaw(String, Option<Vec<Value>>),
Having(String, Option<Vec<Value>>),
OrderBy(String, String),
OrderByRaw(String, Option<Vec<Value>>),
}