// Copyright 2019 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package core

import (
	"testing"

	"github.com/pingcap/tidb/parser/mysql"
	"github.com/pingcap/tidb/parser/terror"
	"github.com/stretchr/testify/require"
)

func TestError(t *testing.T) {
	kvErrs := []*terror.Error{
		ErrUnsupportedType,
		ErrAnalyzeMissIndex,
		ErrAnalyzeMissColumn,
		ErrWrongParamCount,
		ErrSchemaChanged,
		ErrTablenameNotAllowedHere,
		ErrNotSupportedYet,
		ErrWrongUsage,
		ErrUnknownTable,
		ErrWrongArguments,
		ErrWrongNumberOfColumnsInSelect,
		ErrBadGeneratedColumn,
		ErrFieldNotInGroupBy,
		ErrBadTable,
		ErrKeyDoesNotExist,
		ErrOperandColumns,
		ErrInvalidGroupFuncUse,
		ErrIllegalReference,
		ErrNoDB,
		ErrUnknownExplainFormat,
		ErrWrongGroupField,
		ErrDupFieldName,
		ErrNonUpdatableTable,
		ErrInternal,
		ErrNonUniqTable,
		ErrWindowInvalidWindowFuncUse,
		ErrWindowInvalidWindowFuncAliasUse,
		ErrWindowNoSuchWindow,
		ErrWindowCircularityInWindowGraph,
		ErrWindowNoChildPartitioning,
		ErrWindowNoInherentFrame,
		ErrWindowNoRedefineOrderBy,
		ErrWindowDuplicateName,
		ErrPartitionClauseOnNonpartitioned,
		ErrWindowFrameStartIllegal,
		ErrWindowFrameEndIllegal,
		ErrWindowFrameIllegal,
		ErrWindowRangeFrameOrderType,
		ErrWindowRangeFrameTemporalType,
		ErrWindowRangeFrameNumericType,
		ErrWindowRangeBoundNotConstant,
		ErrWindowRowsIntervalUse,
		ErrWindowFunctionIgnoresFrame,
		ErrUnsupportedOnGeneratedColumn,
		ErrPrivilegeCheckFail,
		ErrInvalidWildCard,
		ErrMixOfGroupFuncAndFields,
		ErrDBaccessDenied,
		ErrTableaccessDenied,
		ErrSpecificAccessDenied,
		ErrViewNoExplain,
		ErrWrongValueCountOnRow,
		ErrViewInvalid,
		ErrNoSuchThread,
		ErrUnknownColumn,
		ErrCartesianProductUnsupported,
		ErrStmtNotFound,
		ErrAmbiguous,
		ErrKeyPart0,
	}
	for _, err := range kvErrs {
		code := terror.ToSQLError(err).Code
		require.Truef(t, code != mysql.ErrUnknown && code == uint16(err.Code()), "err: %v", err)
	}
}
