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

1 year ago
package postgres
import (
"encoding/json"
1 year ago
"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.
1 year ago
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
1 year ago
}
var errMsg ErrMessage
unmarshalErr := json.Unmarshal(parsedErr, &errMsg)
if unmarshalErr != nil {
return err
}
if errMsg.Code == errCodes["uniqueConstraint"] {
return gorm.ErrDuplicatedKey
}
1 year ago
return err
}