From 685eddbdc97b132ed0864c9af10c661b0a2c7661 Mon Sep 17 00:00:00 2001 From: nItroFreeZer Date: Tue, 23 Jan 2024 02:01:00 +0100 Subject: [PATCH] Fixed error mapper for constraint errors (#63) * Fixed error mapper for constraint errors Fixed error mapper for constraint errors and added error 1451. * Fixed error mapper regardless of whether SQLSTATE is present or not * Combined the two constraint errors Co-authored-by: Surya Asriadie --------- Co-authored-by: Surya Asriadie --- mysql.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mysql.go b/mysql.go index 0c5196b..bdd0ec2 100644 --- a/mysql.go +++ b/mysql.go @@ -122,20 +122,28 @@ func errorMapper(err error) error { msg = err.Error() errCodeSep = ':' errCodeIndex = strings.IndexRune(msg, errCodeSep) + errStateSep = '(' + errStateIndex = -1 ) if errCodeIndex < 0 { errCodeIndex = 0 } - switch msg[:errCodeIndex] { + errStateIndex = strings.IndexRune(msg[:errCodeIndex], errStateSep) + errStateIndex-- + if errStateIndex < 0 { + errStateIndex = errCodeIndex + } + + switch (msg[:errCodeIndex])[:errStateIndex] { case "Error 1062": return rel.ConstraintError{ Key: sql.ExtractString(msg, "key '", "'"), Type: rel.UniqueConstraint, Err: err, } - case "Error 1452": + case "Error 1451", "Error 1452": return rel.ConstraintError{ Key: sql.ExtractString(msg, "CONSTRAINT `", "`"), Type: rel.ForeignKeyConstraint,