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();
}