Skip to main content

sqlx_data/
lib.rs

1//! # sqlx-data
2//!
3//! A powerful SQLx extension providing automatic parameter binding, dynamic SQL generation,
4//! and result parsing with trait-based repositories and advanced pagination support.
5//!
6//! ## Features
7//!
8//! - **🔧 Automatic Parameter Binding**: No more manual `bind()` calls
9//! - **📄 Multiple Pagination Types**: Serial (traditional), Slice (offset-based), Cursor (keyset-based)
10//! - **🔍 Dynamic Filtering & Search**: Type-safe filters with fluent API
11//! - **⚡ Zero-cost Abstractions**: Compile-time code generation
12//! - **🛡️ Type Safety**: Full Rust type checking for SQL queries
13//! - **🎯 Trait-based Repositories**: Clean, testable architecture
14//!
15//! ```
16
17// ====================================================
18// PUBLIC API - This is what users should import
19// ====================================================
20
21// Core macros for repository definition
22pub use sqlx_data_macros::{dml, repo, repo as repository, generate_versions};
23
24pub mod macros {
25    pub use sqlx_data_macros::{dml, repo, repo as repository, generate_versions};
26}
27
28// Organized module re-exports
29pub mod database {
30    // Re-export database types from sqlx-data-integration
31    #[cfg(any(feature = "sqlite", feature = "postgres", feature = "mysql"))]
32    pub use sqlx_data_integration::*;
33
34    // Re-export dynamic functions from sqlx-data-parser when database features are enabled
35    #[cfg(any(feature = "sqlite", feature = "postgres", feature = "mysql"))]
36    pub use sqlx_data_parser::{build_count_query_from_sql, build_dynamic_sql, validate_fields};
37}
38
39#[allow(unused_imports)]
40pub use database::*;
41
42// Re-export Stream as a type alias for convenience
43//pub use futures::Stream;
44//pub use futures::StreamExt;
45
46/// Convenience prelude that includes commonly used types and traits
47pub mod prelude {
48    pub use crate::{
49        Cursor,
50        CursorError,
51        CursorSecureExtract,
52        CursorValue,
53        IntoParams,
54        // Params
55        ParamsBuilder,
56        // Pagination
57        Serial,
58        Slice,
59        // Macros
60        dml,
61        repo,
62        repository,
63    };
64    //pub use futures::Stream; 
65    //pub use futures::StreamExt;
66
67    // Core database types (conditionally available)
68    #[cfg(any(feature = "sqlite", feature = "postgres", feature = "mysql"))]
69    pub use crate::database::{Connection, DB, Executor, Pool, QueryResult, Result, Transaction};
70    #[cfg(any(feature = "sqlite", feature = "postgres", feature = "mysql"))]
71    pub use sqlx_data_parser::{build_count_query_from_sql, build_dynamic_sql, validate_fields};
72}
73
74pub mod pagination {
75    pub use sqlx_data_params::{Cursor, Serial, Slice};
76}
77pub use pagination::*;
78
79pub mod params {
80    pub use sqlx_data_params::{
81        CursorBuilder,
82        CursorParams,
83        FilterBuilder,
84        FilterParams,
85        // Traits
86        IntoParams,
87        // Other types
88        LimitParam,
89        OffsetParam,
90        Pagination,
91        // Params types
92        Params,
93        // Builders
94        ParamsBuilder,
95        SearchBuilder,
96        SearchParams,
97        SerialBuilder,
98        SerialParams,
99        SliceBuilder,
100        SliceParams,
101        SortBuilder,
102        SortingParams,
103    };
104}
105
106pub use params::*;
107
108pub mod filters {
109    pub use sqlx_data_params::{
110        // Cursor types
111        CursorData,
112        CursorDirection,
113        CursorError,
114        CursorSecureExtract,
115        CursorValue,
116        // Filter types
117        Filter,
118        FilterOperator,
119        FilterValue,
120        NullOrdering,
121        // Sort types
122        Sort,
123        SortDirection,
124    };
125}
126
127pub use filters::*;
128
129// Macro for compile-time only SQL validation
130#[macro_export]
131macro_rules! compile_time_only {
132    ($($code:tt)*) => {
133        // Only include in debug builds for compile-time validation
134        #[cfg(debug_assertions)]
135        {
136            // Check that the code compiles without executing it
137            if false {
138                $($code)*;
139            }
140        }
141    };
142}