You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-library/vendor/gorm.io/driver/postgres/error_translator.go

45 lines
1.0 KiB

package postgres
import (
"encoding/json"
"github.com/jackc/pgx/v5/pgconn"
"gorm.io/gorm"
)
var errCodes = map[string]string{
"uniqueConstraint": "23505",
}
type ErrMessage struct {
Code string `json:"Code"`
Severity string `json:"Severity"`
Message string `json:"Message"`
}
// Translate it will translate the error to native gorm errors.
// Since currently gorm supporting both pgx and pg drivers, only checking for pgx PgError types is not enough for translating errors, so we have additional error json marshal fallback.
func (dialector Dialector) Translate(err error) error {
if pgErr, ok := err.(*pgconn.PgError); ok {
if pgErr.Code == errCodes["uniqueConstraint"] {
return gorm.ErrDuplicatedKey
}
return err
}
parsedErr, marshalErr := json.Marshal(err)
if marshalErr != nil {
return err
}
var errMsg ErrMessage
unmarshalErr := json.Unmarshal(parsedErr, &errMsg)
if unmarshalErr != nil {
return err
}
if errMsg.Code == errCodes["uniqueConstraint"] {
return gorm.ErrDuplicatedKey
}
return err
}