Janken SQL Hub - Database Query Management Library
A high-performance, modular Rust library for parameterizable SQL query management with support for SQLite.
๐ฏ Overview
Janken SQL Hub enables developers to define SQL queries with parameters in a database-agnostic way, automatically generating prepared statements for different database backends while preventing SQL injection attacks.
Core Capabilities
- โ
Parameterizable SQL Templates -
@param_namesyntax in queries, types defined separately - โ Multi-Database Support - SQLite (?1,?2) and PostgreSQL ($1,$2) out-of-the-box
- โ SQL Injection Protection - Automatic prepared statement generation
- โ Quote-Aware Parsing - Parameters inside quotes are treated as literals
- โ Type Safety & Validation - Parameter type validation with constraints (range, pattern, enum)
- โ Parameter Constraints - Range limits, regex patterns, and enumerated values supported
๐๏ธ Module Architecture
Core Modules (src/)
โโโ lib.rs # Entry point, module declarations, API re-exports
โโโ connection.rs # Database connection types, QueryRunner trait implementation
โโโ parameters.rs # Parameter parsing, type validation, prepared statement creation
โโโ query.rs # Query definition creation and collection management
โโโ result.rs # Error types and result aliases
โโโ runner.rs # Query execution logic and transaction management
โโโ sql_utils.rs # Shared SQL parsing utilities (quote detection, statement splitting)
Module Responsibilities
| Module | Purpose | Key Functions |
|---|---|---|
connection.rs |
Database connections & query execution | DatabaseConnection, QueryRunner trait |
parameters.rs |
SQL parameter handling | parse_parameters_with_quotes(), create_prepared_statement() |
query.rs |
Query definition management | QueryDef::from_sql(), QueryDefinitions::from_file() |
runner.rs |
Execution mechanics | query_run_sqlite(), transaction handling |
sql_utils.rs |
SQL parsing utilities | is_in_quotes(), split_sql_statements() |
result.rs |
Error handling | JankenError enum |
lib.rs |
API orchestration | Public re-exports, module coordination |
โจ Key Features
Parameter Syntax
-- Basic parameter syntax - no types in SQL, only parameter names
SELECT * FROM users WHERE id=@user_id AND name=@user_name
-- Parameters in quoted strings (treated as literals)
SELECT * FROM users WHERE name='@literal_text'
Multi-Database Support ๐ง Under Construction
The library is designed for future multi-database support with automatic prepared statement generation:
// Single query definition automatically generates both formats
let args = json!;
let query = from_sql?;
// SQLite: SELECT * FROM users WHERE id=?1
// PostgreSQL: SELECT * FROM users WHERE id=$1 (planned)
Current Status: SQLite fully supported. PostgreSQL implementation is planned for future releases.
๐ Usage Guide
1. Define Queries (JSON Configuration)
2. Load Queries
use ;
// Load from JSON file
let queries = from_file?;
// Or load from JSON object
let json = json!;
let queries = from_json?;
3. Execute Queries
// Setup SQLite connection
let sqlite_conn = SQLite;
let mut conn = SQLite;
// Get user by ID
let params = json!;
let result = conn.query_run?;
// Create new user
let params = json!;
let result = conn.query_run?;
// Search users by age range
let params = json!;
let result = conn.query_run?;
4. Parameter Types and Constraints Supported
// Parameter types (all case-insensitive)
"integer", "string", "float", "boolean"
// Constraint types
"range": // For numeric types (integer/float)
"pattern": "regex" // For string types (e.g., email validation)
"enum": // For any type (allowed values)
// Examples in args object
"id": // Basic integer
"balance": // Float with range
"status": // String enum
"email": // String with regex
โก Performance Characteristics
- Regex Compilation: One-time lazy static initialization
- Parameter Parsing: O(n) where n = SQL length
- Query Execution: Database-dependent (SQLite ~2-3x slower prepared vs raw, PostgreSQL similar)
- Memory Usage: Minimal (regex + parameter vectors)
- Zero-Copy: Parameter values passed by reference where possible
๐งช Quality Assurance
- Test Coverage: 23 comprehensive integration tests
- Zero Warnings:
cargo clippy -- -D warningsclean - Memory Safety: Rust ownership system guarantees
- Type Safety: Compile-time parameter validation
- SQL Injection: Automatic prepared statements prevent attacks
๐ Roadmap
Planned Enhancements
- PostgreSQL native connection implementation
Database Backend Priorities
- โ SQLite (complete)
- ๏ฟฝ PostgreSQL (planned implementation)
Built with โค๏ธ in Rust for type-safe, performant database query management.