MCPcopy Create free account
hub / github.com/apache/datafusion / scatter_bytes

Function scatter_bytes

datafusion/physical-expr-common/src/utils.rs:251–293  ·  view source on GitHub ↗
(
    truthy: &GenericByteArray<T>,
    mask: &BooleanBuffer,
    output_len: usize,
    selectivity: f64,
)

Source from the content-addressed store, hash-verified

249}
250
251fn scatter_bytes<T: ByteArrayType>(
252 truthy: &GenericByteArray<T>,
253 mask: &BooleanBuffer,
254 output_len: usize,
255 selectivity: f64,
256) -> GenericByteArray<T> {
257 let src_offsets = truthy.value_offsets();
258 let src_data = truthy.value_data();
259
260 // Build output offsets: false positions get zero-length (offset stays same)
261 let mut dst_offsets: Vec<T::Offset> = Vec::with_capacity(output_len + 1);
262 let mut cur_offset = T::Offset::default();
263 dst_offsets.push(cur_offset);
264
265 let mut src_idx = 0;
266 for i in 0..output_len {
267 if mask.value(i) {
268 let len =
269 src_offsets[src_idx + 1].as_usize() - src_offsets[src_idx].as_usize();
270 cur_offset += T::Offset::from_usize(len).unwrap();
271 src_idx += 1;
272 }
273 dst_offsets.push(cur_offset);
274 }
275
276 let byte_start = src_offsets[0].as_usize();
277 let byte_end = src_offsets[src_idx].as_usize();
278 let dst_data: Buffer = src_data[byte_start..byte_end].into();
279
280 let nulls = scatter_null_mask(truthy.nulls(), mask, output_len, selectivity);
281
282 let offsets_buffer: Buffer = dst_offsets.into();
283 // SAFETY: offsets and data buffers are constructed consistently for `output_len`
284 let data = unsafe {
285 ArrayDataBuilder::new(truthy.data_type().clone())
286 .len(output_len)
287 .add_buffer(offsets_buffer)
288 .add_buffer(dst_data)
289 .nulls(nulls)
290 .build_unchecked()
291 };
292 GenericByteArray::from(data)
293}
294
295fn scatter_byte_view<T: ByteViewType>(
296 truthy: &GenericByteViewArray<T>,

Callers

nothing calls this directly

Calls 11

scatter_null_maskFunction · 0.85
newFunction · 0.85
value_offsetsMethod · 0.80
pushMethod · 0.45
valueMethod · 0.45
as_usizeMethod · 0.45
intoMethod · 0.45
nullsMethod · 0.45
lenMethod · 0.45
cloneMethod · 0.45
data_typeMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…