| 77 | } |
| 78 | |
| 79 | void StringColumn::writeSegment(ColumnChunkData& persistentChunk, SegmentState& state, |
| 80 | offset_t dstOffsetInSegment, const ColumnChunkData& data, offset_t srcOffset, |
| 81 | length_t numValues) const { |
| 82 | auto& stringPersistentChunk = persistentChunk.cast<StringChunkData>(); |
| 83 | numValues = std::min(numValues, data.getNumValues() - srcOffset); |
| 84 | auto& strChunkToWriteFrom = data.cast<StringChunkData>(); |
| 85 | std::vector<string_index_t> indices; |
| 86 | indices.resize(numValues); |
| 87 | for (auto i = 0u; i < numValues; i++) { |
| 88 | if (strChunkToWriteFrom.getNullData()->isNull(i + srcOffset)) { |
| 89 | indices[i] = 0; |
| 90 | continue; |
| 91 | } |
| 92 | const auto strVal = strChunkToWriteFrom.getValue<std::string_view>(i + srcOffset); |
| 93 | indices[i] = dictionary.append(persistentChunk.cast<StringChunkData>().getDictionaryChunk(), |
| 94 | state, strVal); |
| 95 | } |
| 96 | NullMask nullMask(numValues); |
| 97 | nullMask.copyFromNullBits(data.getNullData()->getNullMask().getData(), srcOffset, |
| 98 | 0 /*dstOffset*/, numValues); |
| 99 | // Write index to main column |
| 100 | indexColumn->writeValuesInternal(getChildState(state, ChildStateIndex::INDEX), |
| 101 | dstOffsetInSegment, reinterpret_cast<const uint8_t*>(&indices[0]), &nullMask, |
| 102 | 0 /*srcOffset*/, numValues); |
| 103 | auto [min, max] = std::minmax_element(indices.begin(), indices.end()); |
| 104 | auto minWritten = StorageValue(*min); |
| 105 | auto maxWritten = StorageValue(*max); |
| 106 | updateStatistics(persistentChunk.getMetadata(), dstOffsetInSegment + numValues - 1, minWritten, |
| 107 | maxWritten); |
| 108 | indexColumn->updateStatistics(stringPersistentChunk.getIndexColumnChunk()->getMetadata(), |
| 109 | dstOffsetInSegment + numValues - 1, minWritten, maxWritten); |
| 110 | } |
| 111 | |
| 112 | std::vector<std::unique_ptr<ColumnChunkData>> StringColumn::checkpointSegment( |
| 113 | ColumnCheckpointState&& checkpointState, PageAllocator& pageAllocator, |
nothing calls this directly
no test coverage detected