dialect/sql/sqlgraph: add constraint error checks (#1316)

Initial work on #1310
This commit is contained in:
Rotem Tamir
2021-03-09 15:56:47 +02:00
committed by GitHub
parent e48f2724f5
commit 2a17dba983
2 changed files with 64 additions and 0 deletions

View File

@@ -0,0 +1,48 @@
// Copyright 2019-present Facebook Inc. All rights reserved.
// This source code is licensed under the Apache 2.0 license found
// in the LICENSE file in the root directory of this source tree.
package sqlgraph
import (
"errors"
"strings"
)
// IsConstraintError returns true if the error resulted from a DB constraint violation
func IsConstraintError(err error) bool {
var e *ConstraintError
return errors.As(err, &e) || IsUniqueConstraintError(err) || IsForeignKeyConstraintError(err)
}
// IsUniqueConstraintError reports if the error resulted from a DB uniqueness constraint violation.
// e.g. duplicate value in unique index.
func IsUniqueConstraintError(err error) bool {
uniquenessErrors := []string{
"Error 1062", // MySQL
"violates unique constraint", // Postgres
"UNIQUE constraint failed", // SQLite
}
for _, s := range uniquenessErrors {
if strings.Contains(err.Error(), s) {
return true
}
}
return false
}
// IsForeignKeyConstraintError reports if the error resulted from a DB FK constraint violation.
// e.g. parent row does not exist.
func IsForeignKeyConstraintError(err error) bool {
fkErrors := []string{
"Error 1452", // MySQL
"violates foreign key constraint", // Postgres
"FOREIGN KEY constraint failed", // SQLite
}
for _, s := range fkErrors {
if strings.Contains(err.Error(), s) {
return true
}
}
return false
}