qail-core
The AST-native query builder — No SQL strings, no ORM magic, just type-safe expressions.
Why AST-Native?
| Approach | How it works | Safety Level |
|---|---|---|
| String-based | SQL as strings | Requires parameterization |
| ORM | Macros generate SQL | Compile-time safe |
| AST-Native (QAIL) | Typed AST → Wire protocol | Structurally safe |
QAIL builds queries as an Abstract Syntax Tree that compiles directly to database wire protocol. There's no SQL string generation step—safety is built into the design.
Installation
[!CAUTION] Alpha Software: QAIL is currently in alpha. While we strive for stability, the API is evolving to ensure it remains ergonomic and truly AST-native. Do not use in production environments yet.
[]
= "0.9"
Quick Start
use ;
use *;
// Build a query as typed AST
let cmd = get
.columns
.filter
.order_by
.limit;
// Use with qail-pg driver
let rows = driver.fetch_all.await?;
Ergonomic Expression Builders
use *;
// Aggregates with FILTER
count_filter.alias
// Time expressions
now_minus // NOW() - INTERVAL '24 hours'
// CASE WHEN
case_when
.otherwise
.alias
// Type casting
cast
Features
- Type-safe expressions — Compile-time checked query building
- Ergonomic builders —
count(),sum(),case_when(),now_minus() - Full SQL support — CTEs, JOINs, DISTINCT ON, aggregates with FILTER
- JSON operators —
->,->>,@>,? - Schema parser — Parse DDL into structured AST
Ecosystem
| Crate | Purpose |
|---|---|
| qail-core | AST builder, parser, expression helpers |
| qail-pg | PostgreSQL driver (AST → wire protocol) |
| qail | CLI tool for migrations and schema ops |
License
MIT
🤝 Contributing & Support
We welcome issue reports on GitHub! Please provide detailed descriptions to help us reproduce and fix the problem. We aim to address critical issues within 1-5 business days.