#include "DictionarySourceHelpers.h" #include #include #include #include #include #include "DictionaryStructure.h" #include #include #include #include namespace DB { void formatWithBlock(BlockOutputStreamPtr & out, Block block) { out->writePrefix(); out->write(block); out->writeSuffix(); out->flush(); } /// For simple key Block blockForIds(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"}}; std::cerr << "Block for IDs size " << ids.size() << std::endl; return block; } /// For composite key Block blockForKeys( const DictionaryStructure & dict_struct, 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]; size_t column_rows_size = source_column->size(); PaddedPODArray filter(column_rows_size, false); for (size_t idx : requested_rows) filter[idx] = true; auto filtered_column = source_column->filter(filter, requested_rows.size()); block.insert({std::move(filtered_column), (*dict_struct.key)[i].type, (*dict_struct.key)[i].name}); } return block; } Context copyContextAndApplySettings( const std::string & config_prefix, const Context & context, const Poco::Util::AbstractConfiguration & config) { Context local_context(context); if (config.has(config_prefix + ".settings")) { const auto prefix = config_prefix + ".settings"; Poco::Util::AbstractConfiguration::Keys config_keys; config.keys(prefix, config_keys); SettingsChanges changes; for (const std::string & key : config_keys) { const auto value = config.getString(prefix + "." + key); changes.emplace_back(key, value); } local_context.applySettingsChanges(changes); } return local_context; } }