diesel/query_dsl/
boxed_dsl.rs1use crate::dsl;
2use crate::expression::TypedExpressionType;
3use crate::expression::ValidGrouping;
4use crate::query_builder::AsQuery;
5use crate::query_builder::FromClause;
6use crate::query_builder::SelectStatement;
7use crate::query_source::Table;
8use crate::Expression;
9
10#[diagnostic::on_unimplemented(
18 message = "cannot box `{Self}` for backend `{DB}`",
19 note = "this either means `{Self}` is no valid SQL for `{DB}`",
20 note = "or this means `{Self}` uses clauses not supporting boxing like the `LOCKING` or `GROUP BY` clause"
21)]
22pub trait BoxedDsl<'a, DB> {
23 type Output;
25
26 fn internal_into_boxed(self) -> dsl::IntoBoxed<'a, Self, DB>;
28}
29
30#[diagnostic::do_not_recommend]
31impl<'a, T, DB> BoxedDsl<'a, DB> for T
32where
33 T: Table + AsQuery<Query = SelectStatement<FromClause<T>>>,
34 SelectStatement<FromClause<T>>: BoxedDsl<'a, DB>,
35 T::DefaultSelection: Expression<SqlType = T::SqlType> + ValidGrouping<()>,
36 T::SqlType: TypedExpressionType,
37{
38 type Output = dsl::IntoBoxed<'a, SelectStatement<FromClause<T>>, DB>;
39
40 fn internal_into_boxed(self) -> Self::Output {
41 self.as_query().internal_into_boxed()
42 }
43}