code: func flattenPushDownPlan(p PhysicalPlan) []PhysicalPlan {
  	plans := make([]PhysicalPlan, 0, 5)
  	for {
  		plans = append(plans, p)
  		if len(p.Children()) == 0 {
  			break
  		}
  		p = p.Children()[0]
  	}
  	for i := 0; i < len(plans)/2; i++ {
  		j := len(plans) - i - 1
  		plans[i], plans[j] = plans[j], plans[i]
  	}
  	return plans
  }
docs: // flattenPushDownPlan converts a plan tree to a list, whose head is the leaf node like table scan.