code: func (p *PhysicalHashJoin) ResolveIndices() (err error) {
  	err = p.physicalSchemaProducer.ResolveIndices()
  	if err != nil {
  		return err
  	}
  	lSchema := p.children[0].Schema()
  	rSchema := p.children[1].Schema()
  	for i, fun := range p.EqualConditions {
  		lArg, err := fun.GetArgs()[0].ResolveIndices(lSchema)
  		if err != nil {
  			return err
  		}
  		rArg, err := fun.GetArgs()[1].ResolveIndices(rSchema)
  		if err != nil {
  			return err
  		}
  		p.EqualConditions[i] = expression.NewFunctionInternal(fun.GetCtx(), fun.FuncName.L, fun.GetType(), lArg, rArg).(*expression.ScalarFunction)
  	}
  	for i, expr := range p.LeftConditions {
  		p.LeftConditions[i], err = expr.ResolveIndices(lSchema)
  		if err != nil {
  			return err
  		}
  	}
  	for i, expr := range p.RightConditions {
  		p.RightConditions[i], err = expr.ResolveIndices(rSchema)
  		if err != nil {
  			return err
  		}
  	}
  	for i, expr := range p.OtherConditions {
  		p.OtherConditions[i], err = expr.ResolveIndices(expression.MergeSchema(lSchema, rSchema))
  		if err != nil {
  			return err
  		}
  	}
  	return
  }
docs: // ResolveIndices implements Plan interface.