#pragma once #include #include #include #include #include #include #include #include #include namespace DB { class IMergedBlockOutputStream : public IBlockOutputStream { public: IMergedBlockOutputStream( const MergeTreeDataPartPtr & data_part); using WrittenOffsetColumns = std::set; const MergeTreeIndexGranularity & getIndexGranularity() { return writer->getIndexGranularity(); } protected: using SerializationState = IDataType::SerializeBinaryBulkStatePtr; using SerializationStates = std::vector; IDataType::OutputStreamGetter createStreamGetter(const String & name, WrittenOffsetColumns & offset_columns, bool skip_offsets); protected: const MergeTreeData & storage; String part_path; static Block getBlockAndPermute(const Block & block, const Names & names, const IColumn::Permutation * permutation); IMergeTreeDataPart::MergeTreeWriterPtr writer; }; }