public QueryDataSet queryResult()

in tsfile-viewer-core/src/main/java/org/apache/iotdb/tool/core/service/TsFileAnalyserV13.java [807:857]


  public QueryDataSet queryResult(
      long startTimestamp,
      long endTimestamp,
      String device,
      String measurement,
      String value,
      int offset,
      int limit)
      throws IOException, InterruptedException {
    countDownLatch.await();
    if (Objects.equals(device, "") || Objects.equals(measurement, "")) {
      logger.warn(
          "device or measurement is empty, please check. device:[{}], measurement:[{}]",
          device,
          measurement);
      return null;
    }
    TsFileReader tsFileReader = new TsFileReader(reader);
    Path path = new Path(device, measurement);
    List<Path> paths = new ArrayList<>();
    paths.add(path);
    IExpression timeFilter;
    if (startTimestamp > 0 && endTimestamp > 0) {
      timeFilter =
          BinaryExpression.and(
              new GlobalTimeExpression(TimeFilter.gt(startTimestamp)),
              new GlobalTimeExpression(TimeFilter.ltEq(endTimestamp)));
    } else if (endTimestamp > 0) {
      timeFilter = new GlobalTimeExpression(TimeFilter.ltEq(endTimestamp));
    } else {
      timeFilter = new GlobalTimeExpression(TimeFilter.gt(startTimestamp));
    }

    QueryExpression queryExpression;
    if (!(Objects.equals(value, ""))) {
      IExpression valueFilter = new SingleSeriesExpression(path, ValueFilter.eq(value));
      IExpression finalExpression = BinaryExpression.and(timeFilter, valueFilter);
      queryExpression = QueryExpression.create(paths, finalExpression);
    } else {
      queryExpression = QueryExpression.create(paths, timeFilter);
    }
    QueryDataSet result = tsFileReader.query(queryExpression);
    if (limit > 0) {
      result.setRowLimit(limit);
    }
    if (offset > 0) {
      result.setRowOffset(offset);
    }
    logger.info("QueryExpression is: {}", queryExpression);
    return result;
  }