diesel/expression/
coerce.rs1use crate::expression::*;
2use crate::query_builder::*;
3use crate::result::QueryResult;
4use crate::sql_types::DieselNumericOps;
5use std::marker::PhantomData;
6
7#[derive(Debug, Copy, Clone, QueryId, DieselNumericOps)]
8#[doc(hidden)]
9pub struct Coerce<T, ST> {
21 expr: T,
22 _marker: PhantomData<ST>,
23}
24
25impl<T, ST> Coerce<T, ST> {
26 pub fn new(expr: T) -> Self {
27 Coerce {
28 expr: expr,
29 _marker: PhantomData,
30 }
31 }
32}
33
34impl<T, ST> Expression for Coerce<T, ST>
35where
36 T: Expression,
37 ST: SqlType + TypedExpressionType,
38{
39 type SqlType = ST;
40}
41
42impl<T, ST, QS> SelectableExpression<QS> for Coerce<T, ST>
43where
44 T: SelectableExpression<QS>,
45 Self: Expression,
46{
47}
48
49impl<T, ST, QS> AppearsOnTable<QS> for Coerce<T, ST>
50where
51 T: AppearsOnTable<QS>,
52 Self: Expression,
53{
54}
55
56impl<T, ST, DB> QueryFragment<DB> for Coerce<T, ST>
57where
58 T: QueryFragment<DB>,
59 DB: Backend,
60{
61 fn walk_ast<'b>(&'b self, pass: AstPass<'_, 'b, DB>) -> QueryResult<()> {
62 self.expr.walk_ast(pass)
63 }
64}
65
66impl<T, ST, GB> ValidGrouping<GB> for Coerce<T, ST>
67where
68 T: ValidGrouping<GB>,
69{
70 type IsAggregate = T::IsAggregate;
71}