Chain Builder
A flexible and easy-to-use query builder for MySQL and SQLite in Rust. This library provides a fluent interface for building SQL queries with support for complex operations like JOINs, CTEs, and subqueries.
Features
- Fluent API: Chain methods for intuitive query building
- Type Safety: Compile-time safety with Rust's type system
- Multi-Database Support: MySQL and SQLite with dedicated compilers
- Complex Queries: Support for JOINs, CTEs, UNIONs, and subqueries
- Advanced WHERE Clauses: EXISTS, NOT EXISTS, ILIKE, column comparisons, JSON operations
- HAVING Clauses: Support for aggregate function filtering
- Aggregate Functions: COUNT, SUM, AVG, MAX, MIN with aliases
- Advanced JOINs: FULL OUTER JOIN, CROSS JOIN, JOIN USING
- Raw SQL: Fallback to raw SQL when needed
- Multiple Operations: SELECT, INSERT, UPDATE, DELETE
- sqlx Integration: Direct integration with sqlx for async database operations
- Modern Architecture: Clean, modular codebase with better maintainability
Installation
Add this to your Cargo.toml:
[]
= "1.0.0"
= "1.0"
For MySQL with sqlx integration:
[]
= { = "1.0.0", = ["sqlx_mysql"] }
= { = "0.8", = ["mysql", "runtime-tokio-rustls"] }
For SQLite with sqlx integration:
[]
= { = "1.0.0", = ["sqlx_sqlite"] }
= { = "0.8", = ["sqlite", "runtime-tokio-rustls"] }
For both MySQL and SQLite with sqlx integration:
[]
= { = "1.0.0", = ["sqlx_mysql", "sqlx_sqlite"] }
= { = "0.8", = ["mysql", "sqlite", "runtime-tokio-rustls"] }
Quick Start
MySQL Example
use ;
use Value;
// Create a new query builder for MySQL
let mut builder = new;
// Build a simple SELECT query
builder
.db
.select
.table
.query;
// Generate SQL
let = builder.to_sql;
println!;
println!;
SQLite Example
use ;
use Value;
// Create a new query builder for SQLite
let mut builder = new;
// Build a simple SELECT query
builder
.select
.table
.query;
// Generate SQL
let = builder.to_sql;
println!;
println!;
Examples
Basic SELECT Query
use ;
use Value;
let mut builder = new;
builder
.db
.select
.table
.query;
let = builder.to_sql;
JOIN Queries
let mut builder = new;
builder
.db
.select
.table
.query;
Advanced WHERE Clauses
builder.query;
INSERT Operations
let mut builder = new;
builder
.db
.table
.insert;
let = builder.to_sql;
UPDATE Operations
let mut builder = new;
builder
.db
.table
.update
.query;
DELETE Operations
let mut builder = new;
builder
.db
.table
.delete
.query;
WITH Clauses (CTEs)
// Create a CTE for active users
let mut active_users = new;
active_users
.db
.table
.select
.query;
// Use the CTE in main query
let mut builder = new;
builder
.with
.select
.table
.query;
UNION Queries
let mut pending_users = new;
pending_users
.db
.table
.select
.query;
let mut builder = new;
builder
.union
.db
.select
.table
.query;
Advanced JOINs
builder.query;
Aggregate Functions and HAVING
let mut builder = new;
builder
.db
.table
.query;
// Add aggregate functions
builder
.select_count
.select_sum
.select_avg
.select_max
.select_min
.select_alias
.select_raw;
sqlx Integration
MySQL with sqlx
use ;
use MySqlPool;
async
SQLite with sqlx
use ;
use SqlitePool;
async
API Reference
ChainBuilder
The main query builder class.
Methods
new(client: Client)- Create a new buildernew_mysql()- Create a new MySQL buildernew_sqlite()- Create a new SQLite builderdb(name: &str)- Set database nametable(name: &str)- Set table nameselect(select: Select)- Add SELECT clauseinsert(data: Value)- Set INSERT dataupdate(data: Value)- Set UPDATE datadelete()- Set DELETE operationquery(closure)- Configure WHERE, JOIN, etc.to_sql()- Generate SQL string and bind parameters
SELECT Methods
select(select: Select)- Basic SELECTselect_raw(sql, binds)- Raw SELECT expressionselect_distinct(columns)- DISTINCT SELECTselect_count(column)- COUNT aggregateselect_sum(column)- SUM aggregateselect_avg(column)- AVG aggregateselect_max(column)- MAX aggregateselect_min(column)- MIN aggregateselect_alias(column, alias)- SELECT with alias
sqlx Integration Methods (Conditional)
to_sqlx_query()- Convert to sqlx query (requires sqlx_mysql or sqlx_sqlite feature)to_sqlx_query_as<T>()- Convert to typed sqlx query (requires sqlx_mysql or sqlx_sqlite feature)count(column, pool)- Count rows (MySQL only, requires sqlx_mysql feature)
QueryBuilder
Used for WHERE clauses and other query parts.
WHERE Methods
where_eq(column, value)- Equal conditionwhere_ne(column, value)- Not equal conditionwhere_in(column, values)- IN conditionwhere_not_in(column, values)- NOT IN conditionwhere_gt(column, value)- Greater thanwhere_gte(column, value)- Greater than or equalwhere_lt(column, value)- Less thanwhere_lte(column, value)- Less than or equalwhere_between(column, [min, max])- BETWEEN conditionwhere_not_between(column, [min, max])- NOT BETWEEN conditionwhere_like(column, pattern)- LIKE conditionwhere_not_like(column, pattern)- NOT LIKE conditionwhere_ilike(column, pattern)- Case-insensitive LIKEwhere_null(column)- IS NULLwhere_not_null(column)- IS NOT NULLwhere_exists(closure)- EXISTS subquerywhere_not_exists(closure)- NOT EXISTS subquerywhere_column(lhs, op, rhs)- Column-to-column comparisonwhere_json_contains(column, value)- JSON contains (MySQL)where_subquery(closure)- Subquery conditionor()- Start OR chainwhere_raw(sql, binds)- Raw SQL condition
HAVING Methods
having(column, operator, value)- HAVING conditionhaving_between(column, [min, max])- HAVING BETWEENhaving_in(column, values)- HAVING INhaving_not_in(column, values)- HAVING NOT INhaving_raw(sql, binds)- Raw HAVING SQL
JOIN Methods
join(table, closure)- INNER JOINleft_join(table, closure)- LEFT JOINright_join(table, closure)- RIGHT JOINleft_outer_join(table, closure)- LEFT OUTER JOINright_outer_join(table, closure)- RIGHT OUTER JOINfull_outer_join(table, closure)- FULL OUTER JOINcross_join(table, closure)- CROSS JOINjoin_using(table, columns)- JOIN USING
Other Methods
limit(n)- LIMIT clauseoffset(n)- OFFSET clauseorder_by(column, direction)- ORDER BYgroup_by(columns)- GROUP BYwith(alias, builder)- WITH clauseunion(builder)- UNION clause
Architecture
The library is organized into several modules:
src/types.rs- Core types and enumssrc/builder.rs- Main ChainBuilder implementationsrc/query/- Query building functionalitysrc/query/common.rs- Common query operations (WHERE, HAVING, etc.)src/query/join/- JOIN functionality
src/common/- Shared compilation logicsrc/mysql/- MySQL-specific compilationsrc/sqlite/- SQLite-specific compilationsrc/sqlx_mysql.rs- MySQL sqlx integration (conditional compilation)src/sqlx_sqlite.rs- SQLite sqlx integration (conditional compilation)
Feature Flags
The library uses feature flags to control functionality:
mysql(default) - Enable MySQL supportsqlite- Enable SQLite supportsqlx_mysql(default) - Enable MySQL sqlx integrationsqlx_sqlite- Enable SQLite sqlx integrationpostgres- Enable PostgreSQL support (future)
License
MIT License - see LICENSE file for details.