| 526 | } |
| 527 | |
| 528 | Result<std::shared_ptr<ChunkedArray>> DictionaryUnifier::UnifyChunkedArray( |
| 529 | const std::shared_ptr<ChunkedArray>& array, MemoryPool* pool) { |
| 530 | if (array->num_chunks() <= 1) { |
| 531 | return array; |
| 532 | } |
| 533 | |
| 534 | ArrayDataVector data_chunks(array->num_chunks()); |
| 535 | std::transform(array->chunks().begin(), array->chunks().end(), data_chunks.begin(), |
| 536 | [](const std::shared_ptr<Array>& array) { return array->data(); }); |
| 537 | ARROW_ASSIGN_OR_RAISE(bool changed, |
| 538 | RecursiveUnifier{pool}.Unify(array->type(), &data_chunks)); |
| 539 | if (!changed) { |
| 540 | return array; |
| 541 | } |
| 542 | ArrayVector chunks(array->num_chunks()); |
| 543 | std::transform(data_chunks.begin(), data_chunks.end(), chunks.begin(), |
| 544 | [](const std::shared_ptr<ArrayData>& data) { return MakeArray(data); }); |
| 545 | return std::make_shared<ChunkedArray>(std::move(chunks), array->type()); |
| 546 | } |
| 547 | |
| 548 | Result<std::shared_ptr<Table>> DictionaryUnifier::UnifyTable(const Table& table, |
| 549 | MemoryPool* pool) { |