MCPcopy Create free account
hub / github.com/apache/arrow-rs / into_builder

Method into_builder

arrow-array/src/array/primitive_array.rs:1121–1175  ·  view source on GitHub ↗

Returns a `PrimitiveBuilder` for this array, suitable for mutating values in place. # Buffer Reuse If the underlying data buffer has no other outstanding references, the buffer is used without copying. If the underlying data buffer does have outstanding references, returns `Err(self)`

(self)

Source from the content-addressed store, hash-verified

1119 /// If the underlying data buffer does have outstanding references, returns
1120 /// `Err(self)`
1121 pub fn into_builder(self) -> Result<PrimitiveBuilder<T>, Self> {
1122 let len = self.len();
1123 let data = self.into_data();
1124 let null_bit_buffer = data.nulls().map(|b| b.inner().sliced());
1125
1126 let element_len = std::mem::size_of::<T::Native>();
1127 let buffer =
1128 data.buffers()[0].slice_with_length(data.offset() * element_len, len * element_len);
1129
1130 drop(data);
1131
1132 let try_mutable_null_buffer = match null_bit_buffer {
1133 None => Ok(None),
1134 Some(null_buffer) => {
1135 // Null buffer exists, tries to make it mutable
1136 null_buffer.into_mutable().map(Some)
1137 }
1138 };
1139
1140 let try_mutable_buffers = match try_mutable_null_buffer {
1141 Ok(mutable_null_buffer) => {
1142 // Got mutable null buffer, tries to get mutable value buffer
1143 let try_mutable_buffer = buffer.into_mutable();
1144
1145 // try_mutable_buffer.map(...).map_err(...) doesn't work as the compiler complains
1146 // mutable_null_buffer is moved into map closure.
1147 match try_mutable_buffer {
1148 Ok(mutable_buffer) => Ok(PrimitiveBuilder::<T>::new_from_buffer(
1149 mutable_buffer,
1150 mutable_null_buffer,
1151 )),
1152 Err(buffer) => Err((buffer, mutable_null_buffer.map(|b| b.into()))),
1153 }
1154 }
1155 Err(mutable_null_buffer) => {
1156 // Unable to get mutable null buffer
1157 Err((buffer, Some(mutable_null_buffer)))
1158 }
1159 };
1160
1161 match try_mutable_buffers {
1162 Ok(builder) => Ok(builder),
1163 Err((buffer, null_bit_buffer)) => {
1164 let builder = ArrayData::builder(T::DATA_TYPE)
1165 .len(len)
1166 .add_buffer(buffer)
1167 .null_bit_buffer(null_bit_buffer);
1168
1169 let array_data = unsafe { builder.build_unchecked() };
1170 let array = PrimitiveArray::<T>::from(array_data);
1171
1172 Err(array)
1173 }
1174 }
1175 }
1176}
1177
1178impl<T: ArrowPrimitiveType> From<PrimitiveArray<T>> for ArrayData {

Callers 6

unary_mutMethod · 0.45
try_unary_mutMethod · 0.45
test_into_builderFunction · 0.45

Calls 12

slicedMethod · 0.80
slice_with_lengthMethod · 0.80
into_mutableMethod · 0.80
add_bufferMethod · 0.80
lenMethod · 0.45
into_dataMethod · 0.45
nullsMethod · 0.45
innerMethod · 0.45
buffersMethod · 0.45
offsetMethod · 0.45
null_bit_bufferMethod · 0.45
build_uncheckedMethod · 0.45