forked from mirror/gorm
Merge pull request #1242 from calebthompson/make-errors-public
Make gorm.Errors available for use outside gorm
This commit is contained in:
commit
d5d3e3a67b
36
errors.go
36
errors.go
|
@ -18,40 +18,38 @@ var (
|
||||||
ErrUnaddressable = errors.New("using unaddressable value")
|
ErrUnaddressable = errors.New("using unaddressable value")
|
||||||
)
|
)
|
||||||
|
|
||||||
type errorsInterface interface {
|
|
||||||
GetErrors() []error
|
|
||||||
}
|
|
||||||
|
|
||||||
// Errors contains all happened errors
|
// Errors contains all happened errors
|
||||||
type Errors struct {
|
type Errors []error
|
||||||
errors []error
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetErrors get all happened errors
|
// GetErrors gets all happened errors
|
||||||
func (errs Errors) GetErrors() []error {
|
func (errs Errors) GetErrors() []error {
|
||||||
return errs.errors
|
return errs
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add add an error
|
// Add adds an error
|
||||||
func (errs *Errors) Add(err error) {
|
func (errs Errors) Add(newErrors ...error) Errors {
|
||||||
if errors, ok := err.(errorsInterface); ok {
|
for _, err := range newErrors {
|
||||||
for _, err := range errors.GetErrors() {
|
if errors, ok := err.(Errors); ok {
|
||||||
errs.Add(err)
|
errs = errs.Add(errors...)
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
for _, e := range errs.errors {
|
ok = true
|
||||||
|
for _, e := range errs {
|
||||||
if err == e {
|
if err == e {
|
||||||
return
|
ok = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
errs.errors = append(errs.errors, err)
|
if ok {
|
||||||
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return errs
|
||||||
|
}
|
||||||
|
|
||||||
// Error format happened errors
|
// Error format happened errors
|
||||||
func (errs Errors) Error() string {
|
func (errs Errors) Error() string {
|
||||||
var errors = []string{}
|
var errors = []string{}
|
||||||
for _, e := range errs.errors {
|
for _, e := range errs {
|
||||||
errors = append(errors, e.Error())
|
errors = append(errors, e.Error())
|
||||||
}
|
}
|
||||||
return strings.Join(errors, "; ")
|
return strings.Join(errors, "; ")
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
package gorm_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/jinzhu/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestErrorsCanBeUsedOutsideGorm(t *testing.T) {
|
||||||
|
errs := []error{errors.New("First"), errors.New("Second")}
|
||||||
|
|
||||||
|
gErrs := gorm.Errors(errs)
|
||||||
|
gErrs = gErrs.Add(errors.New("Third"))
|
||||||
|
gErrs = gErrs.Add(gErrs)
|
||||||
|
|
||||||
|
if gErrs.Error() != "First; Second; Third" {
|
||||||
|
t.Fatalf("Gave wrong error, got %s", gErrs.Error())
|
||||||
|
}
|
||||||
|
}
|
8
main.go
8
main.go
|
@ -655,9 +655,9 @@ func (s *DB) AddError(err error) error {
|
||||||
s.log(err)
|
s.log(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
errors := Errors{errors: s.GetErrors()}
|
errors := Errors(s.GetErrors())
|
||||||
errors.Add(err)
|
errors.Add(err)
|
||||||
if len(errors.GetErrors()) > 1 {
|
if len(errors) > 1 {
|
||||||
err = errors
|
err = errors
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -669,8 +669,8 @@ func (s *DB) AddError(err error) error {
|
||||||
|
|
||||||
// GetErrors get happened errors from the db
|
// GetErrors get happened errors from the db
|
||||||
func (s *DB) GetErrors() (errors []error) {
|
func (s *DB) GetErrors() (errors []error) {
|
||||||
if errs, ok := s.Error.(errorsInterface); ok {
|
if errs, ok := s.Error.(Errors); ok {
|
||||||
return errs.GetErrors()
|
return errs
|
||||||
} else if s.Error != nil {
|
} else if s.Error != nil {
|
||||||
return []error{s.Error}
|
return []error{s.Error}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue