public static ReadTableCommand parse()

in odps-console-public/src/main/java/com/aliyun/openservices/odps/console/pub/ReadTableCommand.java [217:289]


  public static ReadTableCommand parse(String commandString, ExecutionContext sessionContext)
      throws ODPSConsoleException {

    String readCommandString = commandString;
    if (readCommandString.toUpperCase().matches("\\s*READ\\s+\\w[\\s\\S]*")) {

      // 会把所有多个空格都替换掉
      readCommandString = readCommandString.replaceAll("\\s+", " ");

      // remove "read "
      readCommandString = readCommandString.substring("read ".length()).trim();

      String tableName = "";
      int index = readCommandString.indexOf("(");
      if (index > 0) {
        tableName = readCommandString.substring(0, index);
        if (tableName.toUpperCase().indexOf(" PARTITION") > 0) {
          // tableName中也会包含PARTITION字符,
          tableName = tableName.substring(0, tableName.toUpperCase().indexOf(" PARTITION"));
        }
      } else {
        // 没有column和PARTITION,用" "空格来区分
        if (readCommandString.indexOf(" ") > 0) {
          tableName = readCommandString.substring(0, readCommandString.indexOf(" "));
        } else {
          // read mytable的情况
          tableName = readCommandString;
        }
      }

      // remove tablename, 把前面的空格也删除掉
      readCommandString = readCommandString.substring(tableName.length()).trim();

      String columns = "";
      if (readCommandString.startsWith("(") && readCommandString.indexOf(")") > 0) {
        // 取columns
        columns = readCommandString.substring(0, readCommandString.indexOf(")") + 1);
      }
      // remove columns, 把前面的空格也删除掉
      readCommandString = readCommandString.substring(columns.length()).trim();

      String partitions = "";
      if (readCommandString.toUpperCase().indexOf("PARTITION") == 0
          && readCommandString.indexOf("(") > 0 && readCommandString.indexOf(")") > 0
          && readCommandString.indexOf("(") < readCommandString.indexOf(")")) {

        partitions = readCommandString.substring(readCommandString.indexOf("("),
                                                 readCommandString.indexOf(")") + 1);
        readCommandString = readCommandString.substring(readCommandString.indexOf(")") + 1).trim();
      }

      // 默认 10W > 服务器端返回10000行
      int lineNum = 100000;
      if (!"".equals(readCommandString)) {
        try {
          lineNum = Integer.parseInt(readCommandString);
        } catch (NumberFormatException e) {
          // 最后只剩下lineNum,如果转成 linenum出错,则命令出错
          throw new ODPSConsoleException(ODPSConsoleConstants.BAD_COMMAND);
        }
      }

      tableName = tableName.trim();
      Coordinate coordinate = Coordinate.getCoordinateABC(tableName);
      coordinate.setPartitionSpec(populatePartitions(partitions));

      List<String> columnList = validateAndGetColumnList(columns);

      return new ReadTableCommand(coordinate, columnList, lineNum, commandString, sessionContext);
    }

    return null;
  }