mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-05-26 18:00:41 +00:00
feat: Adds push_value_ref and extend_slice_of to MutableVector (#215)
* feat: Impl cmp_element() for Vector * chore: Add doc comments to MutableVector * feat: Add create_mutable() to DataType Add `create_mutable()` to create a MutableVector for each DataType. Implement ListVectorBuilder and NullVectorBuilder for ListType and NullType. * feat: Add ValueRef ValueRef is a reference to value, could be used to avoid some allocation when getting data from Vector. To support ValueRef, also implement a ListValueRef for ListValue, but comparision of ListValueRef still requires some allocation, due to the complexity of ListValue and ListVector. Impl some From trait for ValueRef * feat: Implement get_ref for Vector * feat: Remove cmp_element from Vector `cmp_element` could be replaced by `get_ref` and then compare * feat: Implement push/extend for PrimitiveVectorBuilder Implement push_value_ref() and extend_slice_of() for PrimitiveVectorBuilder. Also refactor the DataTypeBuilder trait for primitive types to PrimitiveElement trait, adds necessary cast helper methods to it. - Cast a reference to Vector to reference arrow's primitive array - Cast a ValueRef to primitive type - Also make PrimitiveElement super trait of Primitive * feat: Implement push/extend for all vector builders Implement push_value_ref() and extend_slice_of() for remaining vector builders. Add some helpful cast method to ValueRef and a method to cast Value to ValueRef. Change the behavior of PrimitiveElement::cast_xxx to panic when unable to cast, since push_value_ref() and extend_slice_of() always panic when given invalid input data type. * feat: MutableVector returns error if data type unmatch * test: Add tests for ValueRef * feat: Add tests for Vector::get_ref * feat: NullVector returns error if data type unmatch * test: Add tests for vector builders * fix: Fix compile error in python coprocessor * refactor: Add lifetime param to IntoValueRef The Primitive trait just use the `IntoValueRef<'static>` bound. Also rename create_mutable to create_mutable_vector. * chore: Address CR comments * feat: Customize PartialOrd/Ord for Value/ValueRef Panics if values/refs have different data type * style: Fix clippy * refactor: Use macro to generate body of ValueRef::as_xxx
This commit is contained in:
@@ -296,9 +296,7 @@ fn create_located<T>(node: T, loc: Location) -> Located<T> {
|
||||
}
|
||||
|
||||
/// cast a `dyn Array` of type unsigned/int/float into a `dyn Vector`
|
||||
fn try_into_vector<T: datatypes::types::Primitive + datatypes::types::DataTypeBuilder>(
|
||||
arg: Arc<dyn Array>,
|
||||
) -> Result<Arc<dyn Vector>> {
|
||||
fn try_into_vector<T: datatypes::types::Primitive>(arg: Arc<dyn Array>) -> Result<Arc<dyn Vector>> {
|
||||
// wrap try_into_vector in here to convert `datatypes::error::Error` to `python::error::Error`
|
||||
Helper::try_into_vector(arg).context(TypeCastSnafu)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user