(array: &ArrayData, use_nulls: bool)
| 75 | } |
| 76 | |
| 77 | fn build_extend_null_bits(array: &ArrayData, use_nulls: bool) -> ExtendNullBits<'_> { |
| 78 | if let Some(nulls) = array.nulls() { |
| 79 | let bytes = nulls.validity(); |
| 80 | Box::new(move |mutable, start, len| { |
| 81 | let mutable_len = mutable.len; |
| 82 | let out = mutable.null_buffer(); |
| 83 | utils::resize_for_bits(out, mutable_len + len); |
| 84 | mutable.null_count += set_bits( |
| 85 | out.as_slice_mut(), |
| 86 | bytes, |
| 87 | mutable_len, |
| 88 | nulls.offset() + start, |
| 89 | len, |
| 90 | ); |
| 91 | }) |
| 92 | } else if use_nulls { |
| 93 | Box::new(|mutable, _, len| { |
| 94 | let mutable_len = mutable.len; |
| 95 | let out = mutable.null_buffer(); |
| 96 | utils::resize_for_bits(out, mutable_len + len); |
| 97 | let write_data = out.as_slice_mut(); |
| 98 | (0..len).for_each(|i| { |
| 99 | bit_util::set_bit(write_data, mutable_len + i); |
| 100 | }); |
| 101 | }) |
| 102 | } else { |
| 103 | Box::new(|_, _, _| {}) |
| 104 | } |
| 105 | } |
| 106 | |
| 107 | /// Efficiently create an [ArrayData] from one or more existing [ArrayData]s by |
| 108 | /// copying chunks. |
no test coverage detected