-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathquery_builder_example.zig
More file actions
74 lines (60 loc) · 2.19 KB
/
query_builder_example.zig
File metadata and controls
74 lines (60 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Example usage of the ZORM query builder with PostgreSQL database
const std = @import("std");
const zorm = @import("zorm");
const schema = @import("generated_schema.zig"); // Generated from schema.zorm
const SQLITE = zorm.SQLITE;
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
// Initialize PostgreSQL backend
var db = SQLITE.init(allocator);
defer db.disconnect();
// Connect to database
const conninfo = "test.db";
try db.connect(conninfo);
// Create the User table
try db.createTable(schema.UserMeta);
// Insert some sample users
const user1 = schema.User{
.id = "1",
.name = "Alice Smith",
.email = "alice@example.com",
.age = "25",
};
const user2 = schema.User{
.id = "2",
.name = "Bob Johnson",
.email = "bob@example.com",
.age = "17",
};
const user3 = schema.User{
.id = "3",
.name = "Charlie Brown",
.email = "charlie@example.com",
.age = "30",
};
try db.insert(schema.User, user1);
try db.insert(schema.User, user2);
try db.insert(schema.User, user3);
std.debug.print("Sample users inserted successfully!\n\n", .{});
// Now demonstrate query builder usage
var qb = try zorm.QueryBuilder.init(allocator, &schema.UserMeta);
defer qb.deinit();
// Build a simple SELECT query with WHERE condition
_ = try qb.selectAll();
_ = try qb.where("age", zorm.ComparisonOperator.GT, "18");
_ = try qb.orderBy("name", zorm.OrderDirection.ASC);
_ = qb.limit(10);
var query_buf = std.ArrayList(u8).init(allocator);
defer query_buf.deinit();
try qb.buildSelectQuery(&query_buf);
std.debug.print("Generated SELECT query: {s}\n", .{query_buf.items});
// Execute the query using the query builder
const results = try db.select(schema.User, &qb);
defer db.freeResults(schema.User, results);
std.debug.print("\nQuery results (users over 18):\n", .{});
for (results) |user| {
std.debug.print("ID: {s}, Name: {s}, Email: {s}, Age: {s}\n", .{ user.id, user.name, user.email, user.age });
}
}