Get tags by ID implementation
This commit is contained in:
parent
52a626fe12
commit
6b5c5aefdc
15
src/Item.zig
15
src/Item.zig
|
@ -57,6 +57,21 @@ pub fn persist(self: *Self, db: *sqlite.Db) !void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn getTagsById(id: i64, db: *sqlite.Db, allocator: std.mem.Allocator) !?[]Tag {
|
||||||
|
var stmt = try db.prepare("SELECT tag, value FROM item_tag WHERE item = ?");
|
||||||
|
defer stmt.deinit();
|
||||||
|
|
||||||
|
const res = try stmt.all(Tag, allocator, .{}, .{ .id = id });
|
||||||
|
|
||||||
|
if (res.len < 1) {
|
||||||
|
// Detect wether it returns 0 because it has no tags or because it doesn't exist
|
||||||
|
const exists = (try db.one(i64, "SELECT COUNT(id) FROM item WHERE id = ?", .{}, .{id})).?;
|
||||||
|
return if (exists == 0) null else res;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
/// Convert into a JSON object. A call to deinit() is necessary from the caller's side
|
/// Convert into a JSON object. A call to deinit() is necessary from the caller's side
|
||||||
pub fn toJson(self: Self) json.Obj {
|
pub fn toJson(self: Self) json.Obj {
|
||||||
// Main object
|
// Main object
|
||||||
|
|
|
@ -46,5 +46,8 @@ pub fn main() !void {
|
||||||
var jobj = item2.toJson();
|
var jobj = item2.toJson();
|
||||||
defer jobj.deinit();
|
defer jobj.deinit();
|
||||||
|
|
||||||
|
const tags = try Item.getTagsById(item2.id.?, &db, allocator);
|
||||||
|
std.debug.print("{any}\n", .{tags});
|
||||||
|
|
||||||
std.debug.print("{s}\n", .{jobj.toString()});
|
std.debug.print("{s}\n", .{jobj.toString()});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue