in client/rpcdataset.go [96:141]
func (s *IoTDBRpcDataSet) constructOneRow() error {
if s.closed {
return errClosed
}
// simulating buffer, read 8 bytes from data set and discard first 8 bytes which have been read.
s.time = s.queryDataSet.Time[:8]
s.queryDataSet.Time = s.queryDataSet.Time[8:]
for i := 0; i < len(s.queryDataSet.BitmapList); i++ {
bitmapBuffer := s.queryDataSet.BitmapList[i]
if s.rowsIndex%8 == 0 {
s.currentBitmap[i] = bitmapBuffer[0]
s.queryDataSet.BitmapList[i] = bitmapBuffer[1:]
}
if !s.isNull(i, s.rowsIndex) {
valueBuffer := s.queryDataSet.ValueList[i]
dataType := s.columnTypeDeduplicatedList[i]
switch dataType {
case BOOLEAN:
s.values[i] = valueBuffer[:1]
s.queryDataSet.ValueList[i] = valueBuffer[1:]
case INT32:
s.values[i] = valueBuffer[:4]
s.queryDataSet.ValueList[i] = valueBuffer[4:]
case INT64:
s.values[i] = valueBuffer[:8]
s.queryDataSet.ValueList[i] = valueBuffer[8:]
case FLOAT:
s.values[i] = valueBuffer[:4]
s.queryDataSet.ValueList[i] = valueBuffer[4:]
case DOUBLE:
s.values[i] = valueBuffer[:8]
s.queryDataSet.ValueList[i] = valueBuffer[8:]
case TEXT:
length := bytesToInt32(valueBuffer[:4])
s.values[i] = valueBuffer[4 : 4+length]
s.queryDataSet.ValueList[i] = valueBuffer[4+length:]
default:
return fmt.Errorf("unsupported data type %d", dataType)
}
}
}
s.rowsIndex++
return nil
}