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
75
76
77
78
79
80
81
82
83
84
|
const std = @import("std");
const zqlite = @import("zqlite");
const nanoid = @import("../lib/nanoid.zig");
pub const Map = struct {
id: []const u8,
name: []const u8,
};
pub fn get_maps(allocator: std.mem.Allocator, conn: zqlite.Conn) !std.ArrayList(Map) {
const query =
\\SELECT id, name
\\FROM maps
;
var rows = try conn.rows(query, .{});
defer rows.deinit();
var list = std.ArrayList(Map).init(allocator);
while (rows.next()) |row| {
try list.append(Map{
.id = try allocator.dupe(u8, row.text(0)),
.name = try allocator.dupe(u8, row.text(1)),
});
}
if (rows.err) |err| return err;
return list;
}
pub fn get_map(allocator: std.mem.Allocator, conn: zqlite.Conn, id: []const u8) !?Map {
const query =
\\SELECT id, name
\\FROM maps
\\WHERE id = ?
;
if (try conn.row(query, .{id})) |row| {
defer row.deinit();
return Map{
.id = try allocator.dupe(u8, row.text(0)),
.name = try allocator.dupe(u8, row.text(1)),
};
} else {
return null;
}
}
pub fn create(allocator: std.mem.Allocator, conn: zqlite.Conn, name: []const u8) !Map {
const query =
\\INSERT INTO maps(id, name)
\\VALUES (?, ?)
;
const id: []const u8 = &nanoid.generate(std.crypto.random);
try conn.exec(query, .{ id, name });
return Map{
.id = try allocator.dupe(u8, id),
.name = name,
};
}
pub fn update(conn: zqlite.Conn, id: []const u8, name: []const u8) !Map {
const query =
\\UPDATE maps
\\SET name = ?, updated_at = datetime()
\\WHERE id = ?
;
try conn.exec(query, .{ name, id });
return Map{
.id = id,
.name = name,
};
}
pub fn delete(conn: zqlite.Conn, id: []const u8) !void {
const query =
\\DELETE FROM maps
\\WHERE id = ?
;
try conn.exec(query, .{id});
}
|