mirror of
https://github.com/ent/ent.git
synced 2026-05-22 09:31:45 +03:00
Summary: Pull Request resolved: https://github.com/facebookincubator/ent/pull/130 Reviewed By: alexsn Differential Revision: D18164397 fbshipit-source-id: 2858d69d3ff85c06b51382c01c3d4369ee2c3bdb
37 lines
1.1 KiB
Cheetah
37 lines
1.1 KiB
Cheetah
{{/*
|
|
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.
|
|
*/}}
|
|
|
|
{{/* custom errors and errors handlers for sql dialects */}}
|
|
{{ define "dialect/sql/errors" }}
|
|
func isSQLConstraintError(err error) (*ErrConstraintFailed, bool) {
|
|
var (
|
|
msg = err.Error()
|
|
// error format per dialect.
|
|
errors = [...]string{
|
|
"Error 1062", // MySQL 1062 error (ER_DUP_ENTRY).
|
|
"UNIQUE constraint failed", // SQLite.
|
|
"duplicate key value violates unique constraint", // PostgreSQL.
|
|
}
|
|
)
|
|
for i := range errors {
|
|
if strings.Contains(msg, errors[i]) {
|
|
return &ErrConstraintFailed{msg, err}, true
|
|
}
|
|
}
|
|
return nil, false
|
|
}
|
|
|
|
// rollback calls to tx.Rollback and wraps the given error with the rollback error if occurred.
|
|
func rollback(tx dialect.Tx, err error) error {
|
|
if rerr := tx.Rollback(); rerr != nil {
|
|
err = fmt.Errorf("%s: %v", err.Error(), rerr)
|
|
}
|
|
if err, ok := isSQLConstraintError(err); ok {
|
|
return err
|
|
}
|
|
return err
|
|
}
|
|
{{ end }} |