From 00ac50a1b79ea5cec2e8ed2fc344bc2f546c171f Mon Sep 17 00:00:00 2001 From: Vincent Rischmann Date: Thu, 4 Aug 2022 09:45:32 +0200 Subject: move DetailedError, do some cleanup DetailedError uses getLastErrorOffset, which must check the SQLite version with versionGreaterThanOrEqualTo. Instead of publicly exposing versionGreaterThanOrEqualTo in sqlite.zig move DetailedError in errors.zig --- sqlite.zig | 46 +++------------------------------------------- 1 file changed, 3 insertions(+), 43 deletions(-) (limited to 'sqlite.zig') diff --git a/sqlite.zig b/sqlite.zig index 2f8611d..fdc15a5 100644 --- a/sqlite.zig +++ b/sqlite.zig @@ -15,6 +15,9 @@ pub const ParsedQuery = @import("query.zig").ParsedQuery; const errors = @import("errors.zig"); pub const errorFromResultCode = errors.errorFromResultCode; pub const Error = errors.Error; +pub const DetailedError = errors.DetailedError; +const getLastDetailedErrorFromDb = errors.getLastDetailedErrorFromDb; +const getDetailedErrorFromResultCode = errors.getDetailedErrorFromResultCode; const logger = std.log.scoped(.sqlite); @@ -255,53 +258,10 @@ pub const InitOptions = struct { diags: ?*Diagnostics = null, }; -/// DetailedError contains a SQLite error code and error message. -pub const DetailedError = struct { - code: usize, - near: i32, - message: []const u8, - - pub fn format(self: @This(), comptime fmt: []const u8, options: std.fmt.FormatOptions, writer: anytype) !void { - _ = fmt; - _ = options; - - _ = try writer.print("{{code: {}, near: {d}, message: {s}}}", .{ self.code, self.near, self.message }); - } -}; - fn isThreadSafe() bool { return c.sqlite3_threadsafe() > 0; } -fn getDetailedErrorFromResultCode(code: c_int) DetailedError { - return .{ - .code = @intCast(usize, code), - .near = -1, - .message = blk: { - const msg = c.sqlite3_errstr(code); - break :blk mem.sliceTo(msg, 0); - }, - }; -} - -fn getErrorOffset(db: *c.sqlite3) i32 { - if (c.SQLITE_VERSION_NUMBER >= 3038000) { - return c.sqlite3_error_offset(db); - } - return -1; -} - -fn getLastDetailedErrorFromDb(db: *c.sqlite3) DetailedError { - return .{ - .code = @intCast(usize, c.sqlite3_extended_errcode(db)), - .near = getErrorOffset(db), - .message = blk: { - const msg = c.sqlite3_errmsg(db); - break :blk mem.sliceTo(msg, 0); - }, - }; -} - /// Db is a wrapper around a SQLite database, providing high-level functions for executing queries. /// A Db can be opened with a file database or a in-memory database: /// -- cgit v1.2.3