Exemple #1
0
        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);
        }