comptime sql bindings for zig
ziglang
sql
1# zql
2
3comptime sql bindings for zig.
4
5```zig
6const zql = @import("zql");
7
8const User = struct { id: i32, name: []const u8 };
9
10const Q = zql.Query("SELECT id, name FROM users WHERE id = :id");
11
12// Q.positional = "SELECT id, name FROM users WHERE id = ?"
13// Q.columns = .{ "id", "name" }
14// Q.params = .{ "id" }
15
16pub fn getUser(db: anytype, user_id: i32) ?User {
17 const row = db.query(Q.positional, Q.bind(.{ .id = user_id })) orelse return null;
18 return Q.fromRow(User, row);
19}
20```
21
22## what it does
23
24| | |
25|-|-|
26| `Q.positional` | `:name` → `?` |
27| `Q.bind(.{...})` | struct → tuple in param order |
28| `Q.columns` | column names from SELECT |
29| `Q.fromRow(T, row)` | row → struct |
30
31## install
32
33```zig
34// build.zig.zon
35.zql = .{
36 .url = "https://github.com/zzstoatzz/zql/archive/main.tar.gz",
37 .hash = "zql-0.0.1-alpha-xNRI4IRNAABUb9gLat5FWUaZDD5HvxAxet_-elgR_A_y",
38},
39
40// build.zig
41exe.root_module.addImport("zql", b.dependency("zql", .{}).module("zql"));
42```