33675 {
33676
33677 idx_t
size = to - from;
33678 append_data.GetMainBuffer().resize(append_data.GetMainBuffer().size() + sizeof(BUFTYPE) * size);
33679 append_data.GetAuxBuffer().resize(append_data.GetAuxBuffer().size() + sizeof(BUFTYPE) * size);
33680 auto data = UnifiedVectorFormat::GetData<list_entry_t>(format);
33681 auto offset_data = append_data.GetMainBuffer().GetData<BUFTYPE>();
33682 auto size_data = append_data.GetAuxBuffer().GetData<BUFTYPE>();
33683
33684 BUFTYPE last_offset =
33685 append_data.row_count ? offset_data[append_data.row_count - 1] + size_data[append_data.row_count - 1] : 0;
33686 for (idx_t i = 0; i <
size; i++) {
33687 auto source_idx = format.sel->get_index(i + from);
33688 auto offset_idx = append_data.row_count + i;
33689
33690 if (!format.validity.RowIsValid(source_idx)) {
33691 offset_data[offset_idx] = last_offset;
33692 size_data[offset_idx] = 0;
33693 continue;
33694 }
33695
33696
33697 auto list_length = data[source_idx].length;
33698 if (std::is_same<BUFTYPE, int32_t>::value == true &&
33699 (
uint64_t)last_offset + list_length > NumericLimits<int32_t>::Maximum()) {
33700 throw InvalidInputException(
33701 "Arrow Appender: The maximum combined list offset for regular list buffers is "
33702 "%u but the offset of %lu exceeds this.\n* SET arrow_large_buffer_size=true to use large list "
33703 "buffers",
33704 NumericLimits<int32_t>::Maximum(), last_offset);
33705 }
33706 offset_data[offset_idx] = last_offset;
33707 size_data[offset_idx] = UnsafeNumericCast<BUFTYPE>(list_length);
33708 last_offset += list_length;
33709
33710 for (idx_t k = 0; k < list_length; k++) {
33711 child_sel.push_back(UnsafeNumericCast<sel_t>(data[source_idx].offset + k));
33712 }
33713 }
33714 }