#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace DB { BlockInputStreamPtr FormatFactory::getInput(const String & name, ReadBuffer & buf, Block & sample, size_t max_block_size, const DataTypeFactory & data_type_factory) const { if (name == "Native") return new NativeBlockInputStream(buf, data_type_factory); else if (name == "TabSeparated") return new BlockInputStreamFromRowInputStream(new TabSeparatedRowInputStream(buf, sample), sample, max_block_size); else if (name == "RowBinary") return new BlockInputStreamFromRowInputStream(new BinaryRowInputStream(buf, sample), sample, max_block_size); else if (name == "TabSeparatedWithNames") return new BlockInputStreamFromRowInputStream(new TabSeparatedRowInputStream(buf, sample, true), sample, max_block_size); else if (name == "TabSeparatedWithNamesAndTypes") return new BlockInputStreamFromRowInputStream(new TabSeparatedRowInputStream(buf, sample, true, true), sample, max_block_size); else if (name == "BlockTabSeparated" || name == "Pretty" || name == "PrettyCompact" || name == "PrettySpace" || name == "Vertical" || name == "Null" || name == "TabSeparatedRaw") throw Exception("Format " + name + " is not suitable for input", ErrorCodes::FORMAT_IS_NOT_SUITABLE_FOR_INPUT); else if (name == "Values") return new BlockInputStreamFromRowInputStream(new ValuesRowInputStream(buf, sample), sample, max_block_size); else throw Exception("Unknown format " + name, ErrorCodes::UNKNOWN_FORMAT); } BlockOutputStreamPtr FormatFactory::getOutput(const String & name, WriteBuffer & buf, Block & sample) const { if (name == "Native") return new NativeBlockOutputStream(buf); else if (name == "TabSeparated") return new BlockOutputStreamFromRowOutputStream(new TabSeparatedRowOutputStream(buf, sample)); else if (name == "RowBinary") return new BlockOutputStreamFromRowOutputStream(new BinaryRowOutputStream(buf, sample)); else if (name == "TabSeparatedWithNames") return new BlockOutputStreamFromRowOutputStream(new TabSeparatedRowOutputStream(buf, sample, true)); else if (name == "TabSeparatedWithNamesAndTypes") return new BlockOutputStreamFromRowOutputStream(new TabSeparatedRowOutputStream(buf, sample, true, true)); else if (name == "TabSeparatedRaw") return new BlockOutputStreamFromRowOutputStream(new TabSeparatedRawRowOutputStream(buf, sample)); else if (name == "BlockTabSeparated") return new TabSeparatedBlockOutputStream(buf); else if (name == "Pretty") return new PrettyBlockOutputStream(buf); else if (name == "PrettyCompact") return new PrettyCompactBlockOutputStream(buf); else if (name == "PrettySpace") return new PrettySpaceBlockOutputStream(buf); else if (name == "PrettyNoEscapes") return new PrettyBlockOutputStream(buf, true); else if (name == "PrettyCompactNoEscapes") return new PrettyCompactBlockOutputStream(buf, true); else if (name == "PrettySpaceNoEscapes") return new PrettySpaceBlockOutputStream(buf, true); else if (name == "Vertical") return new BlockOutputStreamFromRowOutputStream(new VerticalRowOutputStream(buf, sample)); else if (name == "Values") return new BlockOutputStreamFromRowOutputStream(new ValuesRowOutputStream(buf, sample)); else if (name == "JSON") return new BlockOutputStreamFromRowOutputStream(new JSONRowOutputStream(buf, sample)); else if (name == "JSONCompact") return new BlockOutputStreamFromRowOutputStream(new JSONCompactRowOutputStream(buf, sample)); else if (name == "Null") return new NullBlockOutputStream; else throw Exception("Unknown format " + name, ErrorCodes::UNKNOWN_FORMAT); } }