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