diesel 2.4.0

A safe, extensible ORM and Query Builder for PostgreSQL, SQLite, and MySQL
Documentation
use super::QueryFragment;
use crate::query_builder::QueryId;
use alloc::boxed::Box;
use alloc::sync::Arc;

/// A helper query node that contains both limit and offset clauses
///
/// This type is only relevant for implementing custom backends
#[derive(Debug, Clone, Copy, QueryId)]
#[cfg_attr(
    diesel_docsrs,
    doc(cfg(feature = "i-implement-a-third-party-backend-and-opt-into-breaking-changes"))
)]
pub struct LimitOffsetClause<Limit, Offset> {
    /// The limit clause
    pub limit_clause: Limit,
    /// The offset clause
    pub offset_clause: Offset,
}

/// A boxed variant of [`LimitOffsetClause`](LimitOffsetClause)
///
/// This type is only relevant for implementing custom backends
#[allow(missing_debug_implementations)]
#[cfg_attr(
    diesel_docsrs,
    doc(cfg(feature = "i-implement-a-third-party-backend-and-opt-into-breaking-changes"))
)]
pub struct BoxedLimitOffsetClause<'a, DB> {
    /// The limit clause
    pub limit: Option<Box<dyn QueryFragment<DB> + Send + 'a>>,
    /// The offset clause
    pub offset: Option<Box<dyn QueryFragment<DB> + Send + 'a>>,
}

/// A cloneable boxed variant of [`LimitOffsetClause`](LimitOffsetClause)
///
/// This type is only relevant for implementing custom backends
#[allow(missing_debug_implementations)]
#[cfg_attr(
    diesel_docsrs,
    doc(cfg(feature = "i-implement-a-third-party-backend-and-opt-into-breaking-changes"))
)]
pub struct BoxedCloneLimitOffsetClause<'a, DB> {
    /// The limit clause
    pub limit: Option<Arc<dyn QueryFragment<DB> + Send + Sync + 'a>>,
    /// The offset clause
    pub offset: Option<Arc<dyn QueryFragment<DB> + Send + Sync + 'a>>,
}

impl<DB> Clone for BoxedCloneLimitOffsetClause<'_, DB> {
    fn clone(&self) -> Self {
        Self {
            limit: self.limit.as_ref().map(Arc::clone),
            offset: self.offset.as_ref().map(Arc::clone),
        }
    }
}