// handleCellValue returns a Row if the cell value includes a commit, otherwise nil. func (cr *chunkReader) handleCellValue(cc *btspb.ReadRowsResponse_CellChunk) Row { if cc.ValueSize > 0 { // ValueSize is specified so expect a split value of ValueSize bytes if cr.curVal == nil { cr.curVal = make([]byte, 0, cc.ValueSize) } cr.curVal = append(cr.curVal, cc.Value...) cr.state = cellInProgress } else { // This cell is either the complete value or the last chunk of a split if cr.curVal == nil { cr.curVal = cc.Value } else { cr.curVal = append(cr.curVal, cc.Value...) } cr.finishCell() if cc.GetCommitRow() { return cr.commitRow() } else { cr.state = rowInProgress } } return nil }
// Validate a RowStatus, commit or reset, if present. func (cr *chunkReader) validateRowStatus(cc *btspb.ReadRowsResponse_CellChunk) error { // Resets can't be specified with any other part of a cell if cc.GetResetRow() && (cr.isAnyKeyPresent(cc) || cc.Value != nil || cc.ValueSize != 0 || cc.Labels != nil) { return fmt.Errorf("reset must not be specified with other fields %v", cc) } if cc.GetCommitRow() && cc.ValueSize > 0 { return fmt.Errorf("commit row found in between chunks in a cell") } return nil }