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(); } } }
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); }
public override void AddDataRow(DataRowObject datarow) { DataRowBlock.Post(datarow); }
public void Reset(DataRowObject nextRow) { this.Reset(); Interlocked.Exchange(ref this._backendMessage, nextRow); }