void CSVRowInputStream::readPrefix() { /// In this format, we assume, that if first string field contain BOM as value, it will be written in quotes, /// so BOM at beginning of stream cannot be confused with BOM in first string value, and it is safe to skip it. skipBOMIfExists(istr); if (with_names) { if (format_settings.with_names_use_header) { String column_name; do { skipWhitespacesAndTabs(istr); readCSVString(column_name, istr, format_settings.csv); skipWhitespacesAndTabs(istr); addInputColumn(column_name); } while (checkChar(format_settings.csv.delimiter, istr)); skipDelimiter(istr, format_settings.csv.delimiter, true); } else { setupAllColumnsByTableSchema(); skipRow(istr, format_settings.csv, column_indexes_for_input_fields.size()); } } else { setupAllColumnsByTableSchema(); } }
ValuesRowInputStream::ValuesRowInputStream(ReadBuffer & istr_, const Block & header_, const Context & context_, const FormatSettings & format_settings) : istr(istr_), header(header_), context(std::make_unique<Context>(context_)), format_settings(format_settings) { /// In this format, BOM at beginning of stream cannot be confused with value, so it is safe to skip it. skipBOMIfExists(istr); }
ValuesRowInputStream::ValuesRowInputStream(ReadBuffer & istr_, const Context & context_, bool interpret_expressions_) : istr(istr_), context(context_), interpret_expressions(interpret_expressions_) { /// In this format, BOM at beginning of stream cannot be confused with value, so it is safe to skip it. skipBOMIfExists(istr); }