예제 #1
0
        internal virtual Row ProcessRowItem(OutputRows outputRows)
        {
            var valuesList = new List <byte[]>();
            int i          = 0;

            foreach (int len in outputRows.GetRawColumnLengths())
            {
                if (len < 0)
                {
                    valuesList.Add(null);
                }
                else
                {
                    var buffer = new byte[len];
                    outputRows.ReadRawColumnValue(buffer, 0, len);
                    valuesList.Add(buffer);
                }

                i++;
                if (i >= outputRows.Metadata.Columns.Length)
                {
                    break;
                }
            }

            return(new Row(valuesList.ToArray(), outputRows.Metadata.Columns, outputRows.Metadata.ColumnIndexes));
        }
예제 #2
0
        internal ResultResponse(Frame frame) : base(frame)
        {
            Kind = (ResultResponseKind)Reader.ReadInt32();
            switch (Kind)
            {
            case ResultResponseKind.Void:
                Output = new OutputVoid(TraceId);
                break;

            case ResultResponseKind.Rows:
                var outputRows = new OutputRows(Reader, frame.ResultMetadata, TraceId);
                Output = outputRows;
                if (outputRows.ResultRowsMetadata.HasNewResultMetadataId())
                {
                    NewResultMetadata = new ResultMetadata(
                        outputRows.ResultRowsMetadata.NewResultMetadataId, outputRows.ResultRowsMetadata);
                }
                break;

            case ResultResponseKind.SetKeyspace:
                Output = new OutputSetKeyspace(Reader.ReadString());
                break;

            case ResultResponseKind.Prepared:
                Output = new OutputPrepared(frame.Header.Version, Reader);
                break;

            case ResultResponseKind.SchemaChange:
                Output = new OutputSchemaChange(frame.Header.Version, Reader, TraceId);
                break;

            default:
                throw new DriverInternalError("Unknown ResultResponseKind Type");
            }
        }
예제 #3
0
 /// <summary>
 /// Process rows and sets the paging event handler
 /// </summary>
 internal virtual void ProcessRows(RowSet rs, OutputRows outputRows, Session session)
 {
     if (outputRows.Metadata != null)
     {
         rs.Columns     = outputRows.Metadata.Columns;
         rs.PagingState = outputRows.Metadata.PagingState;
         if (rs.PagingState != null)
         {
             rs.FetchNextPage = (pagingState) =>
             {
                 if (session.IsDisposed)
                 {
                     _logger.Warning("Trying to page results using a Session already disposed.");
                     return(new RowSet());
                 }
                 Statement.SetPagingState(pagingState);
                 return(session.Execute(Statement));
             };
         }
     }
     for (var i = 0; i < outputRows.Rows; i++)
     {
         rs.AddRow(ProcessRowItem(outputRows));
     }
 }
예제 #4
0
        internal ResultResponse(Frame frame)
            : base(frame)
        {
            //Handle result flags
            if ((frame.Header.Flags & FrameHeader.HeaderFlag.Warning) != 0)
            {
                Warnings = Reader.ReadStringList();
            }
            if ((frame.Header.Flags &FrameHeader.HeaderFlag.CustomPayload) != 0)
            {
                CustomPayload = Reader.ReadBytesMap();
            }

            Kind = (ResultResponseKind) Reader.ReadInt32();
            switch (Kind)
            {
                case ResultResponseKind.Void:
                    Output = new OutputVoid(TraceId);
                    break;
                case ResultResponseKind.Rows:
                    Output = new OutputRows(Reader, TraceId);
                    break;
                case ResultResponseKind.SetKeyspace:
                    Output = new OutputSetKeyspace(Reader.ReadString());
                    break;
                case ResultResponseKind.Prepared:
                    Output = new OutputPrepared(frame.Header.Version, Reader);
                    break;
                case ResultResponseKind.SchemaChange:
                    Output = new OutputSchemaChange(Reader, TraceId);
                    break;
                default:
                    throw new DriverInternalError("Unknown ResultResponseKind Type");
            }
        }