chain_builder/query/
mod.rs

1//! Query building functionality
2
3pub mod common;
4pub mod join;
5
6use crate::types::{Client, Common, Statement};
7use serde_json::Value;
8
9/// Main query builder for constructing WHERE clauses and other query parts
10#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
11pub struct QueryBuilder {
12    /// WHERE clause statements
13    pub(crate) statement: Vec<Statement>,
14    /// Raw SQL statements
15    pub(crate) raw: Vec<(String, Option<Vec<Value>>)>,
16    /// JOIN clauses
17    pub(crate) join: Vec<join::JoinBuilder>,
18    /// Common clauses (WITH, UNION, LIMIT, etc.)
19    pub(crate) query_common: Vec<Common>,
20    /// Database client type used for nested builders
21    pub(crate) client: Client,
22}
23
24impl QueryBuilder {
25    /// Create a new QueryBuilder for the specified client
26    pub fn new(client: Client) -> Self {
27        Self {
28            statement: Vec::new(),
29            raw: Vec::new(),
30            join: Vec::new(),
31            query_common: Vec::new(),
32            client,
33        }
34    }
35}
36
37impl Default for QueryBuilder {
38    fn default() -> Self {
39        Self::new(Client::Mysql)
40    }
41}
42
43/// SQL comparison operators
44#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq)]
45pub enum Operator {
46    /// Equal (=)
47    Equal,
48    /// Not equal (!=)
49    NotEqual,
50    /// IN operator
51    In,
52    /// NOT IN operator
53    NotIn,
54    /// IS NULL
55    IsNull,
56    /// IS NOT NULL
57    IsNotNull,
58    /// EXISTS
59    Exists,
60    /// NOT EXISTS
61    NotExists,
62    /// BETWEEN
63    Between,
64    /// NOT BETWEEN
65    NotBetween,
66    /// LIKE
67    Like,
68    /// NOT LIKE
69    NotLike,
70    /// Greater than (>)
71    GreaterThan,
72    /// Greater than or equal (>=)
73    GreaterThanOrEqual,
74    /// Less than (<)
75    LessThan,
76    /// Less than or equal (<=)
77    LessThanOrEqual,
78    /// Greater or less than (<>)
79    GreaterORLessThan,
80}