gitee.com/eden-framework/sqlx@v0.0.3/errors.go (about)

     1  package sqlx
     2  
     3  import (
     4  	"fmt"
     5  )
     6  
     7  func NewSqlError(tpe sqlErrType, msg string) *SqlError {
     8  	return &SqlError{
     9  		Type: tpe,
    10  		Msg:  msg,
    11  	}
    12  }
    13  
    14  type SqlError struct {
    15  	Type sqlErrType
    16  	Msg  string
    17  }
    18  
    19  func (e *SqlError) Error() string {
    20  	return fmt.Sprintf("Sqlx [%s] %s", e.Type, e.Msg)
    21  }
    22  
    23  type sqlErrType string
    24  
    25  var (
    26  	sqlErrTypeInvalidScanTarget sqlErrType = "InvalidScanTarget"
    27  	sqlErrTypeNotFound          sqlErrType = "NotFound"
    28  	sqlErrTypeSelectShouldOne   sqlErrType = "SelectShouldOne"
    29  	sqlErrTypeConflict          sqlErrType = "Conflict"
    30  )
    31  
    32  var DuplicateEntryErrNumber uint16 = 1062
    33  
    34  func DBErr(err error) *dbErr {
    35  	return &dbErr{
    36  		err: err,
    37  	}
    38  }
    39  
    40  type dbErr struct {
    41  	err error
    42  
    43  	errDefault  error
    44  	errNotFound error
    45  	errConflict error
    46  }
    47  
    48  func (r dbErr) WithNotFound(err error) *dbErr {
    49  	r.errNotFound = err
    50  	return &r
    51  }
    52  
    53  func (r dbErr) WithDefault(err error) *dbErr {
    54  	r.errDefault = err
    55  	return &r
    56  }
    57  
    58  func (r dbErr) WithConflict(err error) *dbErr {
    59  	r.errConflict = err
    60  	return &r
    61  }
    62  
    63  func (r *dbErr) IsNotFound() bool {
    64  	if sqlErr, ok := r.err.(*SqlError); ok {
    65  		return sqlErr.Type == sqlErrTypeNotFound
    66  	}
    67  	return false
    68  }
    69  
    70  func (r *dbErr) IsConflict() bool {
    71  	if sqlErr, ok := r.err.(*SqlError); ok {
    72  		return sqlErr.Type == sqlErrTypeConflict
    73  	}
    74  	return false
    75  }
    76  
    77  func (r *dbErr) Err() error {
    78  	if r.err == nil {
    79  		return nil
    80  	}
    81  	if sqlErr, ok := r.err.(*SqlError); ok {
    82  		switch sqlErr.Type {
    83  		case sqlErrTypeNotFound:
    84  			if r.errNotFound != nil {
    85  				return r.errNotFound
    86  			}
    87  		case sqlErrTypeConflict:
    88  			if r.errConflict != nil {
    89  				return r.errConflict
    90  			}
    91  		}
    92  		if r.errDefault != nil {
    93  			return r.errDefault
    94  		}
    95  	}
    96  	return r.err
    97  }