Files
tidb/pkg/planner/pattern/engine.go

65 lines
2.4 KiB
Go

// Copyright 2024 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 pattern
// EngineType is determined by whether it's above or below `Gather`s.
// Plan will choose the different engine to be implemented/executed on according to its EngineType.
// Different engine may support different operators with different cost, so we should design
// different transformation and implementation rules for each engine.
type EngineType uint
const (
// EngineTiDB stands for groups which is above `Gather`s and will be executed in TiDB layer.
EngineTiDB EngineType = 1 << iota
// EngineTiKV stands for groups which is below `Gather`s and will be executed in TiKV layer.
EngineTiKV
// EngineTiFlash stands for groups which is below `Gather`s and will be executed in TiFlash layer.
EngineTiFlash
)
// EngineTypeSet is the bit set of EngineTypes.
type EngineTypeSet uint
const (
// EngineTiDBOnly is the EngineTypeSet for EngineTiDB only.
EngineTiDBOnly = EngineTypeSet(EngineTiDB)
// EngineTiKVOnly is the EngineTypeSet for EngineTiKV only.
EngineTiKVOnly = EngineTypeSet(EngineTiKV)
// EngineTiFlashOnly is the EngineTypeSet for EngineTiFlash only.
EngineTiFlashOnly = EngineTypeSet(EngineTiFlash)
// EngineTiKVOrTiFlash is the EngineTypeSet for (EngineTiKV | EngineTiFlash).
EngineTiKVOrTiFlash = EngineTypeSet(EngineTiKV | EngineTiFlash)
// EngineAll is the EngineTypeSet for all of the EngineTypes.
EngineAll = EngineTypeSet(EngineTiDB | EngineTiKV | EngineTiFlash)
)
// Contains checks whether the EngineTypeSet contains the EngineType.
func (e EngineTypeSet) Contains(tp EngineType) bool {
return uint(e)&uint(tp) != 0
}
// String implements fmt.Stringer interface.
func (e EngineType) String() string {
switch e {
case EngineTiDB:
return "EngineTiDB"
case EngineTiKV:
return "EngineTiKV"
case EngineTiFlash:
return "EngineTiFlash"
}
return "UnknownEngineType"
}