public TsBlock getAllSatisfiedData()

in java/tsfile/src/main/java/org/apache/tsfile/read/reader/page/PageReader.java [213:367]


  public TsBlock getAllSatisfiedData() throws IOException {
    uncompressDataIfNecessary();
    TsBlockBuilder builder;
    int initialExpectedEntries = (int) pageHeader.getStatistics().getCount();
    if (paginationController.hasLimit()) {
      initialExpectedEntries =
          (int) Math.min(initialExpectedEntries, paginationController.getCurLimit());
    }
    builder = new TsBlockBuilder(initialExpectedEntries, Collections.singletonList(dataType));

    TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
    ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
    boolean allSatisfy = recordFilter == null || recordFilter.allSatisfy(this);
    switch (dataType) {
      case BOOLEAN:
        while (timeDecoder.hasNext(timeBuffer)) {
          long timestamp = timeDecoder.readLong(timeBuffer);
          boolean aBoolean = valueDecoder.readBoolean(valueBuffer);
          if (isDeleted(timestamp)
              || (!allSatisfy && !recordFilter.satisfyBoolean(timestamp, aBoolean))) {
            continue;
          }
          if (paginationController.hasCurOffset()) {
            paginationController.consumeOffset();
            continue;
          }
          if (paginationController.hasCurLimit()) {
            timeBuilder.writeLong(timestamp);
            valueBuilder.writeBoolean(aBoolean);
            builder.declarePosition();
            paginationController.consumeLimit();
          } else {
            break;
          }
        }
        break;
      case INT32:
      case DATE:
        while (timeDecoder.hasNext(timeBuffer)) {
          long timestamp = timeDecoder.readLong(timeBuffer);
          int anInt = valueDecoder.readInt(valueBuffer);
          if (isDeleted(timestamp)
              || (!allSatisfy && !recordFilter.satisfyInteger(timestamp, anInt))) {
            continue;
          }
          if (paginationController.hasCurOffset()) {
            paginationController.consumeOffset();
            continue;
          }
          if (paginationController.hasCurLimit()) {
            timeBuilder.writeLong(timestamp);
            valueBuilder.writeInt(anInt);
            builder.declarePosition();
            paginationController.consumeLimit();
          } else {
            break;
          }
        }
        break;
      case INT64:
      case TIMESTAMP:
        while (timeDecoder.hasNext(timeBuffer)) {
          long timestamp = timeDecoder.readLong(timeBuffer);
          long aLong = valueDecoder.readLong(valueBuffer);
          if (isDeleted(timestamp)
              || (!allSatisfy && !recordFilter.satisfyLong(timestamp, aLong))) {
            continue;
          }
          if (paginationController.hasCurOffset()) {
            paginationController.consumeOffset();
            continue;
          }
          if (paginationController.hasCurLimit()) {
            timeBuilder.writeLong(timestamp);
            valueBuilder.writeLong(aLong);
            builder.declarePosition();
            paginationController.consumeLimit();
          } else {
            break;
          }
        }
        break;
      case FLOAT:
        while (timeDecoder.hasNext(timeBuffer)) {
          long timestamp = timeDecoder.readLong(timeBuffer);
          float aFloat = valueDecoder.readFloat(valueBuffer);
          if (isDeleted(timestamp)
              || (!allSatisfy && !recordFilter.satisfyFloat(timestamp, aFloat))) {
            continue;
          }
          if (paginationController.hasCurOffset()) {
            paginationController.consumeOffset();
            continue;
          }
          if (paginationController.hasCurLimit()) {
            timeBuilder.writeLong(timestamp);
            valueBuilder.writeFloat(aFloat);
            builder.declarePosition();
            paginationController.consumeLimit();
          } else {
            break;
          }
        }
        break;
      case DOUBLE:
        while (timeDecoder.hasNext(timeBuffer)) {
          long timestamp = timeDecoder.readLong(timeBuffer);
          double aDouble = valueDecoder.readDouble(valueBuffer);
          if (isDeleted(timestamp)
              || (!allSatisfy && !recordFilter.satisfyDouble(timestamp, aDouble))) {
            continue;
          }
          if (paginationController.hasCurOffset()) {
            paginationController.consumeOffset();
            continue;
          }
          if (paginationController.hasCurLimit()) {
            timeBuilder.writeLong(timestamp);
            valueBuilder.writeDouble(aDouble);
            builder.declarePosition();
            paginationController.consumeLimit();
          } else {
            break;
          }
        }
        break;
      case TEXT:
      case BLOB:
      case STRING:
        while (timeDecoder.hasNext(timeBuffer)) {
          long timestamp = timeDecoder.readLong(timeBuffer);
          Binary aBinary = valueDecoder.readBinary(valueBuffer);
          if (isDeleted(timestamp)
              || (!allSatisfy && !recordFilter.satisfyBinary(timestamp, aBinary))) {
            continue;
          }
          if (paginationController.hasCurOffset()) {
            paginationController.consumeOffset();
            continue;
          }
          if (paginationController.hasCurLimit()) {
            timeBuilder.writeLong(timestamp);
            valueBuilder.writeBinary(aBinary);
            builder.declarePosition();
            paginationController.consumeLimit();
          } else {
            break;
          }
        }
        break;
      default:
        throw new UnSupportedDataTypeException(String.valueOf(dataType));
    }
    return builder.build();
  }