public void cloneQBJoinTreeProps(JoinDesc joinDesc) {
    leftAlias = joinDesc.leftAlias;
    leftAliases = joinDesc.leftAliases == null ? null : joinDesc.leftAliases.clone();
    rightAliases = joinDesc.rightAliases == null ? null : joinDesc.rightAliases.clone();
    baseSrc = joinDesc.baseSrc == null ? null : joinDesc.baseSrc.clone();
    id = joinDesc.id;
    mapSideJoin = joinDesc.mapSideJoin;
    mapAliases = joinDesc.mapAliases == null ? null : new ArrayList<String>(joinDesc.mapAliases);
    aliasToOpInfo = new HashMap<String, Operator<? extends OperatorDesc>>(joinDesc.aliasToOpInfo);
    leftInputJoin = joinDesc.leftInputJoin;
    streamAliases = joinDesc.streamAliases == null ? null : new ArrayList<String>(joinDesc.streamAliases);
    fkJoinTableIndex = joinDesc.getFkJoinTableIndex();
    nonFkSideIsFiltered = joinDesc.isNonFkSideIsFiltered();
    if (joinDesc.joinKeys != null) {
      joinKeys = new ExprNodeDesc[joinDesc.joinKeys.length][];
      for(int i = 0; i < joinDesc.joinKeys.length; i++) {
        joinKeys[i] = joinDesc.joinKeys[i].clone();
      }
    }
  }
@param skewKeysValuesTables
         set the table desc for storing skew keys and their corresponding
         value;
ql/src/java/org/apache/hadoop/hive/ql/plan/JoinDesc.java