{{/* 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) (*ConstraintError, 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. } ) if _, ok := err.(*sqlgraph.ConstraintError); ok { return &ConstraintError{msg, err}, true } for i := range errors { if strings.Contains(msg, errors[i]) { return &ConstraintError{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 }}