chain_builder/
types.rs

1//! Core types and enums for the Chain Builder library
2
3use crate::query::QueryBuilder;
4use serde_json::Value;
5
6/// Supported database clients
7#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
8pub enum Client {
9    /// MySQL database
10    Mysql,
11    /// PostgreSQL database (not yet implemented)
12    Postgres,
13    /// SQLite database
14    Sqlite,
15}
16
17/// SQL statement types for WHERE clauses
18#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
19pub enum Statement {
20    /// Simple value comparison: column, operator, value
21    Value(String, crate::query::Operator, Value),
22    /// Subquery with AND logic
23    SubChain(Box<QueryBuilder>),
24    /// Subquery with OR logic
25    OrChain(Box<QueryBuilder>),
26    /// Raw SQL statement with optional bind parameters
27    Raw((String, Option<Vec<Value>>)),
28}
29
30impl Statement {
31    /// Convert statement to a mutable query builder reference
32    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/// SQL operation methods
42#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq)]
43pub enum Method {
44    /// SELECT operation
45    Select,
46    /// INSERT operation
47    Insert,
48    /// INSERT multiple rows
49    InsertMany,
50    /// UPDATE operation
51    Update,
52    /// DELETE operation
53    Delete,
54}
55
56/// SELECT clause types
57#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
58pub enum Select {
59    /// Column names to select
60    Columns(Vec<String>),
61    /// Raw SQL with optional bind parameters
62    Raw(String, Option<Vec<Value>>),
63    /// Subquery as a column
64    Builder(String, crate::builder::ChainBuilder),
65}
66
67/// Common SQL clauses (WITH, UNION, LIMIT, etc.)
68#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
69pub enum Common {
70    /// WITH clause (CTE)
71    With(String, bool, crate::builder::ChainBuilder),
72    /// UNION clause
73    Union(bool, crate::builder::ChainBuilder),
74    /// LIMIT clause
75    Limit(usize),
76    /// OFFSET clause
77    Offset(usize),
78    /// GROUP BY clause
79    GroupBy(Vec<String>),
80    /// Raw GROUP BY clause
81    GroupByRaw(String, Option<Vec<Value>>),
82    /// HAVING clause
83    Having(String, Option<Vec<Value>>),
84    /// ORDER BY clause
85    OrderBy(String, String),
86    /// Raw ORDER BY clause
87    OrderByRaw(String, Option<Vec<Value>>),
88}