Documentation
¶
Index ¶
- type ExploreMark
- type ExprIter
- type Group
- func (g *Group) BuildKeyInfo()
- func (g *Group) Delete(e *GroupExpr)
- func (g *Group) DeleteAll()
- func (g *Group) Exists(e *GroupExpr) bool
- func (g *Group) FingerPrint() string
- func (g *Group) GetFirstElem(operand pattern.Operand) *list.Element
- func (g *Group) GetImpl(prop *property.PhysicalProperty) Implementation
- func (g *Group) Insert(e *GroupExpr) bool
- func (g *Group) InsertImpl(prop *property.PhysicalProperty, impl Implementation)
- func (g *Group) SetEngineType(e pattern.EngineType) *Group
- type GroupExpr
- type Implementation
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ExploreMark ¶
type ExploreMark int
ExploreMark is uses to mark whether a Group or GroupExpr has been fully explored by a transformation rule batch.
func (*ExploreMark) Explored ¶
func (m *ExploreMark) Explored(round int) bool
Explored returns whether the roundth bit has been set.
func (*ExploreMark) SetExplored ¶
func (m *ExploreMark) SetExplored(round int)
SetExplored sets the roundth bit.
func (*ExploreMark) SetUnexplored ¶
func (m *ExploreMark) SetUnexplored(round int)
SetUnexplored unsets the roundth bit.
type ExprIter ¶
type ExprIter struct {
// Group and Element solely identify a Group expression.
*Group
*list.Element
// Pattern describes the node of pattern tree.
// The Operand type of the Group expression and the EngineType of the Group
// must be matched with it.
*pattern.Pattern
// Children is used to iterate the child expressions.
Children []*ExprIter
// contains filtered or unexported fields
}
ExprIter enumerates all the equivalent expressions in the Group according to the expression pattern.
func NewExprIterFromGroupElem ¶
NewExprIterFromGroupElem creates the iterator on the Group Element.
func (*ExprIter) Matched ¶
Matched returns whether the iterator founds a Group expression matches the pattern.
type Group ¶
type Group struct {
Equivalents *list.List
FirstExpr map[pattern.Operand]*list.Element
Fingerprints map[string]*list.Element
ImplMap map[string]Implementation
Prop *property.LogicalProperty
EngineType pattern.EngineType
SelfFingerprint string
// ExploreMark is uses to mark whether this Group has been explored
// by a transformation rule batch in a certain round.
ExploreMark
// contains filtered or unexported fields
}
Group is short for expression Group, which is used to store all the logically equivalent expressions. It's a set of GroupExpr.
func Convert2Group ¶
func Convert2Group(node base.LogicalPlan) *Group
Convert2Group converts a logical plan to a Group.
func NewGroupWithSchema ¶
func NewGroupWithSchema(e *GroupExpr, s *expression.Schema) *Group
NewGroupWithSchema creates a new Group with given schema.
func (*Group) BuildKeyInfo ¶
func (g *Group) BuildKeyInfo()
BuildKeyInfo recursively builds UniqueKey and MaxOneRow info in the LogicalProperty.
func (*Group) DeleteAll ¶
func (g *Group) DeleteAll()
DeleteAll deletes all of the GroupExprs in the Group.
func (*Group) FingerPrint ¶
FingerPrint returns the unique fingerprint of the Group.
func (*Group) GetFirstElem ¶
GetFirstElem returns the first Group expression which matches the Operand. Return a nil pointer if there isn't.
func (*Group) GetImpl ¶
func (g *Group) GetImpl(prop *property.PhysicalProperty) Implementation
GetImpl returns the best Implementation satisfy the physical property.
func (*Group) InsertImpl ¶
func (g *Group) InsertImpl(prop *property.PhysicalProperty, impl Implementation)
InsertImpl inserts the best Implementation satisfy the physical property.
func (*Group) SetEngineType ¶
func (g *Group) SetEngineType(e pattern.EngineType) *Group
SetEngineType sets the engine type of the group.
type GroupExpr ¶
type GroupExpr struct {
ExprNode base.LogicalPlan
Children []*Group
Group *Group
// ExploreMark is uses to mark whether this GroupExpr has been fully
// explored by a transformation rule batch in a certain round.
ExploreMark
// contains filtered or unexported fields
}
GroupExpr is used to store all the logically equivalent expressions which have the same root operator. Different from a normal expression, the Children of a Group expression are expression Groups, not expressions. Another property of Group expression is that the child Group references will never be changed once the Group expression is created.
func Convert2GroupExpr ¶
func Convert2GroupExpr(node base.LogicalPlan) *GroupExpr
Convert2GroupExpr converts a logical plan to a GroupExpr.
func NewGroupExpr ¶
func NewGroupExpr(node base.LogicalPlan) *GroupExpr
NewGroupExpr creates a GroupExpr based on a logical plan node.
func (*GroupExpr) AddAppliedRule ¶
AddAppliedRule adds a rule into the appliedRuleSet.
func (*GroupExpr) FingerPrint ¶
FingerPrint gets the unique fingerprint of the Group expression.
func (*GroupExpr) HasAppliedRule ¶
HasAppliedRule returns if the rule has been applied.
func (*GroupExpr) Schema ¶
func (e *GroupExpr) Schema() *expression.Schema
Schema gets GroupExpr's Schema.
func (*GroupExpr) SetChildren ¶
SetChildren sets Children of the GroupExpr.
type Implementation ¶
type Implementation interface {
CalcCost(outCount float64, children ...Implementation) float64
SetCost(cost float64)
GetCost() float64
GetPlan() plannercore.PhysicalPlan
// AttachChildren is used to attach children implementations and returns it self.
AttachChildren(children ...Implementation) Implementation
// GetCostLimit gets the costLimit for implementing the next childGroup.
GetCostLimit(costLimit float64, children ...Implementation) float64
}
Implementation defines the interface for cost of physical plan.