@Override
  public RelNode accept(RexShuttle shuttle) {
    RexNode joinFilter = shuttle.apply(this.condition);

    if (joinFilter == this.condition) {
      return this;
    }

    return new HiveMultiJoin(
        getCluster(),
        inputs,
        joinFilter,
        rowType,
        joinInputs,
        joinTypes,
        filters);
  }
Constructs a MultiJoin.

@param cluster               cluster that join belongs to
@param inputs                inputs into this multi-join
@param condition             join filter applicable to this join node
@param rowType               row type of the join result of this node
@param joinInputs
@param joinTypes             the join type corresponding to each input; if
                             an input is null-generating in a left or right
                             outer join, the entry indicates the type of
                             outer join; otherwise, the entry is set to
                             INNER
@param filters               filters associated with each join
                             input
@param joinPredicateInfo     join predicate information
ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveMultiJoin.java