From 6f7e035c5107b7672056ec0300c911e4386ea388 Mon Sep 17 00:00:00 2001 From: Vincent Rischmann Date: Wed, 30 Dec 2020 15:23:37 +0100 Subject: add Error, DetailedError --- sqlite.zig | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'sqlite.zig') diff --git a/sqlite.zig b/sqlite.zig index 4a65461..fd0877d 100644 --- a/sqlite.zig +++ b/sqlite.zig @@ -42,10 +42,38 @@ pub const InitOptions = struct { threading_mode: ThreadingMode = .Serialized, }; +pub const Error = error{}; + +/// DetailedError contains a SQLite error code and error message. +pub const DetailedError = struct { + code: usize, + message: []const u8, +}; + fn isThreadSafe() bool { return c.sqlite3_threadsafe() > 0; } +fn getDetailedErrorFromResultCode(code: c_int) DetailedError { + return .{ + .code = @intCast(usize, code), + .message = blk: { + const msg = c.sqlite3_errstr(code); + break :blk mem.spanZ(msg); + }, + }; +} + +fn getLastDetailedErrorFromDb(db: *c.sqlite3) DetailedError { + return .{ + .code = @intCast(usize, c.sqlite3_extended_errcode(db)), + .message = blk: { + const msg = c.sqlite3_errmsg(db); + break :blk mem.spanZ(msg); + }, + }; +} + /// 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: /// @@ -127,6 +155,11 @@ pub const Db = struct { _ = c.sqlite3_close(self.db); } + // getDetailedError returns the detailed error for the last API call if it failed. + pub fn getDetailedError(self: *Self) DetailedError { + return getLastDetailedErrorFromDb(self.db); + } + /// pragma is a convenience function to use the PRAGMA statement. /// /// Here is how to set a pragma value: -- cgit v1.2.3