mysql.go 696 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package sqlx
  2. import (
  3. "errors"
  4. "github.com/go-sql-driver/mysql"
  5. )
  6. const (
  7. mysqlDriverName = "mysql"
  8. duplicateEntryCode uint16 = 1062
  9. )
  10. // NewMysql returns a mysql connection.
  11. func NewMysql(datasource string, opts ...SqlOption) SqlConn {
  12. opts = append(opts, withMysqlAcceptable())
  13. return NewSqlConn(mysqlDriverName, datasource, opts...)
  14. }
  15. func mysqlAcceptable(err error) bool {
  16. if err == nil {
  17. return true
  18. }
  19. var myerr *mysql.MySQLError
  20. ok := errors.As(err, &myerr)
  21. if !ok {
  22. return false
  23. }
  24. switch myerr.Number {
  25. case duplicateEntryCode:
  26. return true
  27. default:
  28. return false
  29. }
  30. }
  31. func withMysqlAcceptable() SqlOption {
  32. return WithAcceptable(mysqlAcceptable)
  33. }