odps-sdk-impl/odps-mapred-bridge/src/main/java/com/aliyun/odps/mapred/bridge/type/ColumnBasedRecordComparator.java [73:112]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    int i = 0;
    for (Column c : schema) {
      reverseLookupMap.put(c.getName(), i);
      i++;
    }
    i = 0;
    for (String col : selCols) {
      selIdxs[i] = reverseLookupMap.get(col);
      i++;
    }
  }

  @Override
  public int compare(Object[] l, Object[] r) {
    int result = 0;
    int index = 0;
    for (int i : selIdxs) {
      if (r.length < i) {
        if (sortOrders != null && sortOrders[index] == SortOrder.DESC) {
          return 1;
        }
        return -1;
      }
      if (l.length < i) {
        if (sortOrders != null && sortOrders[index] == SortOrder.DESC) {
          return -1;
        }
        return 1;
      }
      result = compare(l[i], r[i], comparators[i]);
      if (result != 0) {
        if (sortOrders != null && sortOrders.length == selIdxs.length
            && sortOrders[index] == SortOrder.DESC) {
          return (0 - result);
        }
        return result;
      }
      index++;
    }
    return 0;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



odps-sdk-impl/odps-mapred-local/src/main/java/com/aliyun/odps/mapred/local/utils/LocalColumnBasedRecordComparator.java [65:104]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    int i = 0;
    for (Column c : schema) {
      reverseLookupMap.put(c.getName(), i);
      i++;
    }
    i = 0;
    for (String col : selCols) {
      selIdxs[i] = reverseLookupMap.get(col);
      i++;
    }
  }

  @Override
  public int compare(Object[] l, Object[] r) {
    int result = 0;
    int index = 0;
    for (int i : selIdxs) {
      if (r.length < i) {
        if (sortOrders != null && sortOrders[index] == SortOrder.DESC) {
          return 1;
        }
        return -1;
      }
      if (l.length < i) {
        if (sortOrders != null && sortOrders[index] == SortOrder.DESC) {
          return -1;
        }
        return 1;
      }
      result = compare(l[i], r[i], comparators[i]);
      if (result != 0) {
        if (sortOrders != null && sortOrders.length == selIdxs.length
            && sortOrders[index] == SortOrder.DESC) {
          return (0 - result);
        }
        return result;
      }
      index++;
    }
    return 0;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



