func (b *executorBuilder) buildSelection(v *plan.Selection) Executor { child := v.GetChildByIndex(0) oldConditions := v.Conditions var src Executor switch x := child.(type) { case *plan.PhysicalTableScan: if x.LimitCount == nil { src = b.buildNewTableScan(x, v) } else { src = b.buildNewTableScan(x, nil) } case *plan.PhysicalIndexScan: if x.LimitCount == nil { src = b.buildNewIndexScan(x, v) } else { src = b.buildNewIndexScan(x, nil) } default: src = b.build(x) } if len(v.Conditions) == 0 { v.Conditions = oldConditions return src } exec := &SelectionExec{ Src: src, Condition: expression.ComposeCNFCondition(v.Conditions), schema: v.GetSchema(), ctx: b.ctx, } copy(v.Conditions, oldConditions) return exec }
func (b *executorBuilder) buildSelection(v *plan.Selection) Executor { exec := &SelectionExec{ Src: b.build(v.GetChildByIndex(0)), Condition: expression.ComposeCNFCondition(v.Conditions), schema: v.GetSchema(), ctx: b.ctx, } return exec }
func (b *executorBuilder) buildSelection(v *plan.Selection) Executor { exec := b.build(v.GetChildByIndex(0)) switch exec.(type) { case *NewTableScanExec: tableScan := exec.(*NewTableScanExec) tableScan.where, v.Conditions = b.toPBExpr(v.Conditions, tableScan.tableInfo) // TODO: Implement NewIndexScan } if len(v.Conditions) == 0 { return exec } return &SelectionExec{ Src: exec.(NewExecutor), Condition: composeCondition(v.Conditions), schema: v.GetSchema(), ctx: b.ctx, } }
func (b *executorBuilder) buildSelection(v *plan.Selection) Executor { ts, ok := v.GetChildByIndex(0).(*plan.NewTableScan) var src Executor if ok { src = b.buildNewTableScan(ts, v) } else { src = b.build(v.GetChildByIndex(0)) } if len(v.Conditions) == 0 { return src } return &SelectionExec{ Src: src, Condition: expression.ComposeCNFCondition(v.Conditions), schema: v.GetSchema(), ctx: b.ctx, } }
func (b *executorBuilder) buildSelection(v *plan.Selection) Executor { child := v.GetChildByIndex(0) var src Executor switch x := child.(type) { case *plan.PhysicalTableScan: src = b.buildNewTableScan(x, v) case *plan.PhysicalIndexScan: src = b.buildNewIndexScan(x, v) default: src = b.build(x) } if len(v.Conditions) == 0 { return src } return &SelectionExec{ Src: src, Condition: expression.ComposeCNFCondition(v.Conditions), schema: v.GetSchema(), ctx: b.ctx, } }