diff --git a/src/array/primitive/mutable.rs b/src/array/primitive/mutable.rs index 0735347a86..a33633cc4a 100644 --- a/src/array/primitive/mutable.rs +++ b/src/array/primitive/mutable.rs @@ -164,8 +164,8 @@ impl MutablePrimitiveArray { if let Some(validity) = self.validity.as_mut() { extend_trusted_len_unzip(iterator, validity, &mut self.values) } else { - let mut validity = - MutableBitmap::from_trusted_len_iter(std::iter::repeat(true).take(self.len())); + let mut validity = MutableBitmap::new(); + validity.extend_constant(self.len(), true); extend_trusted_len_unzip(iterator, &mut validity, &mut self.values); if validity.null_count() > 0 { self.validity = Some(validity); @@ -174,7 +174,6 @@ impl MutablePrimitiveArray { } /// Extends the [`MutablePrimitiveArray`] from an iterator of values of trusted len. /// This differs from `extend_trusted_len` which accepts in iterator of optional values. - #[inline] pub fn extend_trusted_len_values(&mut self, iterator: I) where I: TrustedLen, @@ -186,33 +185,29 @@ impl MutablePrimitiveArray { /// This differs from `extend_trusted_len_unchecked` which accepts in iterator of optional values. /// # Safety /// The iterator must be trusted len. - #[inline] pub unsafe fn extend_trusted_len_values_unchecked(&mut self, iterator: I) where I: Iterator, { - let size = iterator - .size_hint() - .1 - .expect("upper bound should be set by trusted len iter"); self.values.extend_from_trusted_len_iter_unchecked(iterator); - self.update_all_valid(size); + self.update_all_valid(); } #[inline] /// Extends the [`MutablePrimitiveArray`] from a slice pub fn extend_from_slice(&mut self, items: &[T]) { self.values.extend_from_slice(items); - self.update_all_valid(items.len()); + self.update_all_valid(); } - fn update_all_valid(&mut self, additional: usize) { + fn update_all_valid(&mut self) { + // get len before mutable borrow + let len = self.len(); if let Some(validity) = self.validity.as_mut() { - validity.extend_constant(additional, true); + validity.extend_constant(len - validity.len(), true); } else { - let validity = MutableBitmap::from_trusted_len_iter( - std::iter::repeat(true).take(self.len() + additional), - ); + let mut validity = MutableBitmap::new(); + validity.extend_constant(len, true); if validity.null_count() > 0 { self.validity = Some(validity); }