sql-orm-query 0.1.0

Query AST and builder primitives for sql-orm.
Documentation
use crate::expr::TableRef;
use crate::predicate::Predicate;
use sql_orm_core::Entity;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum JoinType {
    Inner,
    Left,
}

#[derive(Debug, Clone, PartialEq)]
pub struct Join {
    pub join_type: JoinType,
    pub table: TableRef,
    pub on: Predicate,
}

impl Join {
    pub const fn new(join_type: JoinType, table: TableRef, on: Predicate) -> Self {
        Self {
            join_type,
            table,
            on,
        }
    }

    pub fn inner(table: TableRef, on: Predicate) -> Self {
        Self::new(JoinType::Inner, table, on)
    }

    pub fn left(table: TableRef, on: Predicate) -> Self {
        Self::new(JoinType::Left, table, on)
    }

    pub fn inner_entity<E: Entity>(on: Predicate) -> Self {
        Self::inner(TableRef::for_entity::<E>(), on)
    }

    pub fn left_entity<E: Entity>(on: Predicate) -> Self {
        Self::left(TableRef::for_entity::<E>(), on)
    }

    pub fn inner_entity_as<E: Entity>(alias: &'static str, on: Predicate) -> Self {
        Self::inner(TableRef::for_entity_as::<E>(alias), on)
    }

    pub fn left_entity_as<E: Entity>(alias: &'static str, on: Predicate) -> Self {
        Self::left(TableRef::for_entity_as::<E>(alias), on)
    }
}