32966 {
32967 idx_t
size = to - from;
32968 UnifiedVectorFormat format;
32969 input.ToUnifiedFormat(input_size, format);
32970 auto &main_buffer = append_data.GetMainBuffer();
32971 auto &validity_buffer = append_data.GetValidityBuffer();
32972
32973 ArrowAppendData::ResizeValidity(validity_buffer, append_data.row_count + size);
32974 ArrowAppendData::ResizeValidity(main_buffer, append_data.row_count + size);
32975 auto data = UnifiedVectorFormat::GetData<bool>(format);
32976
32977 auto result_data = main_buffer.GetData<
uint8_t>();
32978 auto validity_data = validity_buffer.GetData<
uint8_t>();
32980 idx_t current_byte;
32981 ArrowAppendData::GetBitPosition(append_data.row_count, current_byte, current_bit);
32982 for (idx_t i = from; i < to; i++) {
32983 auto source_idx = format.sel->get_index(i);
32984
32985 if (!format.validity.RowIsValid(source_idx)) {
32986 append_data.SetNull(validity_data, current_byte, current_bit);
32987 } else if (!data[source_idx]) {
32988 ArrowAppendData::UnsetBit(result_data, current_byte, current_bit);
32989 }
32990 ArrowAppendData::NextBit(current_byte, current_bit);
32991 }
32992 append_data.row_count +=
size;
32993}
GOpaque< Size > size(const GMat &src)