cartel-sqlite 0.22.0

SQLite driver for the dope runtime
Documentation
use crate::dsl::{agg, scope::never::Never, write};

pub mod join;

pub struct Filter<T>(Never<T>);
pub struct Rows<T>(Never<T>);
pub struct Cte<T>(Never<T>);
pub struct Select<T>(Never<T>);
pub struct Stream<T>(Never<T>);

impl<T> Filter<T> {
    pub fn rows(self) -> Rows<T> {
        self.0.infer(())
    }

    pub fn count(self) -> i64 {
        self.0.infer(())
    }

    pub fn sum<F, U, R>(self, map: F) -> Option<R>
    where
        F: FnOnce(T) -> U,
    {
        self.0.infer(map)
    }

    pub fn avg<F, U, R>(self, map: F) -> Option<R>
    where
        F: FnOnce(T) -> U,
    {
        self.0.infer(map)
    }

    pub fn min<F, U, R>(self, map: F) -> Option<R>
    where
        F: FnOnce(T) -> U,
    {
        self.0.infer(map)
    }

    pub fn max<F, U, R>(self, map: F) -> Option<R>
    where
        F: FnOnce(T) -> U,
    {
        self.0.infer(map)
    }

    pub fn group_by<F, K>(self, key: F) -> agg::Group<T, K>
    where
        F: FnOnce(T) -> K,
    {
        self.0.infer(key)
    }

    pub fn update<F>(self, change: F) -> write::Update<T>
    where
        F: FnOnce(&mut T),
    {
        self.0.infer(change)
    }

    pub fn delete(self) -> write::Delete<T> {
        self.0.infer(())
    }

    pub fn union(self, other: Self) -> Self {
        self.0.infer(other)
    }

    pub fn union_all(self, other: Self) -> Self {
        self.0.infer(other)
    }

    pub fn intersect(self, other: Self) -> Self {
        self.0.infer(other)
    }

    pub fn except(self, other: Self) -> Self {
        self.0.infer(other)
    }

    pub fn cte(self) -> Cte<T> {
        self.0.infer(())
    }
}

impl<T> Rows<T> {
    pub fn one(self) -> T {
        self.0.infer(())
    }

    pub fn first(self) -> Option<T> {
        self.0.infer(())
    }

    pub fn all(self) -> Vec<T> {
        self.0.infer(())
    }

    pub fn stream(self) -> Stream<T> {
        self.0.infer(())
    }

    pub fn order_by<F, U>(self, key: F) -> Self
    where
        F: FnOnce(T) -> U,
    {
        self.0.infer(key)
    }

    pub fn order_desc<F, U>(self, key: F) -> Self
    where
        F: FnOnce(T) -> U,
    {
        self.0.infer(key)
    }

    pub fn limit(self, count: i64) -> Self {
        self.0.infer(count)
    }

    pub fn offset(self, count: i64) -> Self {
        self.0.infer(count)
    }

    pub fn distinct(self) -> Self {
        self.0.infer(())
    }

    pub fn select<F, R>(self, map: F) -> Select<R>
    where
        F: FnOnce(T) -> R,
    {
        self.0.infer(map)
    }
}

impl<T> Cte<T> {
    pub fn filter<F>(self, pred: F) -> Filter<T>
    where
        F: FnOnce(T) -> bool,
    {
        self.0.infer(pred)
    }
}

impl<T> Select<T> {
    pub fn one(self) -> T {
        self.0.infer(())
    }

    pub fn first(self) -> Option<T> {
        self.0.infer(())
    }

    pub fn all(self) -> Vec<T> {
        self.0.infer(())
    }
}