#include "DictionarySourceHelpers.h" #include #include #include #include #include #include #include "DictionaryStructure.h" namespace DB { /// For simple key void formatIDs(BlockOutputStreamPtr & out, const std::vector & ids) { auto column = ColumnUInt64::create(ids.size()); memcpy(column->getData().data(), ids.data(), ids.size() * sizeof(ids.front())); Block block{{std::move(column), std::make_shared(), "id"}}; out->writePrefix(); out->write(block); out->writeSuffix(); out->flush(); } /// For composite key void formatKeys( const DictionaryStructure & dict_struct, BlockOutputStreamPtr & out, const Columns & key_columns, const std::vector & requested_rows) { Block block; for (size_t i = 0, size = key_columns.size(); i < size; ++i) { const ColumnPtr & source_column = key_columns[i]; auto filtered_column = source_column->cloneEmpty(); filtered_column->reserve(requested_rows.size()); for (size_t idx : requested_rows) filtered_column->insertFrom(*source_column, idx); block.insert({std::move(filtered_column), (*dict_struct.key)[i].type, toString(i)}); } out->writePrefix(); out->write(block); out->writeSuffix(); out->flush(); } }