exprctx

package
v1.1.0-beta.0...-92d45d5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 20, 2024 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const OptPropsCnt = int(optPropsCnt)

OptPropsCnt is the count of optional properties.

Variables

View Source
var ErrParamIndexExceedParamCounts = errors.New("Param index exceed param counts")

ErrParamIndexExceedParamCounts describes the error that the index exceed the count of all params

Functions

func AssertLocationWithSessionVars

func AssertLocationWithSessionVars(ctxLoc *time.Location, vars *variable.SessionVars)

AssertLocationWithSessionVars asserts the location in the context and session variables are the same. It is only used for testing.

Types

type BuildContext

type BuildContext interface {
	// GetEvalCtx returns the EvalContext.
	GetEvalCtx() EvalContext
	// GetCharsetInfo gets charset and collation for current context.
	GetCharsetInfo() (string, string)
	// GetDefaultCollationForUTF8MB4 returns the default collation of UTF8MB4.
	GetDefaultCollationForUTF8MB4() string
	// GetBlockEncryptionMode returns the variable `block_encryption_mode`.
	GetBlockEncryptionMode() string
	// GetSysdateIsNow returns a bool to determine whether Sysdate is an alias of Now function.
	// It is the value of variable `tidb_sysdate_is_now`.
	GetSysdateIsNow() bool
	// GetNoopFuncsMode returns the noop function mode: OFF/ON/WARN values as 0/1/2.
	GetNoopFuncsMode() int
	// Rng is used to generate random values.
	Rng() *mathutil.MysqlRng
	// IsUseCache indicates whether to cache the build expression in plan cache.
	IsUseCache() bool
	// SetSkipPlanCache sets to skip the plan cache and records the reason.
	SetSkipPlanCache(reason string)
	// AllocPlanColumnID allocates column id for plan.
	AllocPlanColumnID() int64
	// IsInNullRejectCheck returns the flag to indicate whether the expression is in null reject check.
	// It should always return `false` in most implementations because we do not want to do null reject check
	// in most cases except for the method `isNullRejected` in planner.
	// See the comments for `isNullRejected` in planner for more details.
	IsInNullRejectCheck() bool
	// IsConstantPropagateCheck returns the flag to indicate whether the expression is in constant propagate check.
	// It should be true only when we are doing constant propagation in rule_predicate_push_down.
	IsConstantPropagateCheck() bool
	// ConnectionID indicates the connection ID of the current session.
	// If the context is not in a session, it should return 0.
	ConnectionID() uint64
}

BuildContext is used to build an expression

func CtxWithHandleTruncateErrLevel

func CtxWithHandleTruncateErrLevel(ctx BuildContext, level errctx.Level) BuildContext

CtxWithHandleTruncateErrLevel returns a new BuildContext with the specified level for handling truncate error.

type ConstantPropagateCheckContext

type ConstantPropagateCheckContext struct {
	ExprContext
}

ConstantPropagateCheckContext is a wrapper to return true for `IsConstantPropagateCheck`.

func WithConstantPropagateCheck

func WithConstantPropagateCheck(ctx ExprContext) *ConstantPropagateCheckContext

WithConstantPropagateCheck returns a new `ConstantPropagateCheckContext` with the given `ExprContext`.

func (*ConstantPropagateCheckContext) IsConstantPropagateCheck

func (ctx *ConstantPropagateCheckContext) IsConstantPropagateCheck() bool

IsConstantPropagateCheck always returns true for `ConstantPropagateCheckContext`

type EvalContext

type EvalContext interface {
	contextutil.WarnHandler
	ParamValues
	// CtxID indicates the id of the context.
	CtxID() uint64
	// SQLMode returns the sql mode
	SQLMode() mysql.SQLMode
	// TypeCtx returns the types.Context
	TypeCtx() types.Context
	// ErrCtx returns the errctx.Context
	ErrCtx() errctx.Context
	// Location returns the timezone info
	Location() *time.Location
	// CurrentDB return the current database name
	CurrentDB() string
	// CurrentTime returns the current time.
	// Multiple calls for CurrentTime() should return the same value for the same `CtxID`.
	CurrentTime() (time.Time, error)
	// GetMaxAllowedPacket returns the value of the 'max_allowed_packet' system variable.
	GetMaxAllowedPacket() uint64
	// GetTiDBRedactLog returns the value of the 'tidb_redact_log' system variable.
	GetTiDBRedactLog() string
	// GetDefaultWeekFormatMode returns the value of the 'default_week_format' system variable.
	GetDefaultWeekFormatMode() string
	// GetDivPrecisionIncrement returns the specified value of DivPrecisionIncrement.
	GetDivPrecisionIncrement() int
	// GetUserVarsReader returns the `UserVarsReader` to read user vars.
	GetUserVarsReader() variable.UserVarsReader
	// RequestVerification verifies user privilege
	RequestVerification(db, table, column string, priv mysql.PrivilegeType) bool
	// RequestDynamicVerification verifies user privilege for a DYNAMIC privilege.
	RequestDynamicVerification(privName string, grantable bool) bool
	// GetOptionalPropSet returns the optional properties provided by this context.
	GetOptionalPropSet() OptionalEvalPropKeySet
	// GetOptionalPropProvider gets the optional property provider by key
	GetOptionalPropProvider(OptionalEvalPropKey) (OptionalEvalPropProvider, bool)
}

EvalContext is used to evaluate an expression

type ExprContext

type ExprContext interface {
	BuildContext
	// GetWindowingUseHighPrecision determines whether to compute window operations without loss of precision.
	// see https://dev.mysql.com/doc/refman/8.0/en/window-function-optimization.html for more details.
	GetWindowingUseHighPrecision() bool
	// GetGroupConcatMaxLen returns the value of the 'group_concat_max_len' system variable.
	GetGroupConcatMaxLen() uint64
}

ExprContext contains full context for expression building and evaluating. It also provides some additional information for to build aggregate functions.

type NullRejectCheckExprContext

type NullRejectCheckExprContext struct {
	ExprContext
}

NullRejectCheckExprContext is a wrapper to return true for `IsInNullRejectCheck`.

func WithNullRejectCheck

func WithNullRejectCheck(ctx ExprContext) *NullRejectCheckExprContext

WithNullRejectCheck returns a new `NullRejectCheckExprContext` with the given `ExprContext`.

func (*NullRejectCheckExprContext) IsInNullRejectCheck

func (ctx *NullRejectCheckExprContext) IsInNullRejectCheck() bool

IsInNullRejectCheck always returns true for `NullRejectCheckExprContext`

type OptionalEvalPropDesc

type OptionalEvalPropDesc struct {
	// contains filtered or unexported fields
}

OptionalEvalPropDesc is the description for optional evaluation properties in EvalContext.

func (*OptionalEvalPropDesc) Key

Key returns the property key.

type OptionalEvalPropKey

type OptionalEvalPropKey int

OptionalEvalPropKey is the key for optional evaluation properties in EvalContext.

const (
	// OptPropCurrentUser indicates to provide the current user property.
	OptPropCurrentUser OptionalEvalPropKey = iota
	// OptPropSessionVars indicates to provide `variable.SessionVariable`.
	OptPropSessionVars
	// OptPropInfoSchema indicates to provide the information schema.
	OptPropInfoSchema
	// OptPropKVStore indicates to provide the kv store.
	OptPropKVStore
	// OptPropSQLExecutor indicates to provide executors to execute sql.
	OptPropSQLExecutor
	// OptPropSequenceOperator indicates to provide sequence operators for sequences.
	OptPropSequenceOperator
	// OptPropAdvisoryLock indicates to provide advisory lock operations.
	OptPropAdvisoryLock
	// OptPropDDLOwnerInfo indicates to provide DDL owner information.
	OptPropDDLOwnerInfo
)

func (OptionalEvalPropKey) AsPropKeySet

AsPropKeySet returns the set only contains the property key.

func (OptionalEvalPropKey) Desc

Desc returns the description for the property key.

func (OptionalEvalPropKey) String

func (k OptionalEvalPropKey) String() string

String implements fmt.Stringer interface.

type OptionalEvalPropKeySet

type OptionalEvalPropKeySet uint64

OptionalEvalPropKeySet is a bit map for optional evaluation properties in EvalContext to indicate whether some properties are set.

func (OptionalEvalPropKeySet) Add

Add adds the property key to the set

func (OptionalEvalPropKeySet) Contains

Contains checks whether the set contains the property

func (OptionalEvalPropKeySet) IsEmpty

func (b OptionalEvalPropKeySet) IsEmpty() bool

IsEmpty checks whether the bit map is empty.

func (OptionalEvalPropKeySet) IsFull

func (b OptionalEvalPropKeySet) IsFull() bool

IsFull checks whether all optional properties are contained in the bit map.

func (OptionalEvalPropKeySet) Remove

Remove removes the property key from the set

type OptionalEvalPropProvider

type OptionalEvalPropProvider interface {
	Desc() *OptionalEvalPropDesc
}

OptionalEvalPropProvider is the interface to provide optional properties in EvalContext.

type ParamValues

type ParamValues interface {
	// GetParamValue returns the value of the parameter by index.
	GetParamValue(idx int) (types.Datum, error)
}

ParamValues is a readonly interface to return param

var EmptyParamValues ParamValues = &emptyParamValues{}

EmptyParamValues is the `ParamValues` which contains nothing

type PlanColumnIDAllocator

type PlanColumnIDAllocator interface {
	// AllocPlanColumnID allocates column id for plan.
	AllocPlanColumnID() int64
	// GetLastPlanColumnID returns the last column id.
	GetLastPlanColumnID() int64
}

PlanColumnIDAllocator allocates column id for plan.

type SimplePlanColumnIDAllocator

type SimplePlanColumnIDAllocator struct {
	// contains filtered or unexported fields
}

SimplePlanColumnIDAllocator implements PlanColumnIDAllocator

func NewSimplePlanColumnIDAllocator

func NewSimplePlanColumnIDAllocator(offset int64) *SimplePlanColumnIDAllocator

NewSimplePlanColumnIDAllocator creates a new SimplePlanColumnIDAllocator.

func (*SimplePlanColumnIDAllocator) AllocPlanColumnID

func (a *SimplePlanColumnIDAllocator) AllocPlanColumnID() int64

AllocPlanColumnID allocates column id for plan.

func (*SimplePlanColumnIDAllocator) GetLastPlanColumnID

func (a *SimplePlanColumnIDAllocator) GetLastPlanColumnID() int64

GetLastPlanColumnID returns the last column id.

type StaticConvertibleEvalContext

type StaticConvertibleEvalContext interface {
	EvalContext

	AllParamValues() []types.Datum
	GetWarnHandler() contextutil.WarnHandler
	GetRequestVerificationFn() func(db, table, column string, priv mysql.PrivilegeType) bool
	GetDynamicPrivCheckFn() func(privName string, grantable bool) bool
}

StaticConvertibleEvalContext provides more methods to implement the clone of a `EvalContext`

type StaticConvertibleExprContext

type StaticConvertibleExprContext interface {
	ExprContext

	GetStaticConvertibleEvalContext() StaticConvertibleEvalContext
	GetPlanCacheTracker() *contextutil.PlanCacheTracker
	GetLastPlanColumnID() int64
}

StaticConvertibleExprContext provides more methods to implement the clone of a `ExprContext`

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL