1use serde::{Deserialize, Serialize};
4
5use super::expressions::Expr;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
9pub enum JoinType {
10 Inner,
11 Left,
12 Right,
13 Full,
14 Cross,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
19pub enum JoinCondition {
20 On(Expr),
22 Using(Vec<String>),
24 Temporal {
26 left_time: String,
28 right_time: String,
30 within: crate::data::Timeframe,
32 },
33 Natural,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct JoinClause {
40 pub join_type: JoinType,
42 pub right: JoinSource,
44 pub condition: JoinCondition,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
50pub enum JoinSource {
51 Named(String),
53 Subquery(Box<super::queries::Query>),
55 Cte(String),
57}