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.
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
}