oxide_sql_core/builder/
mod.rs

1//! Type-Safe SQL Builder
2//!
3//! This module provides SQL builders with compile-time type checking.
4//! Invalid SQL constructs are caught at compile time.
5//!
6//! # Type-Safe Queries (Recommended)
7//!
8//! Use `Select`, `Insert`, `Update`, `Delete` with schema traits for
9//! compile-time validation of column names:
10//!
11//! ```rust
12//! use oxide_sql_core::builder::Select;
13//! use oxide_sql_core::schema::Table;
14//!
15//! // Schema types (normally generated by #[derive(Table)])
16//! struct User { id: i32, name: String, active: bool }
17//! struct UserTable;
18//!
19//! impl Table for UserTable {
20//!     type Row = User;
21//!     const NAME: &'static str = "users";
22//!     const COLUMNS: &'static [&'static str] = &["id", "name", "active"];
23//!     const PRIMARY_KEY: Option<&'static str> = Some("id");
24//! }
25//!
26//! // Compile-time validated SELECT
27//! let (sql, params) = Select::<UserTable, _, _>::new()
28//!     .select_all()
29//!     .from_table()
30//!     .build();
31//!
32//! assert_eq!(sql, "SELECT id, name, active FROM users");
33//! ```
34//!
35//! # Dynamic Queries
36//!
37//! For string-based queries without compile-time validation, use `SelectDyn`,
38//! `InsertDyn`, `UpdateDyn`, `DeleteDyn`:
39//!
40//! ```rust
41//! use oxide_sql_core::builder::{SelectDyn, dyn_col};
42//!
43//! let (sql, params) = SelectDyn::new()
44//!     .columns(&["id", "name"])
45//!     .from("users")
46//!     .where_clause(dyn_col("active").eq(true))
47//!     .build();
48//!
49//! assert_eq!(sql, "SELECT id, name FROM users WHERE active = ?");
50//! ```
51
52mod delete;
53mod expr;
54mod insert;
55mod select;
56pub mod typed;
57mod update;
58pub mod value;
59
60// Dynamic (string-based) builders
61pub use delete::{DeleteDyn, SafeDeleteDyn, SafeDeleteDynWithWhere};
62pub use expr::{ColumnRef, ExprBuilder, dyn_col};
63pub use insert::InsertDyn;
64pub use select::SelectDyn;
65pub use update::UpdateDyn;
66
67// Type-safe builders (recommended - these are the default names)
68pub use typed::{Delete, Insert, Select, Update, col};
69
70// Common types
71pub use value::{SqlValue, ToSqlValue};