private Resultset CreateResultset(Stream stream, out string fileName, QueryContext queryContext) { DataTable dt = null; TextFileDataFormat format = queryContext.GetTextFileDataFormat(); fileName = null; if (stream is FileStream) { fileName = ((FileStream)stream).Name; dt = CreateRowType(fileName, ref format); } StreamReader reader = new StreamReader(stream, format.Encoding); if (dt == null || dt.Rows.Count == 0) { switch (format.TextFormat) { case TextDataFormat.Delimited: dt = CreateRowType(reader, format.Delimiter[0], format.ColumnNameHeader); break; case TextDataFormat.TabDelimited: dt = CreateRowType(reader, '\t', format.ColumnNameHeader); break; default: throw new ArgumentException("Delimiter"); } stream.Seek(0, SeekOrigin.Begin); reader = new StreamReader(stream, format.Encoding); } ProcessingContextBase context; if (format.SequentialProcessing) { if (format.TextFormat == TextDataFormat.FixedLength) context = new ProcessingContext(reader, format.Width, format.NullValue, format.ColumnNameHeader, GetNumberFormatInfo(format), GetDateTimeFormatInfo(format)); else context = new ProcessingContext(reader, format.Delimiter[0], format.NullValue, format.ColumnNameHeader, GetNumberFormatInfo(format), GetDateTimeFormatInfo(format)); } else { if (format.TextFormat == TextDataFormat.FixedLength) context = new ParallelProcessingContext(reader, format.Width, format.NullValue, format.ColumnNameHeader, GetNumberFormatInfo(format), GetDateTimeFormatInfo(format)); else context = new ParallelProcessingContext(reader, format.Delimiter[0], format.NullValue, format.ColumnNameHeader, GetNumberFormatInfo(format), GetDateTimeFormatInfo(format)); } return new Resultset(new RowType(dt), context); }