summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Luna2022-03-27 01:40:10 -0300
committerGravatar Vincent Rischmann2022-04-02 01:32:44 +0200
commit95a7de94c89d4fc7fec5e1a13ce434a95fbba389 (patch)
treeec7547045cc64267b6e3fdf58f017152eea7a678
parentbuild: only include the 'c' directory if we're using the bundled sqlite code (diff)
downloadzig-sqlite-95a7de94c89d4fc7fec5e1a13ce434a95fbba389.tar.gz
zig-sqlite-95a7de94c89d4fc7fec5e1a13ce434a95fbba389.tar.xz
zig-sqlite-95a7de94c89d4fc7fec5e1a13ce434a95fbba389.zip
add error offsets to DetailedError
API introduced on 3.38.0
-rw-r--r--sqlite.zig12
1 files changed, 9 insertions, 3 deletions
diff --git a/sqlite.zig b/sqlite.zig
index 4c89f1b..8a70568 100644
--- a/sqlite.zig
+++ b/sqlite.zig
@@ -257,13 +257,14 @@ pub const InitOptions = struct {
257/// DetailedError contains a SQLite error code and error message. 257/// DetailedError contains a SQLite error code and error message.
258pub const DetailedError = struct { 258pub const DetailedError = struct {
259 code: usize, 259 code: usize,
260 near: i32,
260 message: []const u8, 261 message: []const u8,
261 262
262 pub fn format(self: @This(), comptime fmt: []const u8, options: std.fmt.FormatOptions, writer: anytype) !void { 263 pub fn format(self: @This(), comptime fmt: []const u8, options: std.fmt.FormatOptions, writer: anytype) !void {
263 _ = fmt; 264 _ = fmt;
264 _ = options; 265 _ = options;
265 266
266 _ = try writer.print("{{code: {}, message: {s}}}", .{ self.code, self.message }); 267 _ = try writer.print("{{code: {}, near: {d}, message: {s}}}", .{ self.code, self.near, self.message });
267 } 268 }
268}; 269};
269 270
@@ -274,6 +275,7 @@ fn isThreadSafe() bool {
274fn getDetailedErrorFromResultCode(code: c_int) DetailedError { 275fn getDetailedErrorFromResultCode(code: c_int) DetailedError {
275 return .{ 276 return .{
276 .code = @intCast(usize, code), 277 .code = @intCast(usize, code),
278 .near = -1,
277 .message = blk: { 279 .message = blk: {
278 const msg = c.sqlite3_errstr(code); 280 const msg = c.sqlite3_errstr(code);
279 break :blk mem.sliceTo(msg, 0); 281 break :blk mem.sliceTo(msg, 0);
@@ -284,6 +286,7 @@ fn getDetailedErrorFromResultCode(code: c_int) DetailedError {
284fn getLastDetailedErrorFromDb(db: *c.sqlite3) DetailedError { 286fn getLastDetailedErrorFromDb(db: *c.sqlite3) DetailedError {
285 return .{ 287 return .{
286 .code = @intCast(usize, c.sqlite3_extended_errcode(db)), 288 .code = @intCast(usize, c.sqlite3_extended_errcode(db)),
289 .near = @intCast(i32, c.sqlite3_error_offset(db)),
287 .message = blk: { 290 .message = blk: {
288 const msg = c.sqlite3_errmsg(db); 291 const msg = c.sqlite3_errmsg(db);
289 break :blk mem.sliceTo(msg, 0); 292 break :blk mem.sliceTo(msg, 0);
@@ -1255,6 +1258,7 @@ pub const DynamicStatement = struct {
1255 if (tmp == null) { 1258 if (tmp == null) {
1256 diags.err = .{ 1259 diags.err = .{
1257 .code = 0, 1260 .code = 0,
1261 .near = -1,
1258 .message = "the input query is not valid SQL (empty string or a comment)", 1262 .message = "the input query is not valid SQL (empty string or a comment)",
1259 }; 1263 };
1260 return error.SQLiteError; 1264 return error.SQLiteError;
@@ -2760,20 +2764,22 @@ test "sqlite: diagnostics format" {
2760 .input = .{ 2764 .input = .{
2761 .err = .{ 2765 .err = .{
2762 .code = 20, 2766 .code = 20,
2767 .near = -1,
2763 .message = "barbaz", 2768 .message = "barbaz",
2764 }, 2769 },
2765 }, 2770 },
2766 .exp = "my diagnostics: {code: 20, message: barbaz}", 2771 .exp = "my diagnostics: {code: 20, near: -1, message: barbaz}",
2767 }, 2772 },
2768 .{ 2773 .{
2769 .input = .{ 2774 .input = .{
2770 .message = "foobar", 2775 .message = "foobar",
2771 .err = .{ 2776 .err = .{
2772 .code = 20, 2777 .code = 20,
2778 .near = 10,
2773 .message = "barbaz", 2779 .message = "barbaz",
2774 }, 2780 },
2775 }, 2781 },
2776 .exp = "my diagnostics: {message: foobar, detailed error: {code: 20, message: barbaz}}", 2782 .exp = "my diagnostics: {message: foobar, detailed error: {code: 20, near: 10, message: barbaz}}",
2777 }, 2783 },
2778 }; 2784 };
2779 2785