in tablestore/src/main/java/com/alicloud/openservices/tablestore/core/protocol/ResponseFactory.java [991:1040]
public static ReadRecordsResponse createReadRecordsResponse(
ResponseContentWithMeta response, TunnelServiceApi.ReadRecordsResponse tunnelResponse) {
ReadRecordsResponse resp = new ReadRecordsResponse(response.getMeta());
resp.setMemoizedSerializedSize(tunnelResponse.getSerializedSize());
if (tunnelResponse.hasNextToken()) {
if (FINISH_TAG.equals(tunnelResponse.getNextToken())) {
resp.setNextToken(null);
} else {
resp.setNextToken(tunnelResponse.getNextToken());
}
}
if (tunnelResponse.hasMayMoreRecord()) {
resp.setMayMoreRecord(tunnelResponse.getMayMoreRecord());
}
List<StreamRecord> records = new ArrayList<StreamRecord>();
for (TunnelServiceApi.Record record : tunnelResponse.getRecordsList()) {
try {
PlainBufferCodedInputStream inputStream = new PlainBufferCodedInputStream(
new PlainBufferInputStream(record.getRecord().asReadOnlyByteBuffer())
);
List<PlainBufferRow> rows = inputStream.readRowsWithHeader();
if (rows.size() != 1) {
throw new IOException("Expect only returns one row, Row count: " + rows.size());
}
PlainBufferRow row = rows.get(0);
if (record.hasOriginRecord()) {
PlainBufferCodedInputStream inputOriginStream = new PlainBufferCodedInputStream(
new PlainBufferInputStream(record.getOriginRecord().asReadOnlyByteBuffer())
);
List<PlainBufferRow> originRows = inputOriginStream.readRowsWithoutPk();
if (originRows.size() != 1) {
throw new IOException("Expect only returns one row, Row count: " + rows.size());
}
PlainBufferRow originRow = originRows.get(0);
records.add(PlainBufferConversion.toStreamRecord(row, originRow, record.getActionType(), false));
} else {
records.add(PlainBufferConversion.toStreamRecord(row, null, record.getActionType(), false));
}
} catch (Exception e) {
throw new ClientException("Failed to parse row", e);
}
}
resp.setRecords(records);
return resp;
}