deuterium 0.2.1

Deuterium is a fancy SQL builder for Rust. It's designed to provide a DSL to easily build SQL queries in safe and *typed* way.

use from::{RcFrom};
use predicate::{RcPredicate};

use self::Join::*;
use self::ConditionedJoinType::*;
use self::UnconditionedJoinType::*;

#[allow(dead_code)]
#[deriving(Clone)]
pub enum ConditionedJoinType {
    InnerJoin,
    FullOuterJoin,
    RightOuterJoin, 
    LeftOuterJoin,
    FullJoin,
    RightJoin,
    LeftJoin
}

#[allow(dead_code)]
#[deriving(Clone)]
pub enum UnconditionedJoinType {
    NaturalJoin,
    NaturalLeftJoin,
    NaturalRightJoin,
    NaturalFullJoin,
    CrossJoin
}

#[allow(dead_code)]
#[deriving(Clone)]
pub enum Join {
    ConditionedJoin {
        join_type: ConditionedJoinType,
        from: RcFrom,
        on: RcPredicate
    },

    UnconditionedJoin {
        join_type: UnconditionedJoinType,
        from: RcFrom
    }
}

impl Join {
    pub fn inner_join(from: RcFrom, predicate: RcPredicate) -> Join { 
        ConditionedJoin{ join_type: InnerJoin, from: from, on: predicate } 
    }

    pub fn full_outer_join(from: RcFrom, predicate: RcPredicate) -> Join { 
        ConditionedJoin{ join_type: FullOuterJoin, from: from, on: predicate } 
    }

    pub fn right_outer_join(from: RcFrom, predicate: RcPredicate) -> Join { 
        ConditionedJoin{ join_type: RightOuterJoin, from: from, on: predicate } 
    }

    pub fn left_outer_join(from: RcFrom, predicate: RcPredicate) -> Join { 
        ConditionedJoin{ join_type: LeftOuterJoin, from: from, on: predicate } 
    }

    pub fn full_join(from: RcFrom, predicate: RcPredicate) -> Join { 
        ConditionedJoin{ join_type: FullJoin, from: from, on: predicate } 
    }

    pub fn left_join(from: RcFrom, predicate: RcPredicate) -> Join { 
        ConditionedJoin{ join_type: LeftJoin, from: from, on: predicate } 
    }

    pub fn right_join(from: RcFrom, predicate: RcPredicate) -> Join { 
        ConditionedJoin{ join_type: RightJoin, from: from, on: predicate } 
    }

    pub fn natural_join(from: RcFrom) -> Join { 
        UnconditionedJoin{ join_type: NaturalJoin, from: from } 
    }

    pub fn natural_left_join(from: RcFrom) -> Join { 
        UnconditionedJoin{ join_type: NaturalLeftJoin, from: from } 
    }

    pub fn natural_right_join(from: RcFrom) -> Join { 
        UnconditionedJoin{ join_type: NaturalRightJoin, from: from } 
    }

    pub fn natural_full_join(from: RcFrom) -> Join { 
        UnconditionedJoin{ join_type: NaturalFullJoin, from: from } 
    }

    pub fn cross_join(from: RcFrom) -> Join { 
        UnconditionedJoin{ join_type: CrossJoin, from: from } 
    }

}