Skip to content

Commit

Permalink
This is an automated cherry-pick of pingcap#49244
Browse files Browse the repository at this point in the history
Signed-off-by: ti-chi-bot <ti-community-prow-bot@tidb.io>
  • Loading branch information
Lloyd-Pottiger authored and ti-chi-bot committed Dec 13, 2023
1 parent e091ee5 commit 2433c02
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 13 deletions.
19 changes: 12 additions & 7 deletions executor/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -3103,13 +3103,18 @@ func constructDAGReq(ctx sessionctx.Context, plans []plannercore.PhysicalPlan, s

func (b *executorBuilder) corColInDistPlan(plans []plannercore.PhysicalPlan) bool {
for _, p := range plans {
x, ok := p.(*plannercore.PhysicalSelection)
if !ok {
continue
}
for _, cond := range x.Conditions {
if len(expression.ExtractCorColumns(cond)) > 0 {
return true
switch x := p.(type) {
case *plannercore.PhysicalSelection:
for _, cond := range x.Conditions {
if len(expression.ExtractCorColumns(cond)) > 0 {
return true
}
}
case *plannercore.PhysicalTableScan:
for _, cond := range x.LateMaterializationFilterCondition {
if len(expression.ExtractCorColumns(cond)) > 0 {
return true
}
}
}
}
Expand Down
4 changes: 3 additions & 1 deletion executor/table_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,8 @@ type TableReaderExecutor struct {
byItems []*util.ByItems
paging bool
storeType kv.StoreType
// corColInFilter tells whether there's correlated column in filter.
// corColInFilter tells whether there's correlated column in filter (both conditions in PhysicalSelection and LateMaterializationFilterCondition in PhysicalTableScan)
// If true, we will need to revise the dagPB (fill correlated column value in filter) each time call Open().
corColInFilter bool
// corColInAccess tells whether there's correlated column in access conditions.
corColInAccess bool
Expand Down Expand Up @@ -154,6 +155,7 @@ func (e *TableReaderExecutor) Open(ctx context.Context) error {

var err error
if e.corColInFilter {
// If there's correlated column in filter, need to rewrite dagPB
if e.storeType == kv.TiFlash {
execs, err := constructDistExecForTiFlash(e.ctx, e.tablePlan)
if err != nil {
Expand Down
8 changes: 6 additions & 2 deletions planner/core/explain.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,11 +216,15 @@ func (p *PhysicalTableScan) OperatorInfo(normalized bool) string {
}
if p.ctx.GetSessionVars().EnableLateMaterialization && len(p.filterCondition) > 0 && p.StoreType == kv.TiFlash {
buffer.WriteString("pushed down filter:")
if len(p.lateMaterializationFilterCondition) > 0 {
if len(p.LateMaterializationFilterCondition) > 0 {
if normalized {
buffer.Write(expression.SortedExplainNormalizedExpressionList(p.lateMaterializationFilterCondition))
buffer.Write(expression.SortedExplainNormalizedExpressionList(p.LateMaterializationFilterCondition))
} else {
<<<<<<< HEAD:planner/core/explain.go
buffer.Write(expression.SortedExplainExpressionList(p.lateMaterializationFilterCondition))
=======
buffer.Write(expression.SortedExplainExpressionList(p.SCtx(), p.LateMaterializationFilterCondition))
>>>>>>> 3fb6b98d1d0 (executor: fill correlated column value in late materialization filter conditions (#49244)):pkg/planner/core/explain.go
}
} else {
buffer.WriteString("empty")
Expand Down
4 changes: 2 additions & 2 deletions planner/core/physical_plans.go
Original file line number Diff line number Diff line change
Expand Up @@ -808,10 +808,10 @@ type PhysicalTableScan struct {
// AccessCondition is used to calculate range.
AccessCondition []expression.Expression
filterCondition []expression.Expression
// lateMaterializationFilterCondition is used to record the filter conditions
// LateMaterializationFilterCondition is used to record the filter conditions
// that are pushed down to table scan from selection by late materialization.
// TODO: remove this field after we support pushing down selection to coprocessor.
lateMaterializationFilterCondition []expression.Expression
LateMaterializationFilterCondition []expression.Expression

Table *model.TableInfo
Columns []*model.ColumnInfo
Expand Down
12 changes: 12 additions & 0 deletions planner/core/plan_to_pb.go
Original file line number Diff line number Diff line change
Expand Up @@ -228,10 +228,16 @@ func (p *PhysicalTableScan) ToPB(ctx sessionctx.Context, storeType kv.StoreType)
tsExec.KeepOrder = &keepOrder
tsExec.IsFastScan = &(ctx.GetSessionVars().TiFlashFastScan)

<<<<<<< HEAD:planner/core/plan_to_pb.go
if len(p.lateMaterializationFilterCondition) > 0 {
sc := ctx.GetSessionVars().StmtCtx
client := ctx.GetClient()
conditions, err := expression.ExpressionsToPBList(sc, p.lateMaterializationFilterCondition, client)
=======
if len(p.LateMaterializationFilterCondition) > 0 {
client := ctx.GetClient()
conditions, err := expression.ExpressionsToPBList(ctx, p.LateMaterializationFilterCondition, client)
>>>>>>> 3fb6b98d1d0 (executor: fill correlated column value in late materialization filter conditions (#49244)):pkg/planner/core/plan_to_pb.go
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -261,10 +267,16 @@ func (p *PhysicalTableScan) partitionTableScanToPBForFlash(ctx sessionctx.Contex
telemetry.CurrentTiflashTableScanWithFastScanCount.Inc()
}

<<<<<<< HEAD:planner/core/plan_to_pb.go
if len(p.lateMaterializationFilterCondition) > 0 {
sc := ctx.GetSessionVars().StmtCtx
client := ctx.GetClient()
conditions, err := expression.ExpressionsToPBList(sc, p.lateMaterializationFilterCondition, client)
=======
if len(p.LateMaterializationFilterCondition) > 0 {
client := ctx.GetClient()
conditions, err := expression.ExpressionsToPBList(ctx, p.LateMaterializationFilterCondition, client)
>>>>>>> 3fb6b98d1d0 (executor: fill correlated column value in late materialization filter conditions (#49244)):pkg/planner/core/plan_to_pb.go
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion planner/core/tiflash_selection_late_materialization.go
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ func predicatePushDownToTableScanImpl(sctx sessionctx.Context, physicalSelection
// remove the pushed down conditions from selection
removeSpecificExprsFromSelection(physicalSelection, selectedConds)
// add the pushed down conditions to table scan
physicalTableScan.lateMaterializationFilterCondition = selectedConds
physicalTableScan.LateMaterializationFilterCondition = selectedConds
// Update the row count of table scan after pushing down the conditions.
physicalTableScan.stats.RowCount *= selectedSelectivity
}

0 comments on commit 2433c02

Please sign in to comment.