Skip to main content

sql_orm_query/
join.rs

1use crate::expr::TableRef;
2use crate::predicate::Predicate;
3use sql_orm_core::Entity;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub enum JoinType {
7    Inner,
8    Left,
9}
10
11#[derive(Debug, Clone, PartialEq)]
12pub struct Join {
13    pub join_type: JoinType,
14    pub table: TableRef,
15    pub on: Predicate,
16}
17
18impl Join {
19    pub const fn new(join_type: JoinType, table: TableRef, on: Predicate) -> Self {
20        Self {
21            join_type,
22            table,
23            on,
24        }
25    }
26
27    pub fn inner(table: TableRef, on: Predicate) -> Self {
28        Self::new(JoinType::Inner, table, on)
29    }
30
31    pub fn left(table: TableRef, on: Predicate) -> Self {
32        Self::new(JoinType::Left, table, on)
33    }
34
35    pub fn inner_entity<E: Entity>(on: Predicate) -> Self {
36        Self::inner(TableRef::for_entity::<E>(), on)
37    }
38
39    pub fn left_entity<E: Entity>(on: Predicate) -> Self {
40        Self::left(TableRef::for_entity::<E>(), on)
41    }
42
43    pub fn inner_entity_as<E: Entity>(alias: &'static str, on: Predicate) -> Self {
44        Self::inner(TableRef::for_entity_as::<E>(alias), on)
45    }
46
47    pub fn left_entity_as<E: Entity>(alias: &'static str, on: Predicate) -> Self {
48        Self::left(TableRef::for_entity_as::<E>(alias), on)
49    }
50}