jankensqlhub 0.2.0

A high-performance, modular Rust library for parameterizable SQL query management with support for SQLite
Documentation

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_name syntax in queries, types defined separately
  • โœ… Multi-Database Support - SQLite (?1,?2), PostgreSQL planned for future releases
  • โœ… 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

๐Ÿš€ Quick Start

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.

โœจ 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 = serde_json::json!({"id": {"type": "integer"}});
let query = QueryDef::from_sql("SELECT * FROM users WHERE id=@id", Some(&args))?;
// 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)

Each query definition contains:

  • "query": Required - The SQL statement with @parameter placeholders
  • "args": Required when @parameter placeholders are used in the query
    • Parameter definitions with types and constraints. If any @param_name is used in the SQL, the args object must define all parameters with their types.
  • "returns": Optional - Array of column names for SELECT queries (determines JSON response structure)
{
  "get_user": {
    "query": "SELECT id, name, email FROM users WHERE id=@user_id",
    "returns": ["id", "name", "email"],
    "args": {
      "user_id": {"type": "integer"}
    }
  },
  "create_user": {
    "query": "INSERT INTO users (name, email) VALUES (@name, @email)",
    "args": {
      "name": {"type": "string"},
      "email": {"type": "string"}
    }
  },
  "search_users": {
    "query": "SELECT id, name FROM users WHERE age > @min_age AND age < @max_age",
    "returns": ["id", "name"],
    "args": {
      "min_age": {"type": "integer"},
      "max_age": {"type": "integer"}
    }
  },
  "get_user_by_status": {
    "query": "SELECT * FROM users WHERE status=@status",
    "returns": ["id", "name", "email", "status"],
    "args": {
      "status": {
        "type": "string",
        "enum": ["active", "inactive", "pending"]
      }
    }
  },
  "get_user_by_email": {
    "query": "SELECT * FROM users WHERE email LIKE @pattern",
    "returns": ["id", "name", "email"],
    "args": {
      "pattern": {
        "type": "string",
        "pattern": "\\S+@\\S+\\.\\S+"
      }
    }
  }
}

2. Load Queries

use janken_sql_hub::{DatabaseConnection, QueryDefinitions};

// Load from JSON file
let queries = QueryDefinitions::from_file("queries.json")?;

// Or load from JSON object
let json = serde_json::json!({...});
let queries = QueryDefinitions::from_json(json)?;

3. Execute Queries

// Setup SQLite connection
let sqlite_conn = DatabaseConnection::SQLite(Connection::open_in_memory()?);
let mut conn = DatabaseConnection::SQLite(conn);

// Get user by ID
let params = serde_json::json!({"user_id": 42});
let result = conn.query_run(&queries, "get_user", &params)?;

// Create new user
let params = serde_json::json!({"name": "Alice", "email": "alice@example.com"});
let result = conn.query_run(&queries, "create_user", &params)?;

// Search users by age range
let params = serde_json::json!({"min_age": 18, "max_age": 65});
let result = conn.query_run(&queries, "search_users", &params)?;

4. Parameter Types and Constraints Supported

// Parameter types (all case-insensitive)
"integer", "string", "float", "boolean"

// Constraint types
"range": [min, max]     // For numeric types (integer/float)
"pattern": "regex"      // For string types (e.g., email validation)
"enum": [value1, ...]   // For any type (allowed values)

// Examples in args object
"id": {"type": "integer"}                                                 // Basic integer
"balance": {"type": "float", "range": [0.0, 1000000.0]}                   // Float with range
"status": {"type": "string", "enum": ["active", "inactive", "pending"]}  // String enum
"email": {"type": "string", "pattern": "\\S+@\\S+\\.\\S+"}              // 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: 100% coverage
  • Zero Warnings: cargo clippy -- -D warnings clean
  • 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

  1. โœ… SQLite (complete)
  2. ๏ฟฝ PostgreSQL (planned implementation)

Built with โค๏ธ in Rust for type-safe, performant database query management.