//===----------------------------------------------------------------------===// // DuckDB // // duckdb/common/union_by_name.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/common/types.hpp" #include "duckdb/common/vector.hpp" #include "duckdb/common/case_insensitive_map.hpp" #include "duckdb/common/helper.hpp" namespace duckdb { class UnionByName { public: static void CombineUnionTypes(const vector &new_names, const vector &new_types, vector &union_col_types, vector &union_col_names, case_insensitive_map_t &union_names_map); //! Union all files(readers) by their col names template static vector> UnionCols(ClientContext &context, const vector &files, vector &union_col_types, vector &union_col_names, OPTION_TYPE &options) { vector> union_readers; case_insensitive_map_t union_names_map; for (idx_t file_idx = 0; file_idx < files.size(); ++file_idx) { const auto file_name = files[file_idx]; auto reader = make_uniq(context, file_name, options); auto &col_names = reader->GetNames(); auto &sql_types = reader->GetTypes(); CombineUnionTypes(col_names, sql_types, union_col_types, union_col_names, union_names_map); union_readers.push_back(std::move(reader)); } return union_readers; } }; } // namespace duckdb