error.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package mysql
  2. import (
  3. "fmt"
  4. "github.com/pingcap/errors"
  5. )
  6. var (
  7. ErrBadConn = errors.New("connection was bad")
  8. ErrMalformPacket = errors.New("Malform packet error")
  9. ErrTxDone = errors.New("sql: Transaction has already been committed or rolled back")
  10. )
  11. type MyError struct {
  12. Code uint16
  13. Message string
  14. State string
  15. }
  16. func (e *MyError) Error() string {
  17. return fmt.Sprintf("ERROR %d (%s): %s", e.Code, e.State, e.Message)
  18. }
  19. // NewDefaultError: default mysql error, must adapt errname message format
  20. func NewDefaultError(errCode uint16, args ...interface{}) *MyError {
  21. e := new(MyError)
  22. e.Code = errCode
  23. if s, ok := MySQLState[errCode]; ok {
  24. e.State = s
  25. } else {
  26. e.State = DEFAULT_MYSQL_STATE
  27. }
  28. if format, ok := MySQLErrName[errCode]; ok {
  29. e.Message = fmt.Sprintf(format, args...)
  30. } else {
  31. e.Message = fmt.Sprint(args...)
  32. }
  33. return e
  34. }
  35. func NewError(errCode uint16, message string) *MyError {
  36. e := new(MyError)
  37. e.Code = errCode
  38. if s, ok := MySQLState[errCode]; ok {
  39. e.State = s
  40. } else {
  41. e.State = DEFAULT_MYSQL_STATE
  42. }
  43. e.Message = message
  44. return e
  45. }
  46. func ErrorCode(errMsg string) (code int) {
  47. var tmpStr string
  48. // golang scanf doesn't support %*,so I used a temporary variable
  49. fmt.Sscanf(errMsg, "%s%d", &tmpStr, &code)
  50. return
  51. }