code: func (e *Explain) explainPlanInRowFormat(p PhysicalPlan, taskType, indent string, isLastChild bool) {
  	e.prepareOperatorInfo(p, taskType, indent, isLastChild)
  	e.explainedPlans[p.ID()] = true
  
  	// For every child we create a new sub-tree rooted by it.
  	childIndent := e.getIndent4Child(indent, isLastChild)
  	for i, child := range p.Children() {
  		if e.explainedPlans[child.ID()] {
  			continue
  		}
  		e.explainPlanInRowFormat(child.(PhysicalPlan), taskType, childIndent, i == len(p.Children())-1)
  	}
  
  	switch copPlan := p.(type) {
  	case *PhysicalTableReader:
  		e.explainPlanInRowFormat(copPlan.tablePlan, "cop", childIndent, true)
  	case *PhysicalIndexReader:
  		e.explainPlanInRowFormat(copPlan.indexPlan, "cop", childIndent, true)
  	case *PhysicalIndexLookUpReader:
  		e.explainPlanInRowFormat(copPlan.indexPlan, "cop", childIndent, false)
  		e.explainPlanInRowFormat(copPlan.tablePlan, "cop", childIndent, true)
  	}
  }
docs: // explainPlanInRowFormat generates explain information for root-tasks.