1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mod join_methods;

// export
pub use join_methods::*;

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub(crate) enum JoinStatement {
    On(String, String, String),
    OrChain(Box<JoinBuilder>),
    OnVal(String, String, serde_json::Value),
    OnRaw(String, Option<Vec<serde_json::Value>>),
}

impl JoinStatement {
    pub fn as_mut_join_builder(&mut self) -> &mut JoinBuilder {
        match self {
            JoinStatement::OrChain(query) => query,
            _ => panic!("JoinStatement::to_join_builder()"),
        }
    }
}

#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
pub struct JoinBuilder {
    pub(crate) table: String,
    pub(crate) join_type: String,
    pub(crate) statement: Vec<JoinStatement>,
    pub(crate) raw: Option<(String, Option<Vec<serde_json::Value>>)>,
    pub(crate) as_name: Option<String>,
}