Skip to main content

sqlx_paginated/paginated_query_as/
database_query_defaults.rs

1use crate::QueryParams;
2use serde::Serialize;
3use sqlx::Database;
4
5/// Trait for providing database-specific default query building behavior.
6///
7/// This trait allows `paginated_query_as` to work generically across different
8/// database backends while maintaining database-specific default configurations.
9pub trait DatabaseQueryDefaults: Database {
10    /// Builds default query conditions and arguments for this database type.
11    ///
12    /// # Arguments
13    ///
14    /// * `params` - Query parameters containing search, filter, and date range settings
15    ///
16    /// # Returns
17    ///
18    /// Returns a tuple of (conditions, arguments) to be used in the paginated query.
19    fn build_default_query<'p, T>(params: &'p QueryParams<T>) -> (Vec<String>, Self::Arguments<'p>)
20    where
21        T: Default + Serialize;
22}
23
24#[cfg(feature = "postgres")]
25impl DatabaseQueryDefaults for sqlx::Postgres {
26    fn build_default_query<'p, T>(params: &'p QueryParams<T>) -> (Vec<String>, Self::Arguments<'p>)
27    where
28        T: Default + Serialize,
29    {
30        use crate::paginated_query_as::examples::postgres_examples::build_query_with_safe_defaults;
31        build_query_with_safe_defaults::<T, sqlx::Postgres>(params)
32    }
33}
34
35#[cfg(feature = "sqlite")]
36impl DatabaseQueryDefaults for sqlx::Sqlite {
37    fn build_default_query<'p, T>(params: &'p QueryParams<T>) -> (Vec<String>, Self::Arguments<'p>)
38    where
39        T: Default + Serialize,
40    {
41        use crate::QueryBuilder;
42        QueryBuilder::<T, sqlx::Sqlite>::new()
43            .with_search(params)
44            .with_filters(params)
45            .with_date_range(params)
46            .build()
47    }
48}