private Response.OTSResponse DecodeGetRange(byte[] body, out IMessage _message) { var builder = PB.GetRangeResponse.CreateBuilder(); builder.MergeFrom(body); var message = builder.Build(); var response = new Response.GetRangeResponse(); response.ConsumedCapacityUnit = ParseCapacityUnit(message.Consumed.CapacityUnit); response.NextPrimaryKey = ParsePrimaryKey(message.NextStartPrimaryKeyList); if (response.NextPrimaryKey.Count == 0) { // No next PK returned response.NextPrimaryKey = null; } foreach (var row in message.RowsList) { var rowData = new Response.RowDataFromGetRange(); rowData.PrimaryKey = ParsePrimaryKey(row.PrimaryKeyColumnsList); rowData.Attribute = ParseAttribute(row.AttributeColumnsList); response.RowDataList.Add(rowData); } _message = message; return(response); }
private Response.OTSResponse DecodeGetRange(byte[] body, out IMessage _message) { var builder = PB.GetRangeResponse.CreateBuilder(); builder.MergeFrom(body); var message = builder.Build(); var response = new Response.GetRangeResponse { ConsumedCapacityUnit = ParseCapacityUnit(message.Consumed.CapacityUnit) }; if (!message.HasNextStartPrimaryKey) { response.NextPrimaryKey = null; } else { var inputStream = new PB.PlainBufferCodedInputStream(message.NextStartPrimaryKey.CreateCodedInput()); var rows = inputStream.ReadRowsWithHeader(); if (rows.Count != 1) { throw new IOException("Expect only one row return. Row count: " + rows.Count); } PB.PlainBufferRow row = rows[0]; if (row.HasDeleteMarker() || row.HasCells()) { throw new IOException("The next primary key should only have primary key: " + row); } response.NextPrimaryKey = PB.PlainBufferConversion.ToPrimaryKey(row.GetPrimaryKey()); } if (message.HasRows && !message.Rows.IsEmpty) { List <DataModel.Row> rows = new List <DataModel.Row>(); var inputStream = new PB.PlainBufferCodedInputStream(message.Rows.CreateCodedInput()); List <PB.PlainBufferRow> pbRows = inputStream.ReadRowsWithHeader(); foreach (var pbRow in pbRows) { rows.Add((DataModel.Row)PB.PlainBufferConversion.ToRow(pbRow)); } response.RowDataList = rows; } if (message.HasNextToken) { response.NextToken = message.NextToken.ToByteArray(); } _message = message; return(response); }