| 425 | } |
| 426 | |
| 427 | std::unique_ptr<TreeOfLosers<SpillMergeStream>> |
| 428 | SpillPartition::createOrderedReader( |
| 429 | memory::MemoryPool* pool, |
| 430 | bool spillUringEnabled) { |
| 431 | std::vector<std::unique_ptr<SpillMergeStream>> streams; |
| 432 | streams.reserve(files_.size()); |
| 433 | for (auto& fileInfo : files_) { |
| 434 | auto startCreateReadFile = getCurrentTimeMicro(); |
| 435 | auto spillReadFile = |
| 436 | SpillReadFile::create(fileInfo, pool, spillUringEnabled); |
| 437 | streams.push_back(FileSpillMergeStream::createWithInitTime( |
| 438 | std::move(spillReadFile), getCurrentTimeMicro() - startCreateReadFile)); |
| 439 | } |
| 440 | files_.clear(); |
| 441 | // Check if the partition is empty or not. |
| 442 | if (FOLLY_UNLIKELY(streams.empty())) { |
| 443 | return nullptr; |
| 444 | } |
| 445 | return std::make_unique<TreeOfLosers<SpillMergeStream>>(std::move(streams)); |
| 446 | } |
| 447 | |
| 448 | std::unique_ptr<TreeOfLosers<RowBasedSpillMergeStream>> |
| 449 | SpillPartition::createRowBasedOrderedReader( |