34048 {
34049 idx_t
size = to - from;
34050 UnifiedVectorFormat format;
34051 input.ToUnifiedFormat(input_size, format);
34052 auto &main_buffer = append_data.GetMainBuffer();
34053 auto &validity_buffer = append_data.GetValidityBuffer();
34054 auto &aux_buffer = append_data.GetAuxBuffer();
34055
34056 ArrowAppendData::ResizeValidity(validity_buffer, append_data.row_count + size);
34057 auto validity_data = (
uint8_t *)validity_buffer.data();
34058
34059 main_buffer.resize(main_buffer.size() + sizeof(arrow_string_view_t) * (size));
34060
34061 auto data = UnifiedVectorFormat::GetData<string_t>(format);
34062 for (idx_t i = from; i < to; i++) {
34063 auto result_idx = append_data.row_count + i - from;
34064 auto arrow_data = main_buffer.GetData<arrow_string_view_t>();
34065 auto source_idx = format.sel->get_index(i);
34066 if (!format.validity.RowIsValid(source_idx)) {
34067
34069 idx_t current_byte;
34070 ArrowAppendData::GetBitPosition(result_idx, current_byte, current_bit);
34071 append_data.SetNull(validity_data, current_byte, current_bit);
34072
34073 arrow_data[result_idx] = arrow_string_view_t(0, "");
34074 continue;
34075 }
34076
34077 idx_t string_length = ArrowVarcharConverter::GetLength(data[source_idx]);
34078 auto string_data = data[source_idx].GetData();
34079 if (string_length <= ArrowStringViewConstants::MAX_INLINED_BYTES) {
34080
34081
34082
34083
34084 arrow_data[result_idx] = arrow_string_view_t(UnsafeNumericCast<int32_t>(string_length), string_data);
34085 } else {
34086
34087
34088
34089
34090 arrow_data[result_idx] = arrow_string_view_t(UnsafeNumericCast<int32_t>(string_length), string_data, 0,
34091 UnsafeNumericCast<int32_t>(append_data.offset));
34092 auto current_offset = append_data.offset + string_length;
34093 aux_buffer.resize(current_offset);
34094 ArrowVarcharConverter::WriteData(aux_buffer.data() + append_data.offset, data[source_idx]);
34095 append_data.offset = current_offset;
34096 }
34097 }
34098 append_data.row_count +=
size;
34099 }
GOpaque< Size > size(const GMat &src)