Skip to main content

cartel_sqlite/dsl/
agg.rs

1use crate::dsl::scope::never::Never;
2
3pub struct Group<T, K>(Never<(T, K)>);
4pub struct Handle(Never<()>);
5
6impl<T, K> Group<T, K> {
7    pub fn count(self) -> Vec<(K, i64)> {
8        self.0.infer(())
9    }
10
11    pub fn sum<F, U>(self, map: F) -> Vec<(K, Option<U>)>
12    where
13        F: FnOnce(T) -> U,
14    {
15        self.0.infer(map)
16    }
17
18    pub fn having<F>(self, pred: F) -> Self
19    where
20        F: FnOnce(T, Handle) -> bool,
21    {
22        self.0.infer(pred)
23    }
24
25    pub fn order_by<F, U>(self, key: F) -> Self
26    where
27        F: FnOnce(T) -> U,
28    {
29        self.0.infer(key)
30    }
31}
32
33impl Handle {
34    pub fn count(self) -> i64 {
35        self.0.infer(())
36    }
37}