[fix](map) the implementation of ColumnMap::replicate was incorrect" (#26647)

This commit is contained in:
Jerry Hu
2023-11-13 12:17:14 +08:00
committed by GitHub
parent 17b1108635
commit fa3c7d98c8
6 changed files with 181 additions and 36 deletions

View File

@ -433,14 +433,24 @@ ColumnPtr ColumnMap::replicate(const Offsets& offsets) const {
return res;
}
void ColumnMap::replicate(const uint32_t* indexs, size_t target_size, IColumn& column) const {
void ColumnMap::replicate(const uint32_t* indices, size_t target_size, IColumn& column) const {
auto& res = reinterpret_cast<ColumnMap&>(column);
// Make a temp column array for reusing its replicate function
ColumnArray::create(keys_column->assume_mutable(), offsets_column->assume_mutable())
->replicate(indexs, target_size, res.keys_column->assume_mutable_ref());
ColumnArray::create(values_column->assume_mutable(), offsets_column->assume_mutable())
->replicate(indexs, target_size, res.values_column->assume_mutable_ref());
auto keys_array =
ColumnArray::create(keys_column->assume_mutable(), offsets_column->assume_mutable());
auto result_array = ColumnArray::create(res.keys_column->assume_mutable(),
res.offsets_column->assume_mutable());
keys_array->replicate(indices, target_size, result_array->assume_mutable_ref());
result_array = ColumnArray::create(res.values_column->assume_mutable(),
res.offsets_column->clone_empty());
auto values_array =
ColumnArray::create(values_column->assume_mutable(), offsets_column->assume_mutable());
/// FIXME: To reuse the replicate of ColumnArray, the offsets column was replicated twice
values_array->replicate(indices, target_size, result_array->assume_mutable_ref());
}
MutableColumnPtr ColumnMap::get_shrinked_column() {