1use crate::query::QueryBuilder;
4use serde_json::Value;
5
6#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
8pub enum Client {
9 Mysql,
11 Postgres,
13 Sqlite,
15}
16
17#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
19pub enum Statement {
20 Value(String, crate::query::Operator, Value),
22 SubChain(Box<QueryBuilder>),
24 OrChain(Box<QueryBuilder>),
26 Raw((String, Option<Vec<Value>>)),
28}
29
30impl Statement {
31 pub fn to_query_builder(&mut self) -> &mut QueryBuilder {
33 match self {
34 Statement::OrChain(query) => query,
35 Statement::SubChain(query) => query,
36 _ => panic!("Statement::to_query_builder() called on non-chain statement"),
37 }
38 }
39}
40
41#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq)]
43pub enum Method {
44 Select,
46 Insert,
48 InsertMany,
50 Update,
52 Delete,
54}
55
56#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
58pub enum Select {
59 Columns(Vec<String>),
61 Raw(String, Option<Vec<Value>>),
63 Builder(String, crate::builder::ChainBuilder),
65}
66
67#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
69pub enum Common {
70 With(String, bool, crate::builder::ChainBuilder),
72 Union(bool, crate::builder::ChainBuilder),
74 Limit(usize),
76 Offset(usize),
78 GroupBy(Vec<String>),
80 GroupByRaw(String, Option<Vec<Value>>),
82 Having(String, Option<Vec<Value>>),
84 OrderBy(String, String),
86 OrderByRaw(String, Option<Vec<Value>>),
88}