in backend/src/main/java/org/apache/iotdb/admin/service/impl/IotDBServiceImpl.java [567:648]
public CountDTO getMeasurementsByDevice(
Connection connection, String deviceName, Integer pageSize, Integer pageNum, String keyword)
throws BaseException {
SessionPool sessionPool = getSessionPool(connection);
String queryCountSql = "count timeseries " + deviceName;
String s = executeQueryOneValue(sessionPool, queryCountSql);
int size = Integer.parseInt(s);
String sql = "show timeseries " + deviceName;
int pageStart = pageNum == 1 ? 0 : (pageNum - 1) * pageSize;
int pageEnd = size < pageNum * pageSize ? size : pageNum * pageSize;
if (size > pageStart) {
sql = "show timeseries " + deviceName + " limit " + pageSize + " offset " + pageStart;
}
SessionDataSetWrapper sessionDataSetWrapper = null;
try {
sessionDataSetWrapper = sessionPool.executeQueryStatement(sql);
List<MeasurementDTO> results = new ArrayList<>();
int batchSize = sessionDataSetWrapper.getBatchSize();
int count = 0;
if (batchSize > 0) {
while (sessionDataSetWrapper.hasNext()) {
RowRecord rowRecord = sessionDataSetWrapper.next();
List<org.apache.iotdb.tsfile.read.common.Field> fields = rowRecord.getFields();
String measurementName = fields.get(0).toString();
if (StringUtils.removeStart(measurementName, deviceName + ".").contains(".")) {
continue;
}
if (keyword != null || "".equals(keyword)) {
if (measurementName.contains(keyword)) {
count++;
} else {
continue;
}
// if (count >= pageSize * (pageNum - 1) + 1 && count <= pageSize * pageNum)
// {
MeasurementDTO t = new MeasurementDTO();
List<String> columnNames = sessionDataSetWrapper.getColumnNames();
for (int i = 0; i < fields.size(); i++) {
Field field =
MeasurementDTO.class.getDeclaredField(columnNames.get(i).replaceAll(" ", ""));
field.setAccessible(true);
field.set(t, fields.get(i).toString());
}
results.add(t);
// }
} else {
count++;
// if (count >= pageSize * (pageNum - 1) + 1 && count <= pageSize * pageNum)
// {
MeasurementDTO t = new MeasurementDTO();
List<String> columnNames = sessionDataSetWrapper.getColumnNames();
for (int i = 0; i < fields.size(); i++) {
Field field =
MeasurementDTO.class.getDeclaredField(columnNames.get(i).replaceAll(" ", ""));
field.setAccessible(true);
field.set(t, fields.get(i).toString());
}
results.add(t);
// }
}
}
}
CountDTO countDTO = new CountDTO();
countDTO.setObjects(results);
countDTO.setTotalCount(size);
Integer totalPage = size % pageSize == 0 ? size / pageSize : size / pageSize + 1;
countDTO.setTotalPage(totalPage);
return countDTO;
} catch (IoTDBConnectionException e) {
logger.error(e.getMessage());
throw new BaseException(ErrorCode.GET_MSM_FAIL, ErrorCode.GET_MSM_FAIL_MSG);
} catch (StatementExecutionException e) {
logger.error(e.getMessage());
throw new BaseException(ErrorCode.GET_MSM_FAIL, ErrorCode.GET_MSM_FAIL_MSG);
} catch (Exception e) {
logger.error(e.getMessage());
throw new BaseException(ErrorCode.GET_MSM_FAIL, ErrorCode.GET_MSM_FAIL_MSG);
} finally {
closeResultSet(sessionDataSetWrapper);
closeSessionPool(sessionPool);
}
}