From bd7ad8da8380bac32b1beb77862a4560786b624f Mon Sep 17 00:00:00 2001 From: Jorge Leitao Date: Mon, 6 Sep 2021 16:44:03 +0100 Subject: [PATCH] Fixed error in `MutableBitmap::push_unchecked` (#384) --- src/array/primitive/mutable.rs | 10 +++++----- src/bitmap/mutable.rs | 6 ++---- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/array/primitive/mutable.rs b/src/array/primitive/mutable.rs index ee330188126..f9b2f572a70 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); @@ -449,10 +449,10 @@ pub(crate) unsafe fn extend_trusted_len_unzip( I: Iterator>, { let (_, upper) = iterator.size_hint(); - let len = upper.expect("trusted_len_unzip requires an upper limit"); + let additional = upper.expect("trusted_len_unzip requires an upper limit"); - validity.reserve(len); - buffer.reserve(len); + validity.reserve(additional); + buffer.reserve(additional); for item in iterator { let item = if let Some(item) = item { diff --git a/src/bitmap/mutable.rs b/src/bitmap/mutable.rs index d3eae6689e5..4826ef7872c 100644 --- a/src/bitmap/mutable.rs +++ b/src/bitmap/mutable.rs @@ -98,10 +98,8 @@ impl MutableBitmap { if self.length % 8 == 0 { self.buffer.push_unchecked(0); } - if value { - let byte = self.buffer.as_mut_slice().last_mut().unwrap(); - *byte = set(*byte, self.length % 8, true); - }; + let byte = self.buffer.as_mut_slice().last_mut().unwrap(); + *byte = set(*byte, self.length % 8, value); self.length += 1; }