fndome/zxb
Ziglang Extensiable Builder for SQL or JSON
A lightweight, type-safe SQL query builder for Zig, inspired by xb (Go).
Bb struct) to express all queriesanytypeBb (Building Block)pub const Bb = struct {
op: []const u8, // Operator: "=", ">", "LIKE"...
key: []const u8, // Field name
value: Value, // Value (string/int/float/bool/null)
subs: []Bb, // Sub-conditions (for AND/OR)
};
Just 4 fields - expressing all SQL queries!
Inspired by xb (Go)'s elegant design, refined over 7 years of experience from sqli (Java).
Add zxb to your build.zig.zon:
.{
.name = "my-app",
.version = "0.1.0",
.dependencies = .{
.zxb = .{
.url = "https://github.com/fndome/zxb/archive/refs/tags/v0.1.0.tar.gz",
},
},
}
const std = @import("std");
const zxb = @import("zxb");
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
// Create a query builder
var builder = zxb.of(allocator, "users");
defer builder.deinit();
// Build query with chaining
_ = try builder.eq("status", 1); // ✅ 直接用整数
_ = try builder.eq("role", "admin");
_ = try builder.gte("age", 18); // ✅ 简洁!
_ = try builder.sort("created_at", zxb.DESC);
_ = builder.limit(10);
// Generate SQL
const sql = try builder.sqlOfSelect();
defer allocator.free(sql);
std.debug.print("SQL: {s}\n", .{sql});
// Output: SELECT * FROM users WHERE status = ? AND role = ? AND age >= ? ORDER BY created_at DESC LIMIT 10
}
zxb automatically filters out nil, zero, and empty values:
var builder = zxb.of(allocator, "users");
defer builder.deinit();
_ = try builder.eq("status", 0); // ✅ Filtered (zero)
_ = try builder.eq("name", ""); // ✅ Filtered (empty)
_ = try builder.eq("age", 18); // ✅ Included
const sql = try builder.sqlOfSelect();
defer allocator.free(sql);
// SQL: SELECT * FROM users WHERE age = ?
// Only non-zero/non-empty conditions are included!
_ = try builder.eq("status", 1); // Equal
_ = try builder.ne("role", "guest"); // Not equal
_ = try builder.gt("age", 18); // Greater than
_ = try builder.gte("price", 100.0); // Greater than or equal
_ = try builder.lt("stock", 1000); // Less than
_ = try builder.lte("discount", 0.5); // Less than or equal
// LIKE patterns
_ = try builder.like("name", "Alice"); // 包含: %Alice%
_ = try builder.likeLeft("sku", "PROD"); // 前缀: PROD%
// ✅ 支持所有整数/浮点数类型
_ = try builder.eq("id", 123); // comptime_int
_ = try builder.eq("count", @as(i32, 10)); // i32
_ = try builder.eq("big", @as(i64, 999)); // i64
_ = try builder.eq("uint", @as(u32, 50)); // u32
注意:
like() - 包含匹配(最常用)likeLeft() - 前缀匹配(用于索引优化)likeRight() - 后缀匹配无法使用索引,性能差,极少使用_ = try builder.sort("created_at", zxb.DESC); // Descending
_ = try builder.sort("id", zxb.ASC); // Ascending
_ = builder.limit(20); // LIMIT 20
_ = builder.offset(40); // OFFSET 40
var builder = zxb.of(allocator, "users");
defer builder.deinit();
_ = try builder.eq("name", "Alice");
_ = try builder.gte("age", 18); // ✅ 直接用整数
// ✅ 推荐:一次性获取 SQL 和参数
var result = try builder.build();
defer result.deinit(allocator);
// result.sql: "SELECT * FROM users WHERE name = ? AND age >= ?"
// result.args: ["Alice", 18]
// 或者分别获取(兼容旧代码)
const sql = try builder.sqlOfSelect();
defer allocator.free(sql);
var args = try builder.args();
defer args.deinit();
var builder = zxb.of(allocator, "users");
defer builder.deinit();
_ = try builder.eq("status", @as(i64, 1));
_ = try builder.sort("id", zxb.DESC);
const sql = try builder.sqlOfSelect();
defer allocator.free(sql);
builder := xb.Of(&User{}).
Eq("status", 1).
Sort("id", xb.DESC)
sql, _, _ := builder.Build().SqlOfSelect()
users::table
.filter(users::status.eq(1))
.order(users::id.desc())
.load::<User>(&mut conn)
zxb inherits xb's core principles:
"In the AI era, programming languages must trust AI."
Zig's advantages for AI-assisted development:
! error handling - Simpler than Rust's Result<T, E># Build library
zig build
# Run tests
zig build test
# Run example
zig build example
# Or run example directly
zig build run-example
zxb/
├── build.zig # Build configuration
├── src/
│ ├── main.zig # Library entry point
│ ├── value.zig # Value type (union)
│ ├── bb.zig # Core Bb struct
│ └── builder.zig # Query builder
├── examples/
│ └── basic.zig # Usage examples
├── doc/ # Documentation
│ ├── QUICK_REFERENCE.md
│ ├── HOW_IT_WORKS.md
│ ├── DESIGN.md
│ └── ...
├── LICENSE
└── README.md
Core Builder (Eq, Ne, Gt, Lt, Like, Sort, Limit, Offset)
Auto-filtering (nil/0/empty)
SELECT query generation
INSERT support
UPDATE support
DELETE support
IN clause
OR conditions
JOIN support
Vector DB support (Qdrant JSON generation)
| Project | Language | Year | Status |
|---|---|---|---|
| sqli | Java | 2015-2022 | 7 years of lessons learned |
| xb | Go | 2023-2025 | v1.0.0 - Production ready |
| zxb | Zig | 2025+ | Experimental - AI-optimized |
Evolution:
Apache License 2.0
我们欢迎所有形式的贡献! 🎉
请阅读 CONTRIBUTING.md 了解如何参与。
"Ugly things are not eternal. In the AI era, simple and beautiful code will prevail."
zxb = Zig eXtensible Builder 🚀