github.com/wfusion/gofusion@v1.1.14/common/infra/drivers/orm/opengauss/error_translator.go (about) 1 package opengauss 2 3 import ( 4 "encoding/json" 5 6 "gorm.io/gorm" 7 8 pq "gitee.com/opengauss/openGauss-connector-go-pq" 9 ) 10 11 var errCodes = map[string]error{ 12 "23505": gorm.ErrDuplicatedKey, 13 "23503": gorm.ErrForeignKeyViolated, 14 "42703": gorm.ErrInvalidField, 15 } 16 17 type ErrMessage struct { 18 Code string 19 Severity string 20 Message string 21 } 22 23 // Translate it will translate the error to native gorm errors. 24 // Since currently gorm supporting both pgx and pg drivers, 25 // only checking for pgx PgError types is not enough for translating errors, 26 // so we have additional error json marshal fallback. 27 func (dialector Dialector) Translate(err error) error { 28 if pgErr, ok := err.(pq.PGError); ok { 29 if translatedErr, found := errCodes[pgErr.Error()]; found { 30 return translatedErr 31 } 32 return err 33 } 34 35 parsedErr, marshalErr := json.Marshal(err) 36 if marshalErr != nil { 37 return err 38 } 39 40 var errMsg ErrMessage 41 unmarshalErr := json.Unmarshal(parsedErr, &errMsg) 42 if unmarshalErr != nil { 43 return err 44 } 45 46 if translatedErr, found := errCodes[errMsg.Code]; found { 47 return translatedErr 48 } 49 return err 50 }