| 56 | } |
| 57 | |
| 58 | MergeTreeReaderWide::MergeTreeReaderWide( |
| 59 | MergeTreeMetaBase::DataPartPtr data_part_, |
| 60 | NamesAndTypesList columns_, |
| 61 | const StorageMetadataPtr & metadata_snapshot_, |
| 62 | UncompressedCache * uncompressed_cache_, |
| 63 | MarkCache * mark_cache_, |
| 64 | MarkRanges mark_ranges_, |
| 65 | MergeTreeReaderSettings settings_, |
| 66 | MergeTreeIndexExecutor * index_executor_, |
| 67 | IMergeTreeDataPart::ValueSizeMap avg_value_size_hints_, |
| 68 | const ReadBufferFromFileBase::ProfileCallback & profile_callback_, |
| 69 | clockid_t clock_type_, |
| 70 | bool create_streams_) |
| 71 | : IMergeTreeReader( |
| 72 | std::move(data_part_), |
| 73 | std::move(columns_), |
| 74 | metadata_snapshot_, |
| 75 | uncompressed_cache_, |
| 76 | std::move(mark_cache_), |
| 77 | std::move(mark_ranges_), |
| 78 | std::move(settings_), |
| 79 | std::move(avg_value_size_hints_), |
| 80 | index_executor_) |
| 81 | { |
| 82 | if (!create_streams_) |
| 83 | { |
| 84 | return; |
| 85 | } |
| 86 | |
| 87 | try |
| 88 | { |
| 89 | for (const NameAndTypePair & column : columns) |
| 90 | { |
| 91 | auto column_from_part = getColumnFromPart(column); |
| 92 | if (column_from_part.type->isByteMap()) |
| 93 | { |
| 94 | // Scan the directory to get all implicit columns(stream) for the map type |
| 95 | const DataTypeMap & type_map = typeid_cast<const DataTypeMap &>(*column_from_part.type); |
| 96 | |
| 97 | String key_name; |
| 98 | String impl_key_name; |
| 99 | { |
| 100 | for (auto & file : data_part->getChecksums()->files) |
| 101 | { |
| 102 | // Try to get keys, and form the stream, its bin file name looks like "NAME__xxxxx.bin" |
| 103 | const String & file_name = file.first; |
| 104 | if (isMapImplicitDataFileNameNotBaseOfSpecialMapName(file_name, column.name)) |
| 105 | { |
| 106 | key_name = parseKeyNameFromImplicitFileName(file_name, column.name); |
| 107 | impl_key_name = getImplicitColNameForMapKey(column.name, key_name); |
| 108 | // Special handing if implicit key is referenced too |
| 109 | if (columns.contains(impl_key_name)) |
| 110 | { |
| 111 | dup_implicit_keys.insert(impl_key_name); |
| 112 | } |
| 113 | |
| 114 | addByteMapStreams( |
| 115 | {impl_key_name, type_map.getValueTypeForImplicitColumn()}, column.name, profile_callback_, clock_type_); |
nothing calls this directly
no test coverage detected