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}