drizzle 0.1.5

A type-safe SQL query builder for Rust
Documentation
#[doc(hidden)]
macro_rules! drizzle_builder_join_impl {
    () => {
        drizzle_builder_join_impl!(natural);
        drizzle_builder_join_impl!(natural_left);
        drizzle_builder_join_impl!(left);
        drizzle_builder_join_impl!(left_outer);
        drizzle_builder_join_impl!(natural_left_outer);
        drizzle_builder_join_impl!(natural_right);
        drizzle_builder_join_impl!(right);
        drizzle_builder_join_impl!(right_outer);
        drizzle_builder_join_impl!(natural_right_outer);
        drizzle_builder_join_impl!(natural_full);
        drizzle_builder_join_impl!(full);
        drizzle_builder_join_impl!(full_outer);
        drizzle_builder_join_impl!(natural_full_outer);
        drizzle_builder_join_impl!(inner);
        drizzle_builder_join_impl!(cross);
    };
    ($type:ident) => {
        paste::paste! {
            pub fn [<$type _join>]<U>(
                self,
                table: U,
                on_condition: impl drizzle_core::ToSQL<'a, drizzle_sqlite::values::SQLiteValue<'a>>,
            ) -> DrizzleBuilder<
                'd,
                Conn,
                Schema,
                SelectBuilder<'a, Schema, SelectJoinSet, T>,
                SelectJoinSet,
            >
            where
                U:  SQLiteTable<'a>,
            {
                let builder = self.builder.[<$type _join>](table, on_condition);
                DrizzleBuilder {
                    drizzle: self.drizzle,
                    builder,
                    state: PhantomData,
                }
            }
        }
    };
}

#[doc(hidden)]
macro_rules! transaction_builder_join_impl {
    ($($lifetimes:lifetime),*) => {
        transaction_builder_join_impl!($($lifetimes),*, natural);
        transaction_builder_join_impl!($($lifetimes),*, natural_left);
        transaction_builder_join_impl!($($lifetimes),*, left);
        transaction_builder_join_impl!($($lifetimes),*, left_outer);
        transaction_builder_join_impl!($($lifetimes),*, natural_left_outer);
        transaction_builder_join_impl!($($lifetimes),*, natural_right);
        transaction_builder_join_impl!($($lifetimes),*, right);
        transaction_builder_join_impl!($($lifetimes),*, right_outer);
        transaction_builder_join_impl!($($lifetimes),*, natural_right_outer);
        transaction_builder_join_impl!($($lifetimes),*, natural_full);
        transaction_builder_join_impl!($($lifetimes),*, full);
        transaction_builder_join_impl!($($lifetimes),*, full_outer);
        transaction_builder_join_impl!($($lifetimes),*, natural_full_outer);
        transaction_builder_join_impl!($($lifetimes),*, inner);
        transaction_builder_join_impl!($($lifetimes),*, cross);
    };
    ($($lifetimes:lifetime),*, $type:ident) => {
        paste::paste! {
            pub fn [<$type _join>]<U>(
                self,
                table: U,
                on_condition: impl drizzle_core::ToSQL<'a, drizzle_sqlite::values::SQLiteValue<'a>>,
            ) -> TransactionBuilder<
                $($lifetimes,)*
                Schema,
                SelectBuilder<'a, Schema, SelectJoinSet, T>,
                SelectJoinSet,
            >
            where
                U:  SQLiteTable<'a>,
            {
                let builder = self.builder.[<$type _join>](table, on_condition);
                TransactionBuilder {
                    transaction: self.transaction,
                    builder,
                    _phantom: PhantomData,
                }
            }
        }
    };
}