From 75fde6ce453bd04cc630e6dc66049622d87625bd Mon Sep 17 00:00:00 2001 From: Ciro Spaciari Date: Tue, 9 Sep 2025 21:48:55 -0700 Subject: [PATCH] more --- src/sql/mysql/MySQLConnection.zig | 14 ++++++++++++-- src/sql/mysql/MySQLQuery.zig | 9 +++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/sql/mysql/MySQLConnection.zig b/src/sql/mysql/MySQLConnection.zig index 89bd96bd33..69a3f0e836 100644 --- a/src/sql/mysql/MySQLConnection.zig +++ b/src/sql/mysql/MySQLConnection.zig @@ -358,7 +358,13 @@ pub fn getQueriesArray(this: *const @This()) JSValue { if (this.js_value == .zero) { return .js_undefined; } - return js.queriesGetCached(this.js_value) orelse .js_undefined; + if (js.queriesGetCached(this.js_value)) |value| { + if (value == .zero) { + return .js_undefined; + } + return value; + } + return .js_undefined; } pub fn failFmt(this: *@This(), error_code: AnyMySQLError.Error, comptime fmt: [:0]const u8, args: anytype) void { const message = bun.handleOom(std.fmt.allocPrint(bun.default_allocator, fmt, args)); @@ -387,8 +393,12 @@ pub fn failWithJSValue(this: *MySQLConnection, value: JSValue) void { loop.enter(); defer loop.exit(); - const js_error = value.toError() orelse value; + var js_error = value.toError() orelse value; + if (js_error == .zero) { + js_error = AnyMySQLError.mysqlErrorToJS(this.globalObject, "Connection closed", error.ConnectionClosed); + } js_error.ensureStillAlive(); + const queries_array = this.getQueriesArray(); queries_array.ensureStillAlive(); // this.globalObject.queueMicrotask(on_close, &[_]JSValue{ js_error, queries_array }); diff --git a/src/sql/mysql/MySQLQuery.zig b/src/sql/mysql/MySQLQuery.zig index 0292743859..0fe8cd6088 100644 --- a/src/sql/mysql/MySQLQuery.zig +++ b/src/sql/mysql/MySQLQuery.zig @@ -175,9 +175,14 @@ pub fn onJSError(this: *@This(), err: jsc.JSValue, globalObject: *jsc.JSGlobalOb var vm = jsc.VirtualMachine.get(); const function = vm.rareData().mysql_context.onQueryRejectFn.get().?; const event_loop = vm.eventLoop(); + var js_error = err.toError() orelse err; + if (js_error == .zero) { + js_error = AnyMySQLError.mysqlErrorToJS(globalObject, "Query failed", err); + } + js_error.ensureStillAlive(); event_loop.runCallback(function, globalObject, thisValue, &.{ - targetValue.toError() orelse targetValue, - err, + targetValue, + js_error, }); } pub fn getTarget(this: *@This(), globalObject: *jsc.JSGlobalObject, clean_target: bool) jsc.JSValue {