code: func (p *PhysicalHashJoin) matchProperty(prop *requiredProperty, childPlanInfo ...*physicalPlanInfo) *physicalPlanInfo {
  	lRes, rRes := childPlanInfo[0], childPlanInfo[1]
  	lCount, rCount := float64(lRes.count), float64(rRes.count)
  	np := *p
  	np.SetChildren(lRes.p, rRes.p)
  	if len(prop.props) != 0 {
  		np.Concurrency = 1
  	}
  	cost := lRes.cost + rRes.cost
  	if p.SmallTable == 1 {
  		cost += lCount + memoryFactor*rCount
  	} else {
  		cost += rCount + memoryFactor*lCount
  	}
  	return &physicalPlanInfo{p: &np, cost: cost, count: estimateJoinCount(lRes.count, rRes.count)}
  }
docs: // matchProperty implements PhysicalPlan matchProperty interface.