65 lines
2.4 KiB
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"
|
|
}
|