Skip to content

Commit

Permalink
planner: Replace CTE access object in execution plan with actual name…
Browse files Browse the repository at this point in the history
… and as name (#37345)

close #37174
  • Loading branch information
Ranxy authored Sep 27, 2022
1 parent 47739ff commit 2cb8831
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 31 deletions.
22 changes: 11 additions & 11 deletions cmd/explaintest/r/cte.result
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,7 @@ id estRows task access object operator info
MergeJoin_28 8000.00 root inner join, left key:test.t1.c1, right key:test.t1.c1
├─Sort_26(Build) 6400.00 root test.t1.c1
│ └─Selection_24 6400.00 root not(isnull(test.t1.c1))
│ └─CTEFullScan_25 8000.00 root CTE:dt2 data:CTE_0
│ └─CTEFullScan_25 8000.00 root CTE:cte1 AS dt2 data:CTE_0
└─Sort_22(Probe) 9990.00 root test.t1.c1
└─TableReader_21 9990.00 root data:Selection_20
└─Selection_20 9990.00 cop[tikv] not(isnull(test.t1.c1))
Expand All @@ -415,7 +415,7 @@ id estRows task access object operator info
MergeJoin_26 8000.00 root inner join, left key:test.tpk.c1, right key:test.tpk.c1
├─Sort_24(Build) 6400.00 root test.tpk.c1
│ └─Selection_22 6400.00 root not(isnull(test.tpk.c1))
│ └─CTEFullScan_23 8000.00 root CTE:dt2 data:CTE_0
│ └─CTEFullScan_23 8000.00 root CTE:cte1 AS dt2 data:CTE_0
└─TableReader_20(Probe) 10000.00 root data:TableFullScan_19
└─TableFullScan_19 10000.00 cop[tikv] table:dt1 keep order:true, stats:pseudo
CTE_0 8000.00 root Non-Recursive CTE
Expand All @@ -433,7 +433,7 @@ id estRows task access object operator info
MergeJoin_32 8000.00 root inner join, left key:test.t1.c1, right key:test.t1.c1
├─Sort_30(Build) 6400.00 root test.t1.c1
│ └─Selection_28 6400.00 root not(isnull(test.t1.c1))
│ └─CTEFullScan_29 8000.00 root CTE:dt2 data:CTE_0
│ └─CTEFullScan_29 8000.00 root CTE:cte1 AS dt2 data:CTE_0
└─Sort_26(Probe) 9990.00 root test.t1.c1
└─TableReader_25 9990.00 root data:Selection_24
└─Selection_24 9990.00 cop[tikv] not(isnull(test.t1.c1))
Expand All @@ -459,7 +459,7 @@ id estRows task access object operator info
MergeJoin_35 8001.00 root inner join, left key:test.t1.c1, right key:test.t1.c1
├─Sort_33(Build) 6400.80 root test.t1.c1
│ └─Selection_31 6400.80 root not(isnull(test.t1.c1))
│ └─CTEFullScan_32 8001.00 root CTE:dt2 data:CTE_0
│ └─CTEFullScan_32 8001.00 root CTE:cte1 AS dt2 data:CTE_0
└─Sort_29(Probe) 9990.00 root test.t1.c1
└─TableReader_28 9990.00 root data:Selection_27
└─Selection_27 9990.00 cop[tikv] not(isnull(test.t1.c1))
Expand All @@ -482,7 +482,7 @@ id estRows task access object operator info
MergeJoin_35 8001.00 root inner join, left key:test.t1.c1, right key:test.tpk.c1
├─Sort_33(Build) 6400.80 root test.tpk.c1
│ └─Selection_31 6400.80 root not(isnull(test.tpk.c1))
│ └─CTEFullScan_32 8001.00 root CTE:dt2 data:CTE_0
│ └─CTEFullScan_32 8001.00 root CTE:cte1 AS dt2 data:CTE_0
└─Sort_29(Probe) 9990.00 root test.t1.c1
└─TableReader_28 9990.00 root data:Selection_27
└─Selection_27 9990.00 cop[tikv] not(isnull(test.t1.c1))
Expand All @@ -506,7 +506,7 @@ id estRows task access object operator info
MergeJoin_32 8000.00 root inner join, left key:test.t1.c1, right key:test.t1.c1
├─Sort_30(Build) 6400.00 root test.t1.c1
│ └─Selection_28 6400.00 root not(isnull(test.t1.c1))
│ └─CTEFullScan_29 8000.00 root CTE:dt2 data:CTE_0
│ └─CTEFullScan_29 8000.00 root CTE:cte1 AS dt2 data:CTE_0
└─Sort_26(Probe) 9990.00 root test.t1.c1
└─TableReader_25 9990.00 root data:Selection_24
└─Selection_24 9990.00 cop[tikv] not(isnull(test.t1.c1))
Expand All @@ -532,7 +532,7 @@ id estRows task access object operator info
MergeJoin_34 8000.00 root inner join, left key:test.t1.c1, right key:test.tpk.c1
├─Sort_32(Build) 6400.00 root test.tpk.c1
│ └─Selection_30 6400.00 root not(isnull(test.tpk.c1))
│ └─CTEFullScan_31 8000.00 root CTE:dt2 data:CTE_0
│ └─CTEFullScan_31 8000.00 root CTE:cte1 AS dt2 data:CTE_0
└─Sort_28(Probe) 9990.00 root test.t1.c1
└─TableReader_27 9990.00 root data:Selection_26
└─Selection_26 9990.00 cop[tikv] not(isnull(test.t1.c1))
Expand All @@ -553,7 +553,7 @@ id estRows task access object operator info
Sort_15 64000000.00 root test.t1.c1, test.t1.c1
└─HashJoin_18 64000000.00 root CARTESIAN inner join
├─Selection_22(Build) 6400.00 root eq(test.t1.c1, 1)
│ └─CTEFullScan_23 8000.00 root CTE:dt2 data:CTE_0
│ └─CTEFullScan_23 8000.00 root CTE:cte1 AS dt2 data:CTE_0
└─TableReader_21(Probe) 10000.00 root data:TableFullScan_20
└─TableFullScan_20 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo
CTE_0 8000.00 root Non-Recursive CTE
Expand All @@ -575,7 +575,7 @@ id estRows task access object operator info
Sort_15 64000000.00 root test.t1.c1, test.tpk.c1
└─HashJoin_18 64000000.00 root CARTESIAN inner join
├─Selection_22(Build) 6400.00 root eq(test.tpk.c1, 1)
│ └─CTEFullScan_23 8000.00 root CTE:dt2 data:CTE_0
│ └─CTEFullScan_23 8000.00 root CTE:cte1 AS dt2 data:CTE_0
└─TableReader_21(Probe) 10000.00 root data:TableFullScan_20
└─TableFullScan_20 10000.00 cop[tikv] table:dt1 keep order:false, stats:pseudo
CTE_0 8000.00 root Non-Recursive CTE
Expand All @@ -599,11 +599,11 @@ id estRows task access object operator info
Projection_20 10000.00 root test.tpk1.c1, test.tpk.c1, test.tpk.c1
└─HashJoin_22 10000.00 root inner join, equal:[eq(test.tpk.c1, test.tpk.c1)]
├─Selection_23(Build) 6400.00 root not(isnull(test.tpk.c1))
│ └─CTEFullScan_24 8000.00 root CTE:dt3 data:CTE_0
│ └─CTEFullScan_24 8000.00 root CTE:cte1 AS dt3 data:CTE_0
└─MergeJoin_25(Probe) 8000.00 root inner join, left key:test.tpk1.c1, right key:test.tpk.c1
├─Sort_31(Build) 6400.00 root test.tpk.c1
│ └─Selection_29 6400.00 root not(isnull(test.tpk.c1))
│ └─CTEFullScan_30 8000.00 root CTE:dt2 data:CTE_0
│ └─CTEFullScan_30 8000.00 root CTE:cte1 AS dt2 data:CTE_0
└─TableReader_27(Probe) 10000.00 root data:TableFullScan_26
└─TableFullScan_26 10000.00 cop[tikv] table:dt1 keep order:true, stats:pseudo
CTE_0 8000.00 root Non-Recursive CTE
Expand Down
34 changes: 17 additions & 17 deletions cmd/explaintest/r/explain_cte.result
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ CTE_1 2.00 root Recursive CTE
explain with recursive cte(a) as (select 1 union select a+1 from cte where a < 10) select * from cte t1, cte t2;
id estRows task access object operator info
HashJoin_20 4.00 root CARTESIAN inner join
├─CTEFullScan_23(Build) 2.00 root CTE:t2 data:CTE_0
└─CTEFullScan_22(Probe) 2.00 root CTE:t1 data:CTE_0
├─CTEFullScan_23(Build) 2.00 root CTE:cte AS t2 data:CTE_0
└─CTEFullScan_22(Probe) 2.00 root CTE:cte AS t1 data:CTE_0
CTE_0 2.00 root Recursive CTE
├─Projection_13(Seed Part) 1.00 root 1->Column#2
│ └─TableDual_14 1.00 root rows:1
Expand All @@ -68,8 +68,8 @@ CTE_0 2.00 root Recursive CTE
explain with cte(a) as (with recursive cte1(a) as (select 1 union select a + 1 from cte1 where a < 10) select * from cte1) select * from cte t1, cte t2;
id estRows task access object operator info
HashJoin_26 2.56 root CARTESIAN inner join
├─CTEFullScan_29(Build) 1.60 root CTE:t2 data:CTE_0
└─CTEFullScan_28(Probe) 1.60 root CTE:t1 data:CTE_0
├─CTEFullScan_29(Build) 1.60 root CTE:cte AS t2 data:CTE_0
└─CTEFullScan_28(Probe) 1.60 root CTE:cte AS t1 data:CTE_0
CTE_0 1.60 root Non-Recursive CTE
└─Selection_21(Seed Part) 1.60 root 1
└─CTEFullScan_23 2.00 root CTE:cte1 data:CTE_1
Expand Down Expand Up @@ -100,7 +100,7 @@ explain with q(a,b) as (select * from t1) select /*+ merge(q) no_merge(q1) */ *
id estRows task access object operator info
HashJoin_19 40960000.00 root CARTESIAN inner join
├─Selection_23(Build) 6400.00 root eq(test.t1.c1, 2)
│ └─CTEFullScan_24 8000.00 root CTE:q1 data:CTE_0
│ └─CTEFullScan_24 8000.00 root CTE:q AS q1 data:CTE_0
└─Selection_21(Probe) 6400.00 root eq(test.t1.c1, 1)
└─CTEFullScan_22 8000.00 root CTE:q data:CTE_0
CTE_0 8000.00 root Non-Recursive CTE
Expand Down Expand Up @@ -157,9 +157,9 @@ explain with recursive cte1(c1) as (select c1 from t1 union select c1 + 1 c1 fro
id estRows task access object operator info
HashJoin_25 6400.80 root inner join, equal:[eq(test.t1.c1, test.t1.c1)]
├─Selection_29(Build) 6400.80 root not(isnull(test.t1.c1))
│ └─CTEFullScan_30 8001.00 root CTE:dt2 data:CTE_0
│ └─CTEFullScan_30 8001.00 root CTE:cte1 AS dt2 data:CTE_0
└─Selection_27(Probe) 6400.80 root not(isnull(test.t1.c1))
└─CTEFullScan_28 8001.00 root CTE:dt1 data:CTE_0
└─CTEFullScan_28 8001.00 root CTE:cte1 AS dt1 data:CTE_0
CTE_0 8001.00 root Recursive CTE, limit(offset:0, count:1)
├─TableReader_18(Seed Part) 10000.00 root data:TableFullScan_17
│ └─TableFullScan_17 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo
Expand All @@ -169,9 +169,9 @@ explain with recursive cte1(c1) as (select c1 from t1 union select c1 + 1 c1 fro
id estRows task access object operator info
HashJoin_25 6400.80 root inner join, equal:[eq(test.t1.c1, test.t1.c1)]
├─Selection_29(Build) 6400.80 root not(isnull(test.t1.c1))
│ └─CTEFullScan_30 8001.00 root CTE:dt2 data:CTE_0
│ └─CTEFullScan_30 8001.00 root CTE:cte1 AS dt2 data:CTE_0
└─Selection_27(Probe) 6400.80 root not(isnull(test.t1.c1))
└─CTEFullScan_28 8001.00 root CTE:dt1 data:CTE_0
└─CTEFullScan_28 8001.00 root CTE:cte1 AS dt1 data:CTE_0
CTE_0 8001.00 root Recursive CTE, limit(offset:0, count:0)
├─TableReader_18(Seed Part) 10000.00 root data:TableFullScan_17
│ └─TableFullScan_17 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo
Expand Down Expand Up @@ -401,15 +401,15 @@ id estRows task access object operator info
TopN 40.00 root Column#180, Column#181, Column#182, Column#186, offset:0, count:100
└─HashJoin 40.00 root inner join, equal:[eq(Column#170, Column#200)], other cond:gt(case(gt(Column#198, 0), div(Column#208, Column#198), 0.0), case(gt(Column#178, 0), div(Column#188, Column#178), 0.0))
├─Selection(Build) 40.00 root eq(Column#207, 2002), eq(Column#209, "w"), not(isnull(Column#200))
│ └─CTEFullScan 50.00 root CTE:t_w_secyear data:CTE_0
│ └─CTEFullScan 50.00 root CTE:year_total AS t_w_secyear data:CTE_0
└─HashJoin(Probe) 40.00 root inner join, equal:[eq(Column#170, Column#190)]
├─Selection(Build) 40.00 root eq(Column#197, 2001), eq(Column#199, "w"), gt(Column#198, 0), not(isnull(Column#190))
│ └─CTEFullScan 50.00 root CTE:t_w_firstyear data:CTE_0
│ └─CTEFullScan 50.00 root CTE:year_total AS t_w_firstyear data:CTE_0
└─HashJoin(Probe) 40.00 root inner join, equal:[eq(Column#170, Column#180)]
├─Selection(Build) 40.00 root eq(Column#187, 2002), eq(Column#189, "s"), not(isnull(Column#180))
│ └─CTEFullScan 50.00 root CTE:t_s_secyear data:CTE_0
│ └─CTEFullScan 50.00 root CTE:year_total AS t_s_secyear data:CTE_0
└─Selection(Probe) 40.00 root eq(Column#177, 2001), eq(Column#179, "s"), gt(Column#178, 0), not(isnull(Column#170))
└─CTEFullScan 50.00 root CTE:t_s_firstyear data:CTE_0
└─CTEFullScan 50.00 root CTE:year_total AS t_s_firstyear data:CTE_0
CTE_0 50.00 root Non-Recursive CTE
└─Union(Seed Part) 50.00 root
├─Projection 25.00 root test.customer.c_customer_id, test.customer.c_first_name, test.customer.c_last_name, test.customer.c_preferred_cust_flag, test.customer.c_birth_country, test.customer.c_login, test.customer.c_email_address, test.date_dim.d_year, Column#73, s->Column#169
Expand Down Expand Up @@ -467,9 +467,9 @@ where v1.bench_type =v2.bench_type;
id estRows task access object operator info
HashJoin 8000.00 root inner join, equal:[eq(test.t1.bench_type, test.t1.bench_type)]
├─Selection(Build) 6400.00 root not(isnull(test.t1.bench_type))
│ └─CTEFullScan 8000.00 root CTE:v2 data:CTE_2
│ └─CTEFullScan 8000.00 root CTE:version2 AS v2 data:CTE_2
└─Selection(Probe) 6400.00 root not(isnull(test.t1.bench_type))
└─CTEFullScan 8000.00 root CTE:v1 data:CTE_1
└─CTEFullScan 8000.00 root CTE:version1 AS v1 data:CTE_1
CTE_2 8000.00 root Non-Recursive CTE
└─Selection(Seed Part) 8000.00 root eq(test.t1.version, "6.0.0"), not(isnull(test.t1.bench_type))
└─CTEFullScan 10000.00 root CTE:all_data data:CTE_0
Expand All @@ -492,9 +492,9 @@ HashJoin_33 8000.00 root inner join, equal:[eq(test.tbl.id, test.tbl.id)]
CTE_1 10000.00 root Non-Recursive CTE
└─HashJoin_25(Seed Part) 10000.00 root inner join, equal:[eq(test.tbl.id, test.tbl.id)]
├─Selection_29(Build) 8000.00 root not(isnull(test.tbl.id))
│ └─CTEFullScan_30 10000.00 root CTE:b data:CTE_0
│ └─CTEFullScan_30 10000.00 root CTE:t1 AS b data:CTE_0
└─Selection_27(Probe) 8000.00 root not(isnull(test.tbl.id))
└─CTEFullScan_28 10000.00 root CTE:a data:CTE_0
└─CTEFullScan_28 10000.00 root CTE:t1 AS a data:CTE_0
CTE_0 10000.00 root Non-Recursive CTE
└─TableReader_22(Seed Part) 10000.00 root data:TableFullScan_21
└─TableFullScan_21 10000.00 cop[tikv] table:tbl keep order:false, stats:pseudo
Expand Down
5 changes: 4 additions & 1 deletion planner/core/access_object.go
Original file line number Diff line number Diff line change
Expand Up @@ -493,5 +493,8 @@ func (p *PhysicalIndexMergeReader) accessObject(sctx sessionctx.Context) AccessO

// AccessObject implements physicalScan interface.
func (p *PhysicalCTE) AccessObject() AccessObject {
return OtherAccessObject(fmt.Sprintf("CTE:%s", p.cteAsName.L))
if p.cteName == p.cteAsName {
return OtherAccessObject(fmt.Sprintf("CTE:%s", p.cteName.L))
}
return OtherAccessObject(fmt.Sprintf("CTE:%s AS %s", p.cteName.L, p.cteAsName.L))
}
2 changes: 1 addition & 1 deletion planner/core/find_best_task.go
Original file line number Diff line number Diff line change
Expand Up @@ -2265,7 +2265,7 @@ func (p *LogicalCTE) findBestTask(prop *property.PhysicalProperty, _ *PlanCounte
return invalidTask, 1, nil
}
// The physical plan has been build when derive stats.
pcte := PhysicalCTE{SeedPlan: p.cte.seedPartPhysicalPlan, RecurPlan: p.cte.recursivePartPhysicalPlan, CTE: p.cte, cteAsName: p.cteAsName}.Init(p.ctx, p.stats)
pcte := PhysicalCTE{SeedPlan: p.cte.seedPartPhysicalPlan, RecurPlan: p.cte.recursivePartPhysicalPlan, CTE: p.cte, cteAsName: p.cteAsName, cteName: p.cteName}.Init(p.ctx, p.stats)
pcte.SetSchema(p.schema)
t = &rootTask{pcte, false}
if prop.CanAddEnforcer {
Expand Down
2 changes: 1 addition & 1 deletion planner/core/logical_plan_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -4262,7 +4262,7 @@ func (b *PlanBuilder) tryBuildCTE(ctx context.Context, tn *ast.TableName, asName
LimitEnd: limitEnd, pushDownPredicates: make([]expression.Expression, 0), ColumnMap: make(map[string]*expression.Column)}
}
var p LogicalPlan
lp := LogicalCTE{cteAsName: tn.Name, cte: cte.cteClass, seedStat: cte.seedStat, isOuterMostCTE: !b.buildingCTE}.Init(b.ctx, b.getSelectOffset())
lp := LogicalCTE{cteAsName: tn.Name, cteName: tn.Name, cte: cte.cteClass, seedStat: cte.seedStat, isOuterMostCTE: !b.buildingCTE}.Init(b.ctx, b.getSelectOffset())
prevSchema := cte.seedLP.Schema().Clone()
lp.SetSchema(getResultCTESchema(cte.seedLP.Schema(), b.ctx.GetSessionVars()))

Expand Down
1 change: 1 addition & 0 deletions planner/core/logical_plans.go
Original file line number Diff line number Diff line change
Expand Up @@ -1959,6 +1959,7 @@ type LogicalCTE struct {

cte *CTEClass
cteAsName model.CIStr
cteName model.CIStr
seedStat *property.StatsInfo
isOuterMostCTE bool
}
Expand Down
1 change: 1 addition & 0 deletions planner/core/physical_plans.go
Original file line number Diff line number Diff line change
Expand Up @@ -2142,6 +2142,7 @@ type PhysicalCTE struct {
RecurPlan PhysicalPlan
CTE *CTEClass
cteAsName model.CIStr
cteName model.CIStr
}

// PhysicalCTETable is for CTE table.
Expand Down

0 comments on commit 2cb8831

Please sign in to comment.