Skip to content

Commit

Permalink
planner: display cop tasks when explain format is "dot" (pingcap#12225)…
Browse files Browse the repository at this point in the history
  • Loading branch information
sre-bot authored Apr 8, 2020
1 parent 73c1e52 commit 8235d28
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 7 deletions.
21 changes: 21 additions & 0 deletions cmd/explaintest/r/explain_easy.result
Original file line number Diff line number Diff line change
Expand Up @@ -730,3 +730,24 @@ TableReader_7 1.00 root data:Selection_6
└─Selection_6 1.00 cop eq(test.t.b, 1000-01-01 00:00:00.000000)
└─TableScan_5 3.00 cop table:t, range:[-inf,+inf], keep order:false
drop table t;
create table t(a int, b int);
explain format="dot" select * from t where a < 2;
dot contents

digraph TableReader_7 {
subgraph cluster7{
node [style=filled, color=lightgrey]
color=black
label = "root"
"TableReader_7"
}
subgraph cluster6{
node [style=filled, color=lightgrey]
color=black
label = "cop"
"Selection_6" -> "TableScan_5"
}
"TableReader_7" -> "Selection_6"
}

drop table if exists t;
4 changes: 4 additions & 0 deletions cmd/explaintest/t/explain_easy.test
Original file line number Diff line number Diff line change
Expand Up @@ -177,3 +177,7 @@ analyze table t;
explain select * from t where a = 1;
explain select * from t where b = "1000-01-01";
drop table t;

create table t(a int, b int);
explain format="dot" select * from t where a < 2;
drop table if exists t;
17 changes: 10 additions & 7 deletions planner/core/common_plans.go
Original file line number Diff line number Diff line change
Expand Up @@ -682,22 +682,25 @@ func (e *Explain) prepareOperatorInfo(p PhysicalPlan, taskType string, indent st

func (e *Explain) prepareDotInfo(p PhysicalPlan) {
buffer := bytes.NewBufferString("")
buffer.WriteString(fmt.Sprintf("\ndigraph %s {\n", p.ExplainID()))
fmt.Fprintf(buffer, "\ndigraph %s {\n", p.ExplainID())
e.prepareTaskDot(p, "root", buffer)
buffer.WriteString(fmt.Sprintln("}"))
buffer.WriteString("}\n")

e.Rows = append(e.Rows, []string{buffer.String()})
}

func (e *Explain) prepareTaskDot(p PhysicalPlan, taskTp string, buffer *bytes.Buffer) {
buffer.WriteString(fmt.Sprintf("subgraph cluster%v{\n", p.ID()))
fmt.Fprintf(buffer, "subgraph cluster%v{\n", p.ID())
buffer.WriteString("node [style=filled, color=lightgrey]\n")
buffer.WriteString("color=black\n")
buffer.WriteString(fmt.Sprintf("label = \"%s\"\n", taskTp))
fmt.Fprintf(buffer, "label = \"%s\"\n", taskTp)

if len(p.Children()) == 0 {
buffer.WriteString(fmt.Sprintf("\"%s\"\n}\n", p.ExplainID()))
return
if taskTp == "cop" {
fmt.Fprintf(buffer, "\"%s\"\n}\n", p.ExplainID())
return
}
fmt.Fprintf(buffer, "\"%s\"\n", p.ExplainID())
}

var copTasks []PhysicalPlan
Expand All @@ -719,7 +722,7 @@ func (e *Explain) prepareTaskDot(p PhysicalPlan, taskTp string, buffer *bytes.Bu
copTasks = append(copTasks, copPlan.indexPlan)
}
for _, child := range curPlan.Children() {
buffer.WriteString(fmt.Sprintf("\"%s\" -> \"%s\"\n", curPlan.ExplainID(), child.ExplainID()))
fmt.Fprintf(buffer, "\"%s\" -> \"%s\"\n", curPlan.ExplainID(), child.ExplainID())
planQueue = append(planQueue, child)
}
}
Expand Down

0 comments on commit 8235d28

Please sign in to comment.