@Explain(explainLevels = { Level.DEFAULT, Level.EXTENDED })
  public String getJoinCondString() {
    StringBuilder sb = new StringBuilder();

    switch (type) {
    case JoinDesc.INNER_JOIN:
      sb.append("Inner Join ");
      break;
    case JoinDesc.FULL_OUTER_JOIN:
      sb.append("Full Outer Join ");
      break;
    case JoinDesc.LEFT_OUTER_JOIN:
      sb.append("Left Outer Join ");
      break;
    case JoinDesc.RIGHT_OUTER_JOIN:
      sb.append("Right Outer Join ");
      break;
    case JoinDesc.UNIQUE_JOIN:
      sb.append("Unique Join ");
      break;
    case JoinDesc.LEFT_SEMI_JOIN:
      sb.append("Left Semi Join ");
      break;
    case JoinDesc.ANTI_JOIN:
      sb.append("Anti Join ");
      break;
    default:
      sb.append("Unknown Join ");
      break;
    }

    sb.append(left);
    sb.append(" to ");
    sb.append(right);

    return sb.toString();
  }
@param preserved
         if table is preserved, false otherwise
ql/src/java/org/apache/hadoop/hive/ql/plan/JoinCondDesc.java