33207 {
33208 D_ASSERT(to >= from);
33209 idx_t
size = to - from;
33210 D_ASSERT(size <= input_size);
33211 UnifiedVectorFormat format;
33212 input.ToUnifiedFormat(input_size, format);
33213
33214
33215 append_data.AppendValidity(format, from, to);
33216
33217
33218 auto &main_buffer = append_data.GetMainBuffer();
33219 main_buffer.resize(main_buffer.size() + sizeof(TGT) * size);
33220 auto data = UnifiedVectorFormat::GetData<SRC>(format);
33221 auto result_data = main_buffer.GetData<TGT>();
33222
33223 for (idx_t i = from; i < to; i++) {
33224 auto source_idx = format.sel->get_index(i);
33225 auto result_idx = append_data.row_count + i - from;
33226
33227 if (OP::SkipNulls() && !format.validity.RowIsValid(source_idx)) {
33228 OP::template SetNull<TGT>(result_data[result_idx]);
33229 continue;
33230 }
33231 result_data[result_idx] = OP::template Operation<TGT, SRC>(data[source_idx]);
33232 }
33233 append_data.row_count +=
size;
33234 }
GOpaque< Size > size(const GMat &src)