コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }