Documentation ¶
Overview ¶
plan build & optimize logical plan
Index ¶
- Constants
- Variables
- func GetBindings(expr *plan.Expr) []int32
- func MakePlan2DefaultExpr(expr engine.DefaultExpr) *plan.DefaultExpr
- func NewGetParamRule() getParamRule
- func NewResetParamRule(args map[int]int) resetParamRule
- type BaseOptimizer
- type BindContext
- type Binder
- type Binding
- type BindingTreeNode
- type CTERef
- type ColDef
- type ColRef
- type ColRefRemapping
- type CompilerContext
- type Const
- type Cost
- type Expr
- type FuncExplainLayout
- type FunctionSig
- type GroupBinder
- func (b *GroupBinder) BindAggFunc(funcName string, astExpr *tree.FuncExpr, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *GroupBinder) BindColRef(astExpr *tree.UnresolvedName, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *GroupBinder) BindExpr(astExpr tree.Expr, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *GroupBinder) BindSubquery(astExpr *tree.Subquery, isRoot bool) (*plan.Expr, error)
- func (b *GroupBinder) BindWinFunc(funcName string, astExpr *tree.FuncExpr, depth int32, isRoot bool) (*plan.Expr, error)
- type HavingBinder
- func (b *HavingBinder) BindAggFunc(funcName string, astExpr *tree.FuncExpr, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *HavingBinder) BindColRef(astExpr *tree.UnresolvedName, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *HavingBinder) BindExpr(astExpr tree.Expr, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *HavingBinder) BindSubquery(astExpr *tree.Subquery, isRoot bool) (*plan.Expr, error)
- func (b *HavingBinder) BindWinFunc(funcName string, astExpr *tree.FuncExpr, depth int32, isRoot bool) (*plan.Expr, error)
- type LimitBinder
- func (b *LimitBinder) BindAggFunc(funcName string, astExpr *tree.FuncExpr, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *LimitBinder) BindColRef(astExpr *tree.UnresolvedName, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *LimitBinder) BindExpr(astExpr tree.Expr, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *LimitBinder) BindSubquery(astExpr *tree.Subquery, isRoot bool) (*plan.Expr, error)
- func (b *LimitBinder) BindWinFunc(funcName string, astExpr *tree.FuncExpr, depth int32, isRoot bool) (*plan.Expr, error)
- type MockCompilerContext
- func (m *MockCompilerContext) Cost(obj *ObjectRef, e *Expr) *Cost
- func (m *MockCompilerContext) DatabaseExists(name string) bool
- func (m *MockCompilerContext) DefaultDatabase() string
- func (m *MockCompilerContext) GetHideKeyDef(dbName string, tableName string) *ColDef
- func (m *MockCompilerContext) GetPrimaryKeyDef(dbName string, tableName string) []*ColDef
- func (m *MockCompilerContext) Resolve(dbName string, tableName string) (*ObjectRef, *TableDef)
- func (m *MockCompilerContext) ResolveVariable(varName string, isSystemVar, isGlobalVar bool) (interface{}, error)
- type MockOptimizer
- type NameTuple
- type Node
- type ObjectRef
- type Optimizer
- type OrderBinder
- type Plan
- type Plan_Query
- type ProjectionBinder
- func (b *ProjectionBinder) BindAggFunc(funcName string, astExpr *tree.FuncExpr, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *ProjectionBinder) BindColRef(astExpr *tree.UnresolvedName, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *ProjectionBinder) BindExpr(astExpr tree.Expr, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *ProjectionBinder) BindSubquery(astExpr *tree.Subquery, isRoot bool) (*plan.Expr, error)
- func (b *ProjectionBinder) BindWinFunc(funcName string, astExpr *tree.FuncExpr, depth int32, isRoot bool) (*plan.Expr, error)
- type Query
- type QueryBuilder
- type RowsetData
- type Rule
- type Schema
- type TableBinder
- func (b *TableBinder) BindAggFunc(funcName string, astExpr *tree.FuncExpr, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *TableBinder) BindColRef(astExpr *tree.UnresolvedName, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *TableBinder) BindExpr(astExpr tree.Expr, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *TableBinder) BindSubquery(astExpr *tree.Subquery, isRoot bool) (*plan.Expr, error)
- func (b *TableBinder) BindWinFunc(funcName string, astExpr *tree.FuncExpr, depth int32, isRoot bool) (*plan.Expr, error)
- type TableDef
- type Type
- type VisitQuery
- type WhereBinder
- func (b *WhereBinder) BindAggFunc(funcName string, astExpr *tree.FuncExpr, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *WhereBinder) BindColRef(astExpr *tree.UnresolvedName, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *WhereBinder) BindExpr(astExpr tree.Expr, depth int32, isRoot bool) (*plan.Expr, error)
- func (b *WhereBinder) BindSubquery(astExpr *tree.Subquery, isRoot bool) (*plan.Expr, error)
- func (b *WhereBinder) BindWinFunc(funcName string, astExpr *tree.FuncExpr, depth int32, isRoot bool) (*plan.Expr, error)
Constants ¶
View Source
const ( JoinSideNone int8 = 0 JoinSideLeft = 1 << iota JoinSideRight = 1 << iota JoinSideBoth = JoinSideLeft | JoinSideRight )
View Source
const MO_CATALOG_DB_NAME = "mo_catalog"
View Source
const SF float64 = 1
Variables ¶
View Source
var ( // errors may happen while building constant ErrDivByZero = errors.New(errno.SyntaxErrororAccessRuleViolation, "division by zero") ErrZeroModulus = errors.New(errno.SyntaxErrororAccessRuleViolation, "zero modulus") )
View Source
var BuiltinFunctions = [...]*FunctionSig{}/* 149 elements not displayed */
Functions shipped by system.
Functions ¶
func GetBindings ¶ added in v0.5.0
func MakePlan2DefaultExpr ¶ added in v0.5.0
func MakePlan2DefaultExpr(expr engine.DefaultExpr) *plan.DefaultExpr
func NewGetParamRule ¶ added in v0.5.1
func NewGetParamRule() getParamRule
func NewResetParamRule ¶ added in v0.5.1
Types ¶
type BaseOptimizer ¶ added in v0.5.0
type BaseOptimizer struct {
// contains filtered or unexported fields
}
BaseOptimizer is base optimizer, capable of handling only a few simple rules
func NewBaseOptimizer ¶ added in v0.5.0
func NewBaseOptimizer(ctx CompilerContext) *BaseOptimizer
func (*BaseOptimizer) CurrentContext ¶ added in v0.5.0
func (opt *BaseOptimizer) CurrentContext() CompilerContext
type BindContext ¶ added in v0.5.0
type BindContext struct {
// contains filtered or unexported fields
}
func NewBindContext ¶ added in v0.5.0
func NewBindContext(builder *QueryBuilder, parent *BindContext) *BindContext
type Binder ¶ added in v0.5.0
type Binder interface { BindExpr(tree.Expr, int32, bool) (*plan.Expr, error) BindColRef(*tree.UnresolvedName, int32, bool) (*plan.Expr, error) BindAggFunc(string, *tree.FuncExpr, int32, bool) (*plan.Expr, error) BindWinFunc(string, *tree.FuncExpr, int32, bool) (*plan.Expr, error) BindSubquery(*tree.Subquery, bool) (*plan.Expr, error) }
type Binding ¶ added in v0.5.0
type Binding struct {
// contains filtered or unexported fields
}
func NewBinding ¶ added in v0.5.0
func (*Binding) FindColumn ¶ added in v0.5.0
type BindingTreeNode ¶ added in v0.5.0
type BindingTreeNode struct {
// contains filtered or unexported fields
}
type ColDef ¶ added in v0.5.0
func GetResultColumnsFromPlan ¶ added in v0.5.0
GetResultColumnsFromPlan
type ColRefRemapping ¶ added in v0.5.0
type ColRefRemapping struct {
// contains filtered or unexported fields
}
type CompilerContext ¶ added in v0.5.0
type CompilerContext interface { // Default database/schema in context DefaultDatabase() string // check if database exist DatabaseExists(name string) bool // get table definition by database/schema Resolve(schemaName string, tableName string) (*ObjectRef, *TableDef) // get the value of variable ResolveVariable(varName string, isSystemVar, isGlobalVar bool) (interface{}, error) // get the definition of primary key GetPrimaryKeyDef(dbName string, tableName string) []*ColDef // get the definition of hide key GetHideKeyDef(dbName string, tableName string) *ColDef // get estimated cost by table & expr Cost(obj *ObjectRef, e *Expr) *Cost }
type Expr ¶ added in v0.5.0
func DeepCopyExpr ¶ added in v0.5.0
type FuncExplainLayout ¶ added in v0.5.0
type FuncExplainLayout int32
const ( STANDARD_FUNCTION FuncExplainLayout = 0 //standard function UNARY_ARITHMETIC_OPERATOR FuncExplainLayout = 1 //unary arithmetic operator BINARY_ARITHMETIC_OPERATOR FuncExplainLayout = 2 //binary arithmetic operator UNARY_LOGICAL_OPERATOR FuncExplainLayout = 3 // unary logical operator BINARY_LOGICAL_OPERATOR FuncExplainLayout = 4 // binary logical operator COMPARISON_OPERATOR FuncExplainLayout = 5 // comparison operator CAST_EXPRESSION FuncExplainLayout = 6 // cast expression CASE_WHEN_EXPRESSION FuncExplainLayout = 7 // case when expression BETWEEN_AND_EXPRESSION FuncExplainLayout = 8 IN_PREDICATE FuncExplainLayout = 9 //query 'in' predicate EXISTS_ANY_PREDICATE FuncExplainLayout = 10 //query predicate,such as exist,all,any IS_NULL_EXPRESSION FuncExplainLayout = 11 // is null expression NOPARAMETER_FUNCTION FuncExplainLayout = 12 // noparameter function DATE_INTERVAL_EXPRESSION FuncExplainLayout = 13 // date expression,interval expression EXTRACT_FUNCTION FuncExplainLayout = 14 // extract function,such as extract(MONTH/DAY/HOUR/MINUTE/SECOND FROM p) POSITION_FUNCTION FuncExplainLayout = 15 // position function, such as POSITION(substr IN str) UNKNOW_KIND_FUNCTION FuncExplainLayout = 16 )
type FunctionSig ¶ added in v0.5.0
type FunctionSig struct { Name string Flag plan.Function_FuncFlag Layout FuncExplainLayout ArgTypeClass []plan.Type_TypeId ArgType []int8 }
Function signature. ArgTypeClass and ArgType need some explanation. ArgTypeClass defines type equivalent class for this function. The first equivlent class is the return type. For each argument of this function it has a arg type, which is an index into the ArgTypeClass. Let's use an example,
"=", STRICT, {BOOL, ANY}, {1, 1}}
means,
function name is "=". it is a STRICT function, that is, it will return null iff it has a null arguments Two type equivalent class first is BOOL, means the the return type is BOOL second is ANY, means any type {1, 1}, means the function take two arguments. first arg is of type class 1, which is ANY second arg is of type class 1 too, which is ANY both arg is of same class, means they must be same type.
Therefore, it means "=" is a strict function, taking two arguments of ANY type (but both arguments must be of SAME type), and return BOOL.
type GroupBinder ¶ added in v0.5.0
type GroupBinder struct {
// contains filtered or unexported fields
}
func NewGroupBinder ¶ added in v0.5.0
func NewGroupBinder(builder *QueryBuilder, ctx *BindContext) *GroupBinder
func (*GroupBinder) BindAggFunc ¶ added in v0.5.0
func (*GroupBinder) BindColRef ¶ added in v0.5.0
func (b *GroupBinder) BindColRef(astExpr *tree.UnresolvedName, depth int32, isRoot bool) (*plan.Expr, error)
func (*GroupBinder) BindSubquery ¶ added in v0.5.0
type HavingBinder ¶ added in v0.5.0
type HavingBinder struct {
// contains filtered or unexported fields
}
func NewHavingBinder ¶ added in v0.5.0
func NewHavingBinder(builder *QueryBuilder, ctx *BindContext) *HavingBinder
func (*HavingBinder) BindAggFunc ¶ added in v0.5.0
func (*HavingBinder) BindColRef ¶ added in v0.5.0
func (b *HavingBinder) BindColRef(astExpr *tree.UnresolvedName, depth int32, isRoot bool) (*plan.Expr, error)
func (*HavingBinder) BindSubquery ¶ added in v0.5.0
type LimitBinder ¶ added in v0.5.0
type LimitBinder struct {
// contains filtered or unexported fields
}
func NewLimitBinder ¶ added in v0.5.0
func NewLimitBinder() *LimitBinder
func (*LimitBinder) BindAggFunc ¶ added in v0.5.0
func (*LimitBinder) BindColRef ¶ added in v0.5.0
func (b *LimitBinder) BindColRef(astExpr *tree.UnresolvedName, depth int32, isRoot bool) (*plan.Expr, error)
func (*LimitBinder) BindSubquery ¶ added in v0.5.0
type MockCompilerContext ¶ added in v0.5.0
type MockCompilerContext struct {
// contains filtered or unexported fields
}
func NewEmptyCompilerContext ¶ added in v0.5.0
func NewEmptyCompilerContext() *MockCompilerContext
NewEmptyCompilerContext for test create/drop statement
func NewMockCompilerContext ¶ added in v0.5.0
func NewMockCompilerContext() *MockCompilerContext
func (*MockCompilerContext) Cost ¶ added in v0.5.0
func (m *MockCompilerContext) Cost(obj *ObjectRef, e *Expr) *Cost
func (*MockCompilerContext) DatabaseExists ¶ added in v0.5.0
func (m *MockCompilerContext) DatabaseExists(name string) bool
func (*MockCompilerContext) DefaultDatabase ¶ added in v0.5.0
func (m *MockCompilerContext) DefaultDatabase() string
func (*MockCompilerContext) GetHideKeyDef ¶ added in v0.5.0
func (m *MockCompilerContext) GetHideKeyDef(dbName string, tableName string) *ColDef
func (*MockCompilerContext) GetPrimaryKeyDef ¶ added in v0.5.0
func (m *MockCompilerContext) GetPrimaryKeyDef(dbName string, tableName string) []*ColDef
func (*MockCompilerContext) Resolve ¶ added in v0.5.0
func (m *MockCompilerContext) Resolve(dbName string, tableName string) (*ObjectRef, *TableDef)
func (*MockCompilerContext) ResolveVariable ¶ added in v0.5.0
func (m *MockCompilerContext) ResolveVariable(varName string, isSystemVar, isGlobalVar bool) (interface{}, error)
type MockOptimizer ¶ added in v0.5.0
type MockOptimizer struct {
// contains filtered or unexported fields
}
func NewEmptyMockOptimizer ¶ added in v0.5.0
func NewEmptyMockOptimizer() *MockOptimizer
func NewMockOptimizer ¶ added in v0.5.0
func NewMockOptimizer() *MockOptimizer
func (*MockOptimizer) CurrentContext ¶ added in v0.5.0
func (moc *MockOptimizer) CurrentContext() CompilerContext
type NameTuple ¶ added in v0.5.0
type NameTuple struct {
// contains filtered or unexported fields
}
type Optimizer ¶ added in v0.5.0
type Optimizer interface { Optimize(stmt tree.Statement) (*Query, error) CurrentContext() CompilerContext }
type OrderBinder ¶ added in v0.5.0
type OrderBinder struct { *ProjectionBinder // contains filtered or unexported fields }
func NewOrderBinder ¶ added in v0.5.0
func NewOrderBinder(projectionBinder *ProjectionBinder, selectList tree.SelectExprs) *OrderBinder
type Plan_Query ¶ added in v0.5.0
type Plan_Query = plan.Plan_Query
type ProjectionBinder ¶ added in v0.5.0
type ProjectionBinder struct {
// contains filtered or unexported fields
}
func NewProjectionBinder ¶ added in v0.5.0
func NewProjectionBinder(builder *QueryBuilder, ctx *BindContext, havingBinder *HavingBinder) *ProjectionBinder
func (*ProjectionBinder) BindAggFunc ¶ added in v0.5.0
func (*ProjectionBinder) BindColRef ¶ added in v0.5.0
func (b *ProjectionBinder) BindColRef(astExpr *tree.UnresolvedName, depth int32, isRoot bool) (*plan.Expr, error)
func (*ProjectionBinder) BindSubquery ¶ added in v0.5.0
type QueryBuilder ¶ added in v0.5.0
type QueryBuilder struct {
// contains filtered or unexported fields
}
func NewQueryBuilder ¶ added in v0.5.0
func NewQueryBuilder(queryType plan.Query_StatementType, ctx CompilerContext) *QueryBuilder
type RowsetData ¶ added in v0.5.0
type RowsetData = plan.RowsetData
type TableBinder ¶ added in v0.5.0
type TableBinder struct {
// contains filtered or unexported fields
}
func NewTableBinder ¶ added in v0.5.0
func NewTableBinder(builder *QueryBuilder, ctx *BindContext) *TableBinder
func (*TableBinder) BindAggFunc ¶ added in v0.5.0
func (*TableBinder) BindColRef ¶ added in v0.5.0
func (b *TableBinder) BindColRef(astExpr *tree.UnresolvedName, depth int32, isRoot bool) (*plan.Expr, error)
func (*TableBinder) BindSubquery ¶ added in v0.5.0
type VisitQuery ¶ added in v0.5.1
type VisitQuery struct {
// contains filtered or unexported fields
}
func NewVisitQuery ¶ added in v0.5.1
func NewVisitQuery(qry *Query, rule Rule) *VisitQuery
func (*VisitQuery) Visit ¶ added in v0.5.1
func (vq *VisitQuery) Visit() (*Query, error)
type WhereBinder ¶ added in v0.5.0
type WhereBinder struct {
// contains filtered or unexported fields
}
func NewWhereBinder ¶ added in v0.5.0
func NewWhereBinder(builder *QueryBuilder, ctx *BindContext) *WhereBinder
func (*WhereBinder) BindAggFunc ¶ added in v0.5.0
func (*WhereBinder) BindColRef ¶ added in v0.5.0
func (b *WhereBinder) BindColRef(astExpr *tree.UnresolvedName, depth int32, isRoot bool) (*plan.Expr, error)
func (*WhereBinder) BindSubquery ¶ added in v0.5.0
Source Files ¶
- base_binder.go
- bind_context.go
- binding.go
- build.go
- build_dcl.go
- build_ddl.go
- build_delete.go
- build_insert.go
- build_show.go
- build_transation.go
- build_update.go
- build_util.go
- flatten_subquery.go
- function.go
- group_binder.go
- having_binder.go
- init.go
- limit_binder.go
- make.go
- mock.go
- optimize.go
- order_binder.go
- projection_binder.go
- query_builder.go
- table_binder.go
- types.go
- utils.go
- visit_query.go
- visit_query_rule.go
- where_binder.go
Click to show internal directories.
Click to hide internal directories.