Latest
ðŊ Type-Safe Seeding â
qail exec for
AST-native database execution
New: qail exec Command
- Type-Safe Execution:
qail exec "get::users" --url postgres://... - File-Based Seeding:
qail exec -f seed.qail --url postgres://... - Transaction Support:
--txwraps all statements with auto-rollback on error - Dry-Run Mode:
--dry-runpreviews generated SQL without executing - Batch Execution: Multiple QAIL statements per file (one per line)
v0.14.18
January 9, 2026 ðŊ Type-Safe Seeding â qail exec for database operations
qail exec Command
- Type-Safe:
Uses
driver.execute(ast)â no raw SQL - QAIL Syntax:
qail exec "get users fields id where active = true" - Batch Support:
Execute multiple statements from
.qailfiles - Transaction:
--txflag with automatic rollback on error
Documentation
- Updated CLI doc comments to v2 QAIL syntax examples
- Added
qail execto CLI reference docs
v0.14.13
January 2, 2026 ðŊ Unified Qail AST â Same API across PostgreSQL,
Qdrant, Redis
qail-redis: Unified API
- Qail Constructors:
Qail::redis_get(),Qail::redis_set(),Qail::redis_incr() - RedisExt Trait:
.redis_ex(seconds),.redis_nx(),.redis_xx() - Core Integration:
Redis actions added to
Actionenum - Native RESP3: Direct wire encoding, connection pooling
Vision: "QAIL Decides"
-
Qail::get("users")â PostgreSQL (facts) -
Qail::search("products")â Qdrant (meaning) -
Qail::redis_get("session")â Redis (time)
v0.14.12
January 2, 2026 ⥠4x Qdrant Speedup - HTTP/2 Pipelining & Pooling
Performance
- HTTP/2 Pipelining:
search_batch()multiplexes requests (4.00x faster) - Connection Pooling:
QdrantPoolwith semaphore concurrency (1.46x faster) - Zero-Copy: Buffer splitting replaces cloning for true zero-alloc
v0.14.10
January 1, 2026New Crate: qail-qdrant
- Zero-Copy gRPC Driver: Direct protobuf wire encoding (1.17x faster than official)
- REST Driver: Full Point/Payload API support
- Vector Support:
Value::Vector(Vec<f32>)AST extension
v0.14.9
January 1, 2026Security
- PG: Reject literal NULL bytes (0x00) in
execute_raw() - PG:
encode_value()now returnsResultfor safe error handling
v0.14.8
January 1, 2026 ð Production Hardening - Connection lifecycle,
identity columns
Features
- Terminate on Drop: Sends 'X' packet for graceful connection cleanup
- Identity Columns: GENERATED ALWAYS AS IDENTITY support
- SERIAL Fix: Correctly converts to INTEGER in ALTER TABLE
Verified
- Pool overhead: 9.5Ξs/checkout (excellent)
- 3D/4D arrays: Work correctly
- All chaos tests passed
v0.14.7
January 1, 2026 ðĒ Enterprise Shadow Migrations - PlanetScale for
Everyone
Features
- COPY Streaming: Zero-dependency data sync (100+ rows/sec)
- State Persistence:
_qail_shadow_statetable for recovery - Safe Promote: Apply to primary, don't swap databases
- Column Intersection: Handles ADD/DROP COLUMN correctly
- Data Drift Warning: Warns about changes since sync
Stress Tested
- Promote without shadow â proper error
- Double abort â idempotent
- ADD COLUMN migration â verified
v0.14.6
January 1, 2026 ð 1.3M Queries/Second - 10-Connection Pool Benchmark
Fixed
- Shadow migration bug - now applies base schema before diff commands
-
Added
schema_to_commands()for AST-native schema conversion - Updated Migration Impact Analyzer docs with real test output
Performance
- Pool Benchmark: 78M queries in 60s with 10 connections
- Single vs Pool: 336K q/s â 1.3M q/s (~4x throughput)
Added
-
Shadow migration shows
[1.5/4]step for base schema - Rollback Safety Analysis table in analyzer docs
-
CI/CD integration with GitHub Actions
--ciflag
v0.14.4
December 31, 2025 ðïļ 27% Faster Than SQLx - Zero-alloc + LRU Cache
Performance (Zero-Alloc Encoding)
-
Reusable
sql_bufandparams_bufon PgConnection -
fetch_all()now uses prepared statement caching by default - LIMIT/OFFSET use parameterized values ($N) - dramatically improves cache hits
Enterprise Memory Management (LRU Cache)
- Bounded LRU cache for prepared statements (default: 1000)
- Auto-evicts least recently used statements when full
-
New
clear_cache()andcache_stats()methods
Benchmark Results (50K iterations)
- qail-pg (cached): 4,534 q/s (221Ξs)
- SeaORM: 4,032 q/s - 12% slower
- SQLx: 3,573 q/s - 27% slower
v0.14.3
December 31, 2025Added
-
qail migrate createnow generates timestamped.up.qailand.down.qailfile pairs -
Format:
YYYYMMDDHHMMSS_name.up.qail/YYYYMMDDHHMMSS_name.down.qail -
Inline metadata:
@name,@created,@author,@depends -
Example:
qail migrate create add_users --author "orion"
v0.14.2
December 31, 2025 ð 100% PostgreSQL Coverage - Expressions, DML,
and DDL
Wire Protocol Encoders (AST-Native)
DISTINCT ON (col1, col2, ...)queries-
COUNT(*) FILTER (WHERE ...)aggregate syntax -
Window
FRAMEclause (ROWS/RANGE BETWEEN ... AND ...) -
GROUP BYwithROLLUP,CUBE, andGROUPING SETS -
CREATE VIEWandDROP VIEWDDL -
Comprehensive tests:
complex_test.rs,expr_test.rs
Expression System (100% Grammar Coverage)
-
Expr::ArrayConstructor-ARRAY[col1, col2, ...] -
Expr::RowConstructor-ROW(a, b, c) -
Expr::Subscript- Array/string subscriptingarr[1] -
Expr::Collate- Collation expressionscol COLLATE "C" -
Expr::FieldAccess- Composite field selection(row).field -
GroupByMode::GroupingSets-GROUPING SETS ((a, b), (c)) -
Action::CreateViewandAction::DropView
CLI Improvements
-
qail diff --prettydisplaysMigrationClass(reversible/data-losing/irreversible)
Changed
-
Expr::Window.paramsfromVec<Value>toVec<Expr>for native AST philosophy
v0.14.1
December 30, 2025Fixed
-
Critical bug in
encode_update()where column names were encoded as$1placeholders
Added
-
Comprehensive battle test suite (
battle_test.rs) with 19 query operations -
Modularized
values.rsintovalues/directory
v0.14.0
December 30, 2025Added
-
MigrationClassenum for classifying migrations:Reversible,DataLosing,Irreversible - Type safety warnings for unsafe rollbacks
- FK ordering regression tests for parent-before-child table creation
Changed
-
Modularized
migrations.rs(1044 lines) into 9 focused modules
v0.13.x
December 2025- CTE with
RECURSIVEsupport - Connection pooling for qail-pg
- Enhanced JOIN condition encoding
- COPY protocol for bulk inserts
Earlier Versions
For complete history, see the full changelog on GitHub .