code: func (s *baseSingleGroupJoinOrderSolver) makeBushyJoin(cartesianJoinGroup []LogicalPlan) LogicalPlan {
  	resultJoinGroup := make([]LogicalPlan, 0, (len(cartesianJoinGroup)+1)/2)
  	for len(cartesianJoinGroup) > 1 {
  		resultJoinGroup = resultJoinGroup[:0]
  		for i := 0; i < len(cartesianJoinGroup); i += 2 {
  			if i+1 == len(cartesianJoinGroup) {
  				resultJoinGroup = append(resultJoinGroup, cartesianJoinGroup[i])
  				break
  			}
  			newJoin := s.newCartesianJoin(cartesianJoinGroup[i], cartesianJoinGroup[i+1])
  			for i := len(s.otherConds) - 1; i >= 0; i-- {
  				cols := expression.ExtractColumns(s.otherConds[i])
  				if newJoin.schema.ColumnsIndices(cols) != nil {
  					newJoin.OtherConditions = append(newJoin.OtherConditions, s.otherConds[i])
  					s.otherConds = append(s.otherConds[:i], s.otherConds[i+1:]...)
  				}
  			}
  			resultJoinGroup = append(resultJoinGroup, newJoin)
  		}
  		cartesianJoinGroup, resultJoinGroup = resultJoinGroup, cartesianJoinGroup
  	}
  	return cartesianJoinGroup[0]
  }
docs: // makeBushyJoin build bushy tree for the nodes which have no equal condition to connect them.