#[dml]Expand description
Attribute macro for DML (Data Manipulation Language) statements with compile-time validation
This macro generates type-safe, high-performance database operations with automatic parameter binding, pagination injection, and query optimization. All SQL is validated at compile time using SQLx’s compile-time verification.
§Features
- Compile-time SQL validation - Catches SQL errors during compilation
- Type-safe parameter binding - Automatic conversion and validation of parameters
- Pagination support - Automatic injection of LIMIT/OFFSET clauses
- Query optimization - Smart query planning and execution
- Error handling - Comprehensive error types with context
- Generated documentation - Auto-documented methods with query details
§Usage
ⓘ
use sqlx_data_macros::{dml, repo, Pool, Result};
use sqlx::FromRow;
#[derive(FromRow)]
struct User {
id: i64,
name: String,
email: String,
}
#[repo]
trait UserRepo {
// Simple query returning a single record
#[dml("SELECT * FROM users WHERE id = $1")]
async fn find_by_id(&self, id: i64) -> Result<Option<User>>;
// Query returning multiple records
#[dml("SELECT * FROM users WHERE active = $1")]
async fn find_active_users(&self, active: bool) -> Result<Vec<User>>;
// Insert/Update/Delete operations
#[dml("INSERT INTO users (name, email) VALUES ($1, $2) RETURNING id")]
async fn create_user(&self, name: String, email: String) -> Result<i64>;
// Complex queries with joins
#[dml("SELECT u.* FROM users u JOIN roles r ON u.role_id = r.id WHERE r.name = $1")]
async fn find_users_by_role(&self, role_name: String) -> Result<Vec<User>>;
// Pagination-enabled queries (automatic LIMIT/OFFSET injection)
#[dml("SELECT * FROM users ORDER BY created_at")]
async fn find_all_paged(&self) -> Result<Vec<User>>;
}§Required Imports
ⓘ
use sqlx_data_macros::{dml, repo};
use sqlx_data_integration::{Pool, Result, Database}; // Core database types
use sqlx::FromRow; // For result mapping