code: func (p *PhysicalApply) MarshalJSON() ([]byte, error) {
  	join, err := json.Marshal(p.PhysicalJoin)
  	if err != nil {
  		return nil, errors.Trace(err)
  	}
  	buffer := bytes.NewBufferString("{")
  	buffer.WriteString(fmt.Sprintf(
  		"\"innerPlan\": \"%s\",\n "+
  			"\"outerPlan\": \"%s\",\n "+
  			"\"join\": %s\n}", p.children[1].GetID(), p.children[0].GetID(), join))
  	return buffer.Bytes(), nil
  }
docs: // MarshalJSON implements json.Marshaler interface.