diesel/query_builder/
order_clause.rs1use alloc::boxed::Box;
2
3use crate::expression::{ValidGrouping, is_aggregate};
4use alloc::sync::Arc;
5
6use crate::backend::{Backend, DieselReserveSpecialization};
use crate::result::QueryResult;
use crate::query_builder::QueryId;
use super::{QueryFragment, AstPass};
#[doc = r" DSL node that represents that no order clause is set"]
pub struct NoOrderClause;
#[automatically_derived]
impl ::core::fmt::Debug for NoOrderClause {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f, "NoOrderClause")
}
}
#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for NoOrderClause { }
#[automatically_derived]
impl ::core::clone::Clone for NoOrderClause {
#[inline]
fn clone(&self) -> NoOrderClause { *self }
}
#[automatically_derived]
impl ::core::marker::Copy for NoOrderClause { }
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl diesel::query_builder::QueryId for NoOrderClause {
type QueryId = NoOrderClause<>;
const HAS_STATIC_QUERY_ID: bool = true;
const IS_WINDOW_FUNCTION: bool = false;
}
};
impl<DB> QueryFragment<DB> for NoOrderClause where DB: Backend +
DieselReserveSpecialization {
fn walk_ast<'b>(&'b self, _: AstPass<'_, 'b, DB>) -> QueryResult<()> {
Ok(())
}
}
#[doc = r" DSL node that represents that an order clause is set"]
pub struct OrderClause<Expr>(pub Expr);
#[automatically_derived]
impl<Expr: ::core::fmt::Debug> ::core::fmt::Debug for OrderClause<Expr> {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_tuple_field1_finish(f, "OrderClause",
&&self.0)
}
}
#[automatically_derived]
impl<Expr: ::core::clone::Clone> ::core::clone::Clone for OrderClause<Expr> {
#[inline]
fn clone(&self) -> OrderClause<Expr> {
OrderClause(::core::clone::Clone::clone(&self.0))
}
}
#[automatically_derived]
impl<Expr: ::core::marker::Copy> ::core::marker::Copy for OrderClause<Expr> {
}
const _: () =
{
use diesel;
#[allow(non_camel_case_types)]
impl<Expr: diesel::query_builder::QueryId>
diesel::query_builder::QueryId for OrderClause<Expr> {
type QueryId =
OrderClause<<Expr as
diesel::query_builder::QueryId>::QueryId>;
const HAS_STATIC_QUERY_ID: bool =
<Expr as diesel::query_builder::QueryId>::HAS_STATIC_QUERY_ID
&& true;
const IS_WINDOW_FUNCTION: bool =
<Expr as diesel::query_builder::QueryId>::IS_WINDOW_FUNCTION
|| false;
}
};
impl<Expr, DB> QueryFragment<DB> for OrderClause<Expr> where DB: Backend +
DieselReserveSpecialization, Expr: QueryFragment<DB> {
fn walk_ast<'b>(&'b self, mut out: AstPass<'_, 'b, DB>)
-> QueryResult<()> {
out.push_sql(" ORDER BY ");
self.0.walk_ast(out.reborrow())?;
Ok(())
}
}simple_clause!(
7 NoOrderClause,
9 OrderClause,
11 " ORDER BY "
12);
13
14impl<'a, DB, Expr> From<OrderClause<Expr>> for Option<Box<dyn QueryFragment<DB> + Send + 'a>>
15where
16 DB: Backend,
17 Expr: QueryFragment<DB> + Send + 'a,
18{
19 fn from(order: OrderClause<Expr>) -> Self {
20 Some(Box::new(order.0))
21 }
22}
23
24impl<DB> From<NoOrderClause> for Option<Box<dyn QueryFragment<DB> + Send + '_>>
25where
26 DB: Backend,
27{
28 fn from(_: NoOrderClause) -> Self {
29 None
30 }
31}
32
33impl<'a, DB, Expr> From<OrderClause<Expr>> for Option<Arc<dyn QueryFragment<DB> + Send + Sync + 'a>>
34where
35 DB: Backend,
36 Expr: QueryFragment<DB> + Send + Sync + 'a,
37{
38 fn from(order: OrderClause<Expr>) -> Self {
39 Some(Arc::new(order.0))
40 }
41}
42
43impl<DB> From<NoOrderClause> for Option<Arc<dyn QueryFragment<DB> + Send + Sync + '_>>
44where
45 DB: Backend,
46{
47 fn from(_: NoOrderClause) -> Self {
48 None
49 }
50}
51
52impl<GB> ValidGrouping<GB> for NoOrderClause {
53 type IsAggregate = is_aggregate::Never;
54}
55
56impl<GB, Expr: ValidGrouping<GB>> ValidGrouping<GB> for OrderClause<Expr> {
57 type IsAggregate = Expr::IsAggregate;
58}