Skip to main content

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_sqlx::{SqlxEngine, SqlxConfig};
18//!
19//! // Create configuration
20//! let config = SqlxConfig::from_url("postgres://user:pass@localhost/db")?;
21//!
22//! // Create engine
23//! let engine = SqlxEngine::new(config).await?;
24//!
25//! // Execute queries
26//! let users: Vec<User> = engine
27//!     .query_many("SELECT * FROM users WHERE active = $1", &[&true])
28//!     .await?;
29//! ```
30//!
31//! ## Compile-Time Checking
32//!
33//! Use the `sqlx::query!` macro for compile-time SQL verification:
34//!
35//! ```rust,ignore
36//! use prax_sqlx::checked;
37//!
38//! // This query is checked at compile time
39//! let users = checked::query_as!(
40//!     User,
41//!     "SELECT id, name, email FROM users WHERE id = $1",
42//!     user_id
43//! )
44//! .fetch_all(&pool)
45//! .await?;
46//! ```
47
48#![deny(unsafe_code)]
49#![warn(missing_docs)]
50// QueryError is intentionally large; see prax-query/src/lib.rs.
51#![allow(clippy::result_large_err)]
52
53pub mod config;
54pub mod connection;
55pub mod engine;
56pub mod error;
57pub mod pool;
58pub mod row;
59pub mod row_ref;
60pub mod types;
61
62#[cfg(feature = "postgres")]
63pub mod postgres;
64
65#[cfg(feature = "mysql")]
66pub mod mysql;
67
68#[cfg(feature = "sqlite")]
69pub mod sqlite;
70
71/// Re-export commonly used types
72pub use config::SqlxConfig;
73pub use engine::SqlxEngine;
74pub use error::{SqlxError, SqlxResult};
75pub use pool::{SqlxPool, SqlxPoolBuilder};
76
77/// Re-export SQLx types for convenience
78pub use sqlx::{self, FromRow, Row};
79
80/// Checked query macros for compile-time SQL verification
81pub mod checked {
82    pub use sqlx::{query, query_as, query_scalar};
83}