From 57cab92162e2f39b1e6a02a537453b3104396970 Mon Sep 17 00:00:00 2001 From: Vincent Rischmann Date: Wed, 11 Nov 2020 13:54:45 +0100 Subject: refactor readBytes --- sqlite.zig | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'sqlite.zig') diff --git a/sqlite.zig b/sqlite.zig index 4e92e6b..5dd6cdb 100644 --- a/sqlite.zig +++ b/sqlite.zig @@ -377,30 +377,30 @@ pub fn Statement(comptime opts: StatementOptions, comptime query: ParsedQuery) t Text, }; - fn readBytes(self: *Self, allocator: *mem.Allocator, mode: ReadBytesMode, _i: usize) !?[]const u8 { + fn readBytes(self: *Self, allocator: *mem.Allocator, mode: ReadBytesMode, _i: usize, ptr: *[]const u8) !void { const i = @intCast(c_int, _i); switch (mode) { .Blob => { const data = c.sqlite3_column_blob(self.stmt, i); - if (data == null) return null; + if (data == null) ptr.* = ""; const size = @intCast(usize, c.sqlite3_column_bytes(self.stmt, i)); var tmp = try allocator.alloc(u8, size); mem.copy(u8, tmp, @ptrCast([*c]const u8, data)[0..size]); - return tmp; + ptr.* = tmp; }, .Text => { const data = c.sqlite3_column_text(self.stmt, i); - if (data == null) return null; + if (data == null) ptr.* = ""; const size = @intCast(usize, c.sqlite3_column_bytes(self.stmt, i)); var tmp = try allocator.alloc(u8, size); mem.copy(u8, tmp, @ptrCast([*c]const u8, data)[0..size]); - return tmp; + ptr.* = tmp; }, } } @@ -413,20 +413,14 @@ pub fn Statement(comptime opts: StatementOptions, comptime query: ParsedQuery) t const field_type_info = @typeInfo(field.field_type); switch (field.field_type) { - []const u8, []u8 => if (try self.readBytes(options.allocator, .Blob, i)) |tmp| { - @field(value, field.name) = tmp; - } else { - @field(value, field.name) = ""; + []const u8, []u8 => { + try self.readBytes(options.allocator, .Blob, i, &@field(value, field.name)); }, - Blob => if (try self.readBytes(options.allocator, .Blob, i)) |tmp| { - @field(value, field.name).data = tmp; - } else { - @field(value, field.name).data = ""; + Blob => { + try self.readBytes(options.allocator, .Blob, i, &@field(value, field.name).data); }, - Text => if (try self.readBytes(options.allocator, .Text, i)) |tmp| { - @field(value, field.name).data = tmp; - } else { - @field(value, field.name).data = ""; + Text => { + try self.readBytes(options.allocator, .Text, i, &@field(value, field.name).data); }, else => switch (field_type_info) { .Int => { -- cgit v1.2.3