From c79e8852362ceb163fda701b90b5ddaeb82198af Mon Sep 17 00:00:00 2001 From: Brad Higgins <brad@defined.net> Date: Tue, 1 Apr 2025 11:14:21 -0400 Subject: [PATCH] Transaction Commit/Rollback returns connection's cached error, if present. --- AUTHORS | 2 ++ transaction.go | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/AUTHORS b/AUTHORS index 510b869b7..3f79a9781 100644 --- a/AUTHORS +++ b/AUTHORS @@ -25,6 +25,7 @@ Asta Xie <xiemengjun at gmail.com> B Lamarche <blam413 at gmail.com> Bes Dollma <bdollma@thousandeyes.com> Bogdan Constantinescu <bog.con.bc at gmail.com> +Brad Higgins <brad at defined.net> Brian Hendriks <brian at dolthub.com> Bulat Gaifullin <gaifullinbf at gmail.com> Caine Jette <jette at alum.mit.edu> @@ -133,6 +134,7 @@ Ziheng Lyu <zihenglv at gmail.com> Barracuda Networks, Inc. Counting Ltd. +Defined Networking Inc. DigitalOcean Inc. Dolthub Inc. dyves labs AG diff --git a/transaction.go b/transaction.go index 4a4b61001..8c502f49e 100644 --- a/transaction.go +++ b/transaction.go @@ -13,18 +13,32 @@ type mysqlTx struct { } func (tx *mysqlTx) Commit() (err error) { - if tx.mc == nil || tx.mc.closed.Load() { + if tx.mc == nil { return ErrInvalidConn } + if tx.mc.closed.Load() { + err = tx.mc.error() + if err == nil { + err = ErrInvalidConn + } + return + } err = tx.mc.exec("COMMIT") tx.mc = nil return } func (tx *mysqlTx) Rollback() (err error) { - if tx.mc == nil || tx.mc.closed.Load() { + if tx.mc == nil { return ErrInvalidConn } + if tx.mc.closed.Load() { + err = tx.mc.error() + if err == nil { + err = ErrInvalidConn + } + return + } err = tx.mc.exec("ROLLBACK") tx.mc = nil return