package mysql

import (
	"github.com/go-sql-driver/mysql"
	"github.com/juju/errors"
	tmysql "github.com/pingcap/tidb/mysql"
	"github.com/pingcap/tidb/terror"
	gmysql "github.com/siddontang/go-mysql/mysql"
)

func isBinlogPurgedError(err error) bool {
	mysqlErr, ok := errors.Cause(err).(*gmysql.MyError)
	if !ok {
		return false
	}
	errCode := terror.ErrCode(mysqlErr.Code)
	return errCode == gmysql.ER_MASTER_FATAL_ERROR_READING_BINLOG
}

func isAccessDeniedError(err error) bool {
	return isMySQLError(err, tmysql.ErrSpecificAccessDenied)
}

func isMySQLError(err error, code uint16) bool {
	// get origin error
	var e error
	for {
		e = errors.Cause(err)
		if err == e {
			break
		}
		err = e
	}
	mysqlErr, ok := err.(*mysql.MySQLError)
	return ok && mysqlErr.Number == code
}
