Beispiel #1
0
        public override void Run(bool runChildren)
        {
            currentDataRow = new DataRowObject();
            SetText(GetText());
            base.Run(runChildren);
            if (file == null)
            {
                file = this.GetUpperRawler <File>();
                if (file == null)
                {
                    ReportManage.ErrUpperNotFound <File>(this);
                    return;
                }
            }

            if (MustAttributes.IsNullOrEmpty() == false)
            {
                var must = MustAttributes.Split(',');
                if (currentDataRow.Attributes.Intersect(must).Count() == must.Count())
                {
                    if (SaveType == FileType.Ltsv)
                    {
                        file.WriteLine(currentDataRow.ToLtsv());
                    }
                    else
                    {
                        file.WriteLine(currentDataRow.DataDic.Select(n => n.Value.JoinText(",")).JoinText("\t"));
                    }
                }
            }
            else
            {
                if (SaveType == FileType.Ltsv)
                {
                    file.WriteLine(currentDataRow.ToLtsv());
                }
                else
                {
                    file.WriteLine(currentDataRow.DataDic.Select(n => n.Value.JoinText(",")).JoinText("\t"));
                }
            }
            if (currentDataRow.IsDataNull())
            {
                if (EmptyTree != null)
                {
                    EmptyTree.SetParent(this);
                    EmptyTree.Run();
                }
            }
        }
Beispiel #2
0
        public static async Task <(BackendMessageObject msg, Int32 msgSize)> ReadBackendMessageAsync(
            MessageIOArgs ioArgs,
            ResizableArray <ResettableTransformable <Int32?, Int32> > columnSizes
            )
        {
            var args   = ioArgs.Item1;
            var stream = ioArgs.Item2;
            var token  = ioArgs.Item3;
            var buffer = ioArgs.Item4;
            var code   = (BackendMessageCode)(await args.ReadByte(stream, buffer, token));
            var length = await args.ReadInt32(stream, buffer, token);

            var remaining = length - sizeof(Int32);

            if (code != BackendMessageCode.DataRow && code != BackendMessageCode.CopyData)
            {
                // Just read the whole message at once for everything else except DataRow and CopyData messages
                buffer.CurrentMaxCapacity = remaining;
                await stream.ReadSpecificAmountAsync(buffer.Array, 0, remaining, token);

                remaining = 0;
            }
            var array    = buffer.Array;
            var encoding = args.Encoding.Encoding;

            BackendMessageObject result;

            switch (code)
            {
            case BackendMessageCode.AuthenticationRequest:
                result = new AuthenticationResponse(array, length);
                break;

            case BackendMessageCode.ErrorResponse:
                result = new PgSQLErrorObject(array, encoding, true);
                break;

            case BackendMessageCode.NoticeResponse:
                result = new PgSQLErrorObject(array, encoding, false);
                break;

            case BackendMessageCode.RowDescription:
                result = new RowDescription(array, encoding);
                break;

            case BackendMessageCode.DataRow:
                (result, remaining) = await DataRowObject.ReadDataRow(args, stream, token, array, columnSizes, remaining);

                break;

            case BackendMessageCode.ParameterDescription:
                result = new ParameterDescription(array);
                break;

            case BackendMessageCode.ParameterStatus:
                result = new ParameterStatus(array, encoding);
                break;

            case BackendMessageCode.ReadyForQuery:
                result = new ReadyForQuery(array);
                break;

            case BackendMessageCode.BackendKeyData:
                result = new BackendKeyData(array);
                break;

            case BackendMessageCode.CommandComplete:
                result = new CommandComplete(array, encoding);
                break;

            case BackendMessageCode.NotificationResponse:
                result = new NotificationMessage(array, encoding);
                break;

            case BackendMessageCode.CopyInResponse:
                result = new CopyInOrOutMessage(array, true);
                break;

            case BackendMessageCode.CopyOutResponse:
                result = new CopyInOrOutMessage(array, false);
                break;

            case BackendMessageCode.CopyData:
                result = new CopyDataMessage(length);
                break;

            case BackendMessageCode.ParseComplete:
                result = MessageWithNoContents.PARSE_COMPLETE;
                break;

            case BackendMessageCode.BindComplete:
                result = MessageWithNoContents.BIND_COMPLETE;
                break;

            case BackendMessageCode.EmptyQueryResponse:
                result = MessageWithNoContents.EMPTY_QUERY;
                break;

            case BackendMessageCode.NoData:
                result = MessageWithNoContents.NO_DATA;
                break;

            case BackendMessageCode.CopyDone:
                result = MessageWithNoContents.COPY_DONE;
                break;

            case BackendMessageCode.CloseComplete:
                result = MessageWithNoContents.CLOSE_COMPLETE;
                break;

            default:
                throw new NotSupportedException("Not supported backend response: " + code);
            }

            return(result, remaining);
        }
Beispiel #3
0
 public override void AddDataRow(DataRowObject datarow)
 {
     DataRowBlock.Post(datarow);
 }
Beispiel #4
0
 public void Reset(DataRowObject nextRow)
 {
     this.Reset();
     Interlocked.Exchange(ref this._backendMessage, nextRow);
 }