33571 {
33572
33573 idx_t
size = to - from;
33574 auto &main_buffer = append_data.GetMainBuffer();
33575
33576 main_buffer.resize(main_buffer.size() + sizeof(BUFTYPE) * (size + 1));
33577 auto data = UnifiedVectorFormat::GetData<list_entry_t>(format);
33578 auto offset_data = main_buffer.GetData<BUFTYPE>();
33579 if (append_data.row_count == 0) {
33580
33581 offset_data[0] = 0;
33582 }
33583
33584 auto last_offset = offset_data[append_data.row_count];
33585 for (idx_t i = from; i < to; i++) {
33586 auto source_idx = format.sel->get_index(i);
33587 auto offset_idx = append_data.row_count + i + 1 - from;
33588
33589 if (!format.validity.RowIsValid(source_idx)) {
33590 offset_data[offset_idx] = last_offset;
33591 continue;
33592 }
33593
33594
33595 auto list_length = data[source_idx].length;
33596 if (std::is_same<BUFTYPE, int32_t>::value == true &&
33597 (
uint64_t)last_offset + list_length > NumericLimits<int32_t>::Maximum()) {
33598 throw InvalidInputException(
33599 "Arrow Appender: The maximum combined list offset for regular list buffers is "
33600 "%u but the offset of %lu exceeds this.\n* SET arrow_large_buffer_size=true to use large list "
33601 "buffers",
33602 NumericLimits<int32_t>::Maximum(), last_offset);
33603 }
33604 last_offset += list_length;
33605 offset_data[offset_idx] = last_offset;
33606
33607 for (idx_t k = 0; k < list_length; k++) {
33608 child_sel.push_back(UnsafeNumericCast<sel_t>(data[source_idx].offset + k));
33609 }
33610 }
33611 }