diff --git a/src/datatypes/src/vectors/primitive.rs b/src/datatypes/src/vectors/primitive.rs index a9af1a35aff4..a014c3cb22b9 100644 --- a/src/datatypes/src/vectors/primitive.rs +++ b/src/datatypes/src/vectors/primitive.rs @@ -63,6 +63,10 @@ impl PrimitiveVector { pub(crate) fn as_arrow(&self) -> &dyn Array { &self.array } + + fn slice(&self, offset: usize, length: usize) -> Self { + Self::from(self.array.slice(offset, length)) + } } impl Vector for PrimitiveVector { @@ -103,7 +107,7 @@ impl Vector for PrimitiveVector { } fn slice(&self, offset: usize, length: usize) -> VectorRef { - Arc::new(Self::from(self.array.slice(offset, length))) + Arc::new(self.slice(offset, length)) } fn get(&self, index: usize) -> Value { @@ -236,9 +240,7 @@ impl MutableVector for PrimitiveVectorBuilder { } fn to_vector(&mut self) -> VectorRef { - Arc::new(PrimitiveVector:: { - array: std::mem::take(&mut self.mutable_array).into(), - }) + Arc::new(self.finish()) } fn push_value_ref(&mut self, value: ValueRef) -> Result<()> { @@ -303,7 +305,6 @@ pub(crate) fn replicate_primitive( )) } -// Remove `data_type` param once https://github.com/GreptimeTeam/greptimedb/issues/228 is fixed. pub(crate) fn replicate_primitive_with_type( vector: &PrimitiveVector, offsets: &[usize], @@ -312,8 +313,7 @@ pub(crate) fn replicate_primitive_with_type( assert_eq!(offsets.len(), vector.len()); if offsets.is_empty() { - // Just use `vector.slice()` once https://github.com/GreptimeTeam/greptimedb/issues/228 is fixed. - return PrimitiveVector::from(vector.array.slice(0, 0)); + return vector.slice(0, 0); } let mut builder = PrimitiveVectorBuilder::::with_type_capacity(