diesel/query_dsl/
group_by_dsl.rs1use crate::dsl;
2use crate::expression::Expression;
3use crate::expression::TypedExpressionType;
4use crate::expression::ValidGrouping;
5use crate::query_builder::FromClause;
6use crate::query_builder::{AsQuery, SelectStatement};
7use crate::query_source::Table;
8
9pub trait GroupByDsl<Expr: Expression> {
17 type Output;
19
20 fn group_by(self, expr: Expr) -> dsl::GroupBy<Self, Expr>;
22}
23
24#[diagnostic::do_not_recommend]
25impl<T, Expr> GroupByDsl<Expr> for T
26where
27 Expr: Expression,
28 T: Table + AsQuery<Query = SelectStatement<FromClause<T>>>,
29 T::DefaultSelection: Expression<SqlType = T::SqlType> + ValidGrouping<()>,
30 T::SqlType: TypedExpressionType,
31 T::Query: GroupByDsl<Expr>,
32{
33 type Output = dsl::GroupBy<SelectStatement<FromClause<T>>, Expr>;
34
35 fn group_by(self, expr: Expr) -> dsl::GroupBy<Self, Expr> {
36 self.as_query().group_by(expr)
37 }
38}
39
40pub trait ValidDistinctForGroupBy<Selection, GroupBy> {}