| 46 | } |
| 47 | |
| 48 | MergeTreeReaderCompact::CompactDataReader::CompactDataReader( |
| 49 | const MergeTreeData::DataPartPtr & data_part, |
| 50 | UncompressedCache * uncompressed_cache, |
| 51 | MarkCache * mark_cache, |
| 52 | const MergeTreeReaderSettings & settings, |
| 53 | const ColumnPositions & column_positions_, |
| 54 | const MarkRanges & all_mark_ranges, |
| 55 | const ReadBufferFromFileBase::ProfileCallback & profile_callback_, |
| 56 | clockid_t clock_type_) |
| 57 | : marks_loader( |
| 58 | data_part->volume->getDisk(), |
| 59 | mark_cache, |
| 60 | data_part->index_granularity_info.getMarksFilePath(data_part->getFullRelativePath() + MergeTreeDataPartCompact::DATA_FILE_NAME), |
| 61 | MergeTreeDataPartCompact::DATA_FILE_NAME, |
| 62 | data_part->getMarksCount(), |
| 63 | data_part->index_granularity_info, |
| 64 | settings.save_marks_in_cache, |
| 65 | data_part->getFileOffsetOrZero(data_part->index_granularity_info.getMarksFilePath(MergeTreeDataPartCompact::DATA_FILE_NAME)), |
| 66 | data_part->getFileSizeOrZero(data_part->index_granularity_info.getMarksFilePath(MergeTreeDataPartCompact::DATA_FILE_NAME)), |
| 67 | settings, |
| 68 | std::dynamic_pointer_cast<const MergeTreeDataPartCompact>(data_part)->getColumnsWithoutByteMapColSize()) |
| 69 | { |
| 70 | // Do not use max_read_buffer_size, but try to lower buffer size with maximal size of granule to avoid reading much data. |
| 71 | auto buffer_size = getReadBufferSize(data_part, marks_loader, column_positions_, all_mark_ranges); |
| 72 | ReadSettings data_read_settings = settings.read_settings; |
| 73 | if (!buffer_size) |
| 74 | data_read_settings.adjustBufferSize(buffer_size); |
| 75 | data_read_settings.estimated_size = 0; |
| 76 | |
| 77 | const String full_data_path = data_part->getFullRelativePath() + MergeTreeDataPartCompact::DATA_FILE_NAME_WITH_EXTENSION; |
| 78 | if (uncompressed_cache) |
| 79 | { |
| 80 | auto buffer = std::make_unique<CachedCompressedReadBuffer>( |
| 81 | fullPath(data_part->volume->getDisk(), full_data_path), |
| 82 | [&, full_data_path, data_read_settings]() { |
| 83 | return data_part->volume->getDisk()->readFile( |
| 84 | full_data_path, data_read_settings); |
| 85 | }, |
| 86 | uncompressed_cache, |
| 87 | /* allow_different_codecs = */ true); |
| 88 | |
| 89 | if (profile_callback_) |
| 90 | buffer->setProfileCallback(profile_callback_, clock_type_); |
| 91 | |
| 92 | if (!settings.checksum_on_read) |
| 93 | buffer->disableChecksumming(); |
| 94 | |
| 95 | cached_buffer = std::move(buffer); |
| 96 | data_buffer = cached_buffer.get(); |
| 97 | } |
| 98 | else |
| 99 | { |
| 100 | auto buffer = std::make_unique<CompressedReadBufferFromFile>( |
| 101 | data_part->volume->getDisk()->readFile(full_data_path, data_read_settings), |
| 102 | /* allow_different_codecs = */ true); |
| 103 | |
| 104 | if (profile_callback_) |
| 105 | buffer->setProfileCallback(profile_callback_, clock_type_); |
nothing calls this directly
no test coverage detected