prax_sqlx/lib.rs
1//! # Prax SQLx Backend
2//!
3//! This crate provides a SQLx-based query engine for Prax ORM, offering
4//! compile-time checked queries as an alternative to the default async drivers.
5//!
6//! ## Features
7//!
8//! - **Compile-time query checking** - Validate SQL queries at compile time
9//! - **Multi-database support** - PostgreSQL, MySQL, and SQLite through a unified API
10//! - **Type-safe queries** - Strong typing for query parameters and results
11//! - **Connection pooling** - Built-in connection pool management via SQLx
12//! - **Async/await** - Full async support with tokio runtime
13//!
14//! ## Usage
15//!
16//! ```rust,ignore
17//! use prax_query::{FilterValue, QueryEngine};
18//! use prax_sqlx::{SqlxEngine, SqlxConfig};
19//!
20//! // Create configuration
21//! let config = SqlxConfig::from_url("postgres://user:pass@localhost/db")?;
22//!
23//! // Create engine
24//! let engine = SqlxEngine::new(config).await?;
25//!
26//! // Execute queries
27//! let users: Vec<User> = engine
28//! .query_many(
29//! "SELECT * FROM users WHERE active = $1",
30//! vec![FilterValue::Bool(true)],
31//! )
32//! .await?;
33//! ```
34//!
35//! ## Compile-Time Checking
36//!
37//! Use the `sqlx::query!` macro for compile-time SQL verification:
38//!
39//! ```rust,ignore
40//! use prax_sqlx::checked;
41//!
42//! // This query is checked at compile time
43//! let users = checked::query_as!(
44//! User,
45//! "SELECT id, name, email FROM users WHERE id = $1",
46//! user_id
47//! )
48//! .fetch_all(&pool)
49//! .await?;
50//! ```
51
52#![deny(unsafe_code)]
53#![warn(missing_docs)]
54// QueryError is intentionally large; see prax-query/src/lib.rs.
55#![allow(clippy::result_large_err)]
56
57pub mod config;
58pub mod connection;
59pub mod engine;
60pub mod error;
61pub mod pool;
62pub mod row;
63pub mod row_ref;
64pub mod transaction;
65pub mod types;
66
67#[cfg(feature = "postgres")]
68pub mod postgres;
69
70#[cfg(feature = "mysql")]
71pub mod mysql;
72
73#[cfg(feature = "sqlite")]
74pub mod sqlite;
75
76/// Re-export commonly used types
77pub use config::SqlxConfig;
78pub use engine::SqlxEngine;
79pub use error::{SqlxError, SqlxResult};
80pub use pool::{SqlxPool, SqlxPoolBuilder};
81
82/// Re-export SQLx types for convenience
83pub use sqlx::{self, FromRow, Row};
84
85/// Checked query macros for compile-time SQL verification
86pub mod checked {
87 pub use sqlx::{query, query_as, query_scalar};
88}