From 4275311a5975f183679c64ce7efd460a402cb2f8 Mon Sep 17 00:00:00 2001 From: Nicholas Gates Date: Fri, 20 Mar 2026 16:19:50 -0400 Subject: [PATCH 1/2] Only pass vtable once via ExtDType Signed-off-by: Nicholas Gates --- vortex-array/public-api.lock | 108 +++++++++--------- .../src/arrays/extension/compute/rules.rs | 6 +- vortex-array/src/dtype/extension/typed.rs | 12 +- vortex-array/src/dtype/extension/vtable.rs | 12 +- vortex-array/src/extension/datetime/date.rs | 15 ++- vortex-array/src/extension/datetime/time.rs | 15 ++- .../src/extension/datetime/timestamp.rs | 7 +- .../src/extension/tests/divisible_int.rs | 6 +- vortex-array/src/extension/uuid/vtable.rs | 11 +- vortex-array/src/scalar/arrow.rs | 2 - vortex-array/src/scalar/tests/casting.rs | 9 +- .../src/scalar/typed_view/extension/tests.rs | 9 +- vortex-duckdb/src/convert/dtype.rs | 3 +- vortex-tensor/public-api.lock | 8 +- vortex-tensor/src/fixed_shape/vtable.rs | 3 +- vortex-tensor/src/vector/vtable.rs | 3 +- 16 files changed, 103 insertions(+), 126 deletions(-) diff --git a/vortex-array/public-api.lock b/vortex-array/public-api.lock index c53d9a893cf..15cc3e5936e 100644 --- a/vortex-array/public-api.lock +++ b/vortex-array/public-api.lock @@ -10176,23 +10176,23 @@ pub type vortex_array::dtype::extension::ExtVTable::Metadata: 'static + core::ma pub type vortex_array::dtype::extension::ExtVTable::NativeValue<'a>: core::fmt::Display -pub fn vortex_array::dtype::extension::ExtVTable::can_coerce_from(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::dtype::extension::ExtVTable::can_coerce_from(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool -pub fn vortex_array::dtype::extension::ExtVTable::can_coerce_to(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::dtype::extension::ExtVTable::can_coerce_to(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool pub fn vortex_array::dtype::extension::ExtVTable::deserialize_metadata(&self, metadata: &[u8]) -> vortex_error::VortexResult pub fn vortex_array::dtype::extension::ExtVTable::id(&self) -> vortex_array::dtype::extension::ExtId -pub fn vortex_array::dtype::extension::ExtVTable::least_supertype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option +pub fn vortex_array::dtype::extension::ExtVTable::least_supertype(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option pub fn vortex_array::dtype::extension::ExtVTable::serialize_metadata(&self, metadata: &Self::Metadata) -> vortex_error::VortexResult> -pub fn vortex_array::dtype::extension::ExtVTable::unpack_native<'a>(&self, ext_dtype: &'a vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult +pub fn vortex_array::dtype::extension::ExtVTable::unpack_native<'a>(ext_dtype: &'a vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult -pub fn vortex_array::dtype::extension::ExtVTable::validate_dtype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> +pub fn vortex_array::dtype::extension::ExtVTable::validate_dtype(ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> -pub fn vortex_array::dtype::extension::ExtVTable::validate_scalar_value(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> +pub fn vortex_array::dtype::extension::ExtVTable::validate_scalar_value(ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> impl vortex_array::dtype::extension::ExtVTable for vortex_array::extension::datetime::Date @@ -10200,23 +10200,23 @@ pub type vortex_array::extension::datetime::Date::Metadata = vortex_array::exten pub type vortex_array::extension::datetime::Date::NativeValue<'a> = vortex_array::extension::datetime::DateValue -pub fn vortex_array::extension::datetime::Date::can_coerce_from(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::datetime::Date::can_coerce_from(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool -pub fn vortex_array::extension::datetime::Date::can_coerce_to(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::datetime::Date::can_coerce_to(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool pub fn vortex_array::extension::datetime::Date::deserialize_metadata(&self, metadata: &[u8]) -> vortex_error::VortexResult pub fn vortex_array::extension::datetime::Date::id(&self) -> vortex_array::dtype::extension::ExtId -pub fn vortex_array::extension::datetime::Date::least_supertype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option +pub fn vortex_array::extension::datetime::Date::least_supertype(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option pub fn vortex_array::extension::datetime::Date::serialize_metadata(&self, metadata: &Self::Metadata) -> vortex_error::VortexResult> -pub fn vortex_array::extension::datetime::Date::unpack_native(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult +pub fn vortex_array::extension::datetime::Date::unpack_native<'a>(ext_dtype: &'a vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult -pub fn vortex_array::extension::datetime::Date::validate_dtype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::datetime::Date::validate_dtype(ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> -pub fn vortex_array::extension::datetime::Date::validate_scalar_value(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::datetime::Date::validate_scalar_value(ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> impl vortex_array::dtype::extension::ExtVTable for vortex_array::extension::datetime::Time @@ -10224,23 +10224,23 @@ pub type vortex_array::extension::datetime::Time::Metadata = vortex_array::exten pub type vortex_array::extension::datetime::Time::NativeValue<'a> = vortex_array::extension::datetime::TimeValue -pub fn vortex_array::extension::datetime::Time::can_coerce_from(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::datetime::Time::can_coerce_from(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool -pub fn vortex_array::extension::datetime::Time::can_coerce_to(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::datetime::Time::can_coerce_to(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool pub fn vortex_array::extension::datetime::Time::deserialize_metadata(&self, data: &[u8]) -> vortex_error::VortexResult pub fn vortex_array::extension::datetime::Time::id(&self) -> vortex_array::dtype::extension::ExtId -pub fn vortex_array::extension::datetime::Time::least_supertype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option +pub fn vortex_array::extension::datetime::Time::least_supertype(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option pub fn vortex_array::extension::datetime::Time::serialize_metadata(&self, metadata: &Self::Metadata) -> vortex_error::VortexResult> -pub fn vortex_array::extension::datetime::Time::unpack_native(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult +pub fn vortex_array::extension::datetime::Time::unpack_native<'a>(ext_dtype: &'a vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult -pub fn vortex_array::extension::datetime::Time::validate_dtype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::datetime::Time::validate_dtype(ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> -pub fn vortex_array::extension::datetime::Time::validate_scalar_value(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::datetime::Time::validate_scalar_value(ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> impl vortex_array::dtype::extension::ExtVTable for vortex_array::extension::datetime::Timestamp @@ -10248,23 +10248,23 @@ pub type vortex_array::extension::datetime::Timestamp::Metadata = vortex_array:: pub type vortex_array::extension::datetime::Timestamp::NativeValue<'a> = vortex_array::extension::datetime::TimestampValue<'a> -pub fn vortex_array::extension::datetime::Timestamp::can_coerce_from(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::datetime::Timestamp::can_coerce_from(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool -pub fn vortex_array::extension::datetime::Timestamp::can_coerce_to(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::datetime::Timestamp::can_coerce_to(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool pub fn vortex_array::extension::datetime::Timestamp::deserialize_metadata(&self, data: &[u8]) -> vortex_error::VortexResult pub fn vortex_array::extension::datetime::Timestamp::id(&self) -> vortex_array::dtype::extension::ExtId -pub fn vortex_array::extension::datetime::Timestamp::least_supertype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option +pub fn vortex_array::extension::datetime::Timestamp::least_supertype(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option pub fn vortex_array::extension::datetime::Timestamp::serialize_metadata(&self, metadata: &Self::Metadata) -> vortex_error::VortexResult> -pub fn vortex_array::extension::datetime::Timestamp::unpack_native<'a>(&self, ext_dtype: &'a vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult +pub fn vortex_array::extension::datetime::Timestamp::unpack_native<'a>(ext_dtype: &'a vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult -pub fn vortex_array::extension::datetime::Timestamp::validate_dtype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::datetime::Timestamp::validate_dtype(ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> -pub fn vortex_array::extension::datetime::Timestamp::validate_scalar_value(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::datetime::Timestamp::validate_scalar_value(ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> impl vortex_array::dtype::extension::ExtVTable for vortex_array::extension::uuid::Uuid @@ -10272,23 +10272,23 @@ pub type vortex_array::extension::uuid::Uuid::Metadata = vortex_array::extension pub type vortex_array::extension::uuid::Uuid::NativeValue<'a> = uuid::Uuid -pub fn vortex_array::extension::uuid::Uuid::can_coerce_from(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::uuid::Uuid::can_coerce_from(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool -pub fn vortex_array::extension::uuid::Uuid::can_coerce_to(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::uuid::Uuid::can_coerce_to(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool pub fn vortex_array::extension::uuid::Uuid::deserialize_metadata(&self, metadata: &[u8]) -> vortex_error::VortexResult pub fn vortex_array::extension::uuid::Uuid::id(&self) -> vortex_array::dtype::extension::ExtId -pub fn vortex_array::extension::uuid::Uuid::least_supertype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option +pub fn vortex_array::extension::uuid::Uuid::least_supertype(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option pub fn vortex_array::extension::uuid::Uuid::serialize_metadata(&self, metadata: &Self::Metadata) -> vortex_error::VortexResult> -pub fn vortex_array::extension::uuid::Uuid::unpack_native<'a>(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult +pub fn vortex_array::extension::uuid::Uuid::unpack_native<'a>(ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult -pub fn vortex_array::extension::uuid::Uuid::validate_dtype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::uuid::Uuid::validate_dtype(ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> -pub fn vortex_array::extension::uuid::Uuid::validate_scalar_value(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::uuid::Uuid::validate_scalar_value(ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> pub trait vortex_array::dtype::extension::Matcher @@ -14142,23 +14142,23 @@ pub type vortex_array::extension::datetime::Date::Metadata = vortex_array::exten pub type vortex_array::extension::datetime::Date::NativeValue<'a> = vortex_array::extension::datetime::DateValue -pub fn vortex_array::extension::datetime::Date::can_coerce_from(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::datetime::Date::can_coerce_from(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool -pub fn vortex_array::extension::datetime::Date::can_coerce_to(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::datetime::Date::can_coerce_to(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool pub fn vortex_array::extension::datetime::Date::deserialize_metadata(&self, metadata: &[u8]) -> vortex_error::VortexResult pub fn vortex_array::extension::datetime::Date::id(&self) -> vortex_array::dtype::extension::ExtId -pub fn vortex_array::extension::datetime::Date::least_supertype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option +pub fn vortex_array::extension::datetime::Date::least_supertype(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option pub fn vortex_array::extension::datetime::Date::serialize_metadata(&self, metadata: &Self::Metadata) -> vortex_error::VortexResult> -pub fn vortex_array::extension::datetime::Date::unpack_native(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult +pub fn vortex_array::extension::datetime::Date::unpack_native<'a>(ext_dtype: &'a vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult -pub fn vortex_array::extension::datetime::Date::validate_dtype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::datetime::Date::validate_dtype(ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> -pub fn vortex_array::extension::datetime::Date::validate_scalar_value(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::datetime::Date::validate_scalar_value(ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> pub struct vortex_array::extension::datetime::Time @@ -14198,23 +14198,23 @@ pub type vortex_array::extension::datetime::Time::Metadata = vortex_array::exten pub type vortex_array::extension::datetime::Time::NativeValue<'a> = vortex_array::extension::datetime::TimeValue -pub fn vortex_array::extension::datetime::Time::can_coerce_from(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::datetime::Time::can_coerce_from(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool -pub fn vortex_array::extension::datetime::Time::can_coerce_to(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::datetime::Time::can_coerce_to(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool pub fn vortex_array::extension::datetime::Time::deserialize_metadata(&self, data: &[u8]) -> vortex_error::VortexResult pub fn vortex_array::extension::datetime::Time::id(&self) -> vortex_array::dtype::extension::ExtId -pub fn vortex_array::extension::datetime::Time::least_supertype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option +pub fn vortex_array::extension::datetime::Time::least_supertype(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option pub fn vortex_array::extension::datetime::Time::serialize_metadata(&self, metadata: &Self::Metadata) -> vortex_error::VortexResult> -pub fn vortex_array::extension::datetime::Time::unpack_native(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult +pub fn vortex_array::extension::datetime::Time::unpack_native<'a>(ext_dtype: &'a vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult -pub fn vortex_array::extension::datetime::Time::validate_dtype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::datetime::Time::validate_dtype(ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> -pub fn vortex_array::extension::datetime::Time::validate_scalar_value(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::datetime::Time::validate_scalar_value(ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> pub struct vortex_array::extension::datetime::Timestamp @@ -14256,23 +14256,23 @@ pub type vortex_array::extension::datetime::Timestamp::Metadata = vortex_array:: pub type vortex_array::extension::datetime::Timestamp::NativeValue<'a> = vortex_array::extension::datetime::TimestampValue<'a> -pub fn vortex_array::extension::datetime::Timestamp::can_coerce_from(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::datetime::Timestamp::can_coerce_from(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool -pub fn vortex_array::extension::datetime::Timestamp::can_coerce_to(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::datetime::Timestamp::can_coerce_to(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool pub fn vortex_array::extension::datetime::Timestamp::deserialize_metadata(&self, data: &[u8]) -> vortex_error::VortexResult pub fn vortex_array::extension::datetime::Timestamp::id(&self) -> vortex_array::dtype::extension::ExtId -pub fn vortex_array::extension::datetime::Timestamp::least_supertype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option +pub fn vortex_array::extension::datetime::Timestamp::least_supertype(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option pub fn vortex_array::extension::datetime::Timestamp::serialize_metadata(&self, metadata: &Self::Metadata) -> vortex_error::VortexResult> -pub fn vortex_array::extension::datetime::Timestamp::unpack_native<'a>(&self, ext_dtype: &'a vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult +pub fn vortex_array::extension::datetime::Timestamp::unpack_native<'a>(ext_dtype: &'a vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult -pub fn vortex_array::extension::datetime::Timestamp::validate_dtype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::datetime::Timestamp::validate_dtype(ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> -pub fn vortex_array::extension::datetime::Timestamp::validate_scalar_value(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::datetime::Timestamp::validate_scalar_value(ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> pub struct vortex_array::extension::datetime::TimestampOptions @@ -14338,23 +14338,23 @@ pub type vortex_array::extension::uuid::Uuid::Metadata = vortex_array::extension pub type vortex_array::extension::uuid::Uuid::NativeValue<'a> = uuid::Uuid -pub fn vortex_array::extension::uuid::Uuid::can_coerce_from(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::uuid::Uuid::can_coerce_from(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool -pub fn vortex_array::extension::uuid::Uuid::can_coerce_to(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool +pub fn vortex_array::extension::uuid::Uuid::can_coerce_to(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> bool pub fn vortex_array::extension::uuid::Uuid::deserialize_metadata(&self, metadata: &[u8]) -> vortex_error::VortexResult pub fn vortex_array::extension::uuid::Uuid::id(&self) -> vortex_array::dtype::extension::ExtId -pub fn vortex_array::extension::uuid::Uuid::least_supertype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option +pub fn vortex_array::extension::uuid::Uuid::least_supertype(ext_dtype: &vortex_array::dtype::extension::ExtDType, other: &vortex_array::dtype::DType) -> core::option::Option pub fn vortex_array::extension::uuid::Uuid::serialize_metadata(&self, metadata: &Self::Metadata) -> vortex_error::VortexResult> -pub fn vortex_array::extension::uuid::Uuid::unpack_native<'a>(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult +pub fn vortex_array::extension::uuid::Uuid::unpack_native<'a>(ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &'a vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult -pub fn vortex_array::extension::uuid::Uuid::validate_dtype(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::uuid::Uuid::validate_dtype(ext_dtype: &vortex_array::dtype::extension::ExtDType) -> vortex_error::VortexResult<()> -pub fn vortex_array::extension::uuid::Uuid::validate_scalar_value(&self, ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> +pub fn vortex_array::extension::uuid::Uuid::validate_scalar_value(ext_dtype: &vortex_array::dtype::extension::ExtDType, storage_value: &vortex_array::scalar::ScalarValue) -> vortex_error::VortexResult<()> pub struct vortex_array::extension::uuid::UuidMetadata diff --git a/vortex-array/src/arrays/extension/compute/rules.rs b/vortex-array/src/arrays/extension/compute/rules.rs index e077dda5283..0703af6414a 100644 --- a/vortex-array/src/arrays/extension/compute/rules.rs +++ b/vortex-array/src/arrays/extension/compute/rules.rs @@ -95,12 +95,11 @@ mod tests { Ok(EmptyMetadata) } - fn validate_dtype(&self, _extension_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(_extension_dtype: &ExtDType) -> VortexResult<()> { Ok(()) } fn unpack_native<'a>( - &self, _extension_dtype: &'a ExtDType, _storage_value: &'a ScalarValue, ) -> VortexResult> { @@ -192,12 +191,11 @@ mod tests { Ok(EmptyMetadata) } - fn validate_dtype(&self, _extension_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(_extension_dtype: &ExtDType) -> VortexResult<()> { Ok(()) } fn unpack_native<'a>( - &self, _extension_dtype: &'a ExtDType, _storage_value: &'a ScalarValue, ) -> VortexResult> { diff --git a/vortex-array/src/dtype/extension/typed.rs b/vortex-array/src/dtype/extension/typed.rs index baa3706b56b..045a1d99839 100644 --- a/vortex-array/src/dtype/extension/typed.rs +++ b/vortex-array/src/dtype/extension/typed.rs @@ -62,7 +62,7 @@ impl ExtDType { storage_dtype, }; - this.vtable.validate_dtype(&this)?; + V::validate_dtype(&this)?; Ok(this) } @@ -182,7 +182,7 @@ impl DynExtDType for ExtDType { } fn value_validate(&self, storage_value: &ScalarValue) -> VortexResult<()> { - self.vtable.validate_scalar_value(self, storage_value) + V::validate_scalar_value(self, storage_value) } fn value_display( @@ -190,7 +190,7 @@ impl DynExtDType for ExtDType { f: &mut fmt::Formatter<'_>, storage_value: &ScalarValue, ) -> fmt::Result { - match self.vtable.unpack_native(self, storage_value) { + match V::unpack_native(self, storage_value) { Ok(native) => fmt::Display::fmt(&native, f), Err(_) => write!( f, @@ -202,14 +202,14 @@ impl DynExtDType for ExtDType { } fn coercion_can_coerce_from(&self, other: &DType) -> bool { - self.vtable.can_coerce_from(self, other) + V::can_coerce_from(self, other) } fn coercion_can_coerce_to(&self, other: &DType) -> bool { - self.vtable.can_coerce_to(self, other) + V::can_coerce_to(self, other) } fn coercion_least_supertype(&self, other: &DType) -> Option { - self.vtable.least_supertype(self, other) + V::least_supertype(self, other) } } diff --git a/vortex-array/src/dtype/extension/vtable.rs b/vortex-array/src/dtype/extension/vtable.rs index 120cfa02dc3..1b763f53635 100644 --- a/vortex-array/src/dtype/extension/vtable.rs +++ b/vortex-array/src/dtype/extension/vtable.rs @@ -37,14 +37,14 @@ pub trait ExtVTable: 'static + Sized + Send + Sync + Clone + Debug + Eq + Hash { fn deserialize_metadata(&self, metadata: &[u8]) -> VortexResult; /// Validate that the given storage type is compatible with this extension type. - fn validate_dtype(&self, ext_dtype: &ExtDType) -> VortexResult<()>; + fn validate_dtype(ext_dtype: &ExtDType) -> VortexResult<()>; /// Can a value of `other` be implicitly widened into this type? /// e.g. GeographyType might accept Point, LineString, etc. /// /// Implementors only need to override one of `can_coerce_from` or `can_coerce_to` — both /// exist so that either side of the coercion can provide the logic. - fn can_coerce_from(&self, ext_dtype: &ExtDType, other: &DType) -> bool { + fn can_coerce_from(ext_dtype: &ExtDType, other: &DType) -> bool { let _ = (ext_dtype, other); false } @@ -53,14 +53,14 @@ pub trait ExtVTable: 'static + Sized + Send + Sync + Clone + Debug + Eq + Hash { /// /// Implementors only need to override one of `can_coerce_from` or `can_coerce_to` — both /// exist so that either side of the coercion can provide the logic. - fn can_coerce_to(&self, ext_dtype: &ExtDType, other: &DType) -> bool { + fn can_coerce_to(ext_dtype: &ExtDType, other: &DType) -> bool { let _ = (ext_dtype, other); false } /// Given two types in a Uniform context, what is their least supertype? /// Return None if no supertype exists. - fn least_supertype(&self, ext_dtype: &ExtDType, other: &DType) -> Option { + fn least_supertype(ext_dtype: &ExtDType, other: &DType) -> Option { let _ = (ext_dtype, other); None } @@ -75,11 +75,10 @@ pub trait ExtVTable: 'static + Sized + Send + Sync + Clone + Debug + Eq + Hash { /// /// Returns an error if the storage [`ScalarValue`] is not compatible with the extension type. fn validate_scalar_value( - &self, ext_dtype: &ExtDType, storage_value: &ScalarValue, ) -> VortexResult<()> { - self.unpack_native(ext_dtype, storage_value).map(|_| ()) + Self::unpack_native(ext_dtype, storage_value).map(|_| ()) } /// Validate and unpack a native value from the storage [`ScalarValue`]. @@ -92,7 +91,6 @@ pub trait ExtVTable: 'static + Sized + Send + Sync + Clone + Debug + Eq + Hash { /// /// Returns an error if the storage [`ScalarValue`] is not compatible with the extension type. fn unpack_native<'a>( - &self, ext_dtype: &'a ExtDType, storage_value: &'a ScalarValue, ) -> VortexResult>; diff --git a/vortex-array/src/extension/datetime/date.rs b/vortex-array/src/extension/datetime/date.rs index 57fe7ad87e0..a0434b3ebc5 100644 --- a/vortex-array/src/extension/datetime/date.rs +++ b/vortex-array/src/extension/datetime/date.rs @@ -91,7 +91,7 @@ impl ExtVTable for Date { TimeUnit::try_from(tag) } - fn validate_dtype(&self, ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(ext_dtype: &ExtDType) -> VortexResult<()> { let metadata = ext_dtype.metadata(); let ptype = date_ptype(metadata) .ok_or_else(|| vortex_err!("Date type does not support time unit {}", metadata))?; @@ -106,7 +106,7 @@ impl ExtVTable for Date { Ok(()) } - fn can_coerce_from(&self, ext_dtype: &ExtDType, other: &DType) -> bool { + fn can_coerce_from(ext_dtype: &ExtDType, other: &DType) -> bool { let DType::Extension(other_ext) = other else { return false; }; @@ -118,7 +118,7 @@ impl ExtVTable for Date { our_unit <= other_unit && (ext_dtype.storage_dtype().is_nullable() || !other.is_nullable()) } - fn least_supertype(&self, ext_dtype: &ExtDType, other: &DType) -> Option { + fn least_supertype(ext_dtype: &ExtDType, other: &DType) -> Option { let DType::Extension(other_ext) = other else { return None; }; @@ -129,11 +129,10 @@ impl ExtVTable for Date { Some(DType::Extension(Date::new(finest, union_null).erased())) } - fn unpack_native( - &self, - ext_dtype: &ExtDType, - storage_value: &ScalarValue, - ) -> VortexResult> { + fn unpack_native<'a>( + ext_dtype: &'a ExtDType, + storage_value: &'a ScalarValue, + ) -> VortexResult> { let metadata = ext_dtype.metadata(); match metadata { TimeUnit::Milliseconds => Ok(DateValue::Milliseconds( diff --git a/vortex-array/src/extension/datetime/time.rs b/vortex-array/src/extension/datetime/time.rs index eb53a0e0fe3..08c43e9e20c 100644 --- a/vortex-array/src/extension/datetime/time.rs +++ b/vortex-array/src/extension/datetime/time.rs @@ -92,7 +92,7 @@ impl ExtVTable for Time { TimeUnit::try_from(tag) } - fn validate_dtype(&self, ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(ext_dtype: &ExtDType) -> VortexResult<()> { let metadata = ext_dtype.metadata(); let ptype = time_ptype(metadata) .ok_or_else(|| vortex_err!("Time type does not support time unit {}", metadata))?; @@ -107,7 +107,7 @@ impl ExtVTable for Time { Ok(()) } - fn can_coerce_from(&self, ext_dtype: &ExtDType, other: &DType) -> bool { + fn can_coerce_from(ext_dtype: &ExtDType, other: &DType) -> bool { let DType::Extension(other_ext) = other else { return false; }; @@ -118,7 +118,7 @@ impl ExtVTable for Time { our_unit <= other_unit && (ext_dtype.storage_dtype().is_nullable() || !other.is_nullable()) } - fn least_supertype(&self, ext_dtype: &ExtDType, other: &DType) -> Option { + fn least_supertype(ext_dtype: &ExtDType, other: &DType) -> Option { let DType::Extension(other_ext) = other else { return None; }; @@ -129,11 +129,10 @@ impl ExtVTable for Time { Some(DType::Extension(Time::new(finest, union_null).erased())) } - fn unpack_native( - &self, - ext_dtype: &ExtDType, - storage_value: &ScalarValue, - ) -> VortexResult> { + fn unpack_native<'a>( + ext_dtype: &'a ExtDType, + storage_value: &'a ScalarValue, + ) -> VortexResult> { let length_of_time = storage_value.as_primitive().cast::()?; let (span, value) = match *ext_dtype.metadata() { diff --git a/vortex-array/src/extension/datetime/timestamp.rs b/vortex-array/src/extension/datetime/timestamp.rs index ad78c76e3a9..b33571ed40e 100644 --- a/vortex-array/src/extension/datetime/timestamp.rs +++ b/vortex-array/src/extension/datetime/timestamp.rs @@ -169,7 +169,7 @@ impl ExtVTable for Timestamp { }) } - fn can_coerce_from(&self, ext_dtype: &ExtDType, other: &DType) -> bool { + fn can_coerce_from(ext_dtype: &ExtDType, other: &DType) -> bool { let DType::Extension(other_ext) = other else { return false; }; @@ -182,7 +182,7 @@ impl ExtVTable for Timestamp { && (ext_dtype.storage_dtype().is_nullable() || !other.is_nullable()) } - fn least_supertype(&self, ext_dtype: &ExtDType, other: &DType) -> Option { + fn least_supertype(ext_dtype: &ExtDType, other: &DType) -> Option { let DType::Extension(other_ext) = other else { return None; }; @@ -198,7 +198,7 @@ impl ExtVTable for Timestamp { )) } - fn validate_dtype(&self, ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(ext_dtype: &ExtDType) -> VortexResult<()> { vortex_ensure!( matches!(ext_dtype.storage_dtype(), DType::Primitive(PType::I64, _)), "Timestamp storage dtype must be i64" @@ -207,7 +207,6 @@ impl ExtVTable for Timestamp { } fn unpack_native<'a>( - &self, ext_dtype: &'a ExtDType, storage_value: &'a ScalarValue, ) -> VortexResult> { diff --git a/vortex-array/src/extension/tests/divisible_int.rs b/vortex-array/src/extension/tests/divisible_int.rs index 7b6e501b7cb..5f07573a0f3 100644 --- a/vortex-array/src/extension/tests/divisible_int.rs +++ b/vortex-array/src/extension/tests/divisible_int.rs @@ -51,10 +51,7 @@ impl ExtVTable for DivisibleInt { Ok(Divisor(n)) } - fn validate_dtype( - &self, - ext_dtype: &crate::dtype::extension::ExtDType, - ) -> VortexResult<()> { + fn validate_dtype(ext_dtype: &crate::dtype::extension::ExtDType) -> VortexResult<()> { vortex_ensure!( matches!(ext_dtype.storage_dtype(), DType::Primitive(PType::U64, _)), "divisible int storage dtype must be u64" @@ -63,7 +60,6 @@ impl ExtVTable for DivisibleInt { } fn unpack_native<'a>( - &self, ext_dtype: &'a crate::dtype::extension::ExtDType, storage_value: &'a ScalarValue, ) -> VortexResult> { diff --git a/vortex-array/src/extension/uuid/vtable.rs b/vortex-array/src/extension/uuid/vtable.rs index 962b83f8907..c76c7352942 100644 --- a/vortex-array/src/extension/uuid/vtable.rs +++ b/vortex-array/src/extension/uuid/vtable.rs @@ -47,7 +47,7 @@ impl ExtVTable for Uuid { Ok(UuidMetadata { version }) } - fn validate_dtype(&self, ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(ext_dtype: &ExtDType) -> VortexResult<()> { let storage_dtype = ext_dtype.storage_dtype(); let DType::FixedSizeList(element_dtype, list_size, _nullability) = storage_dtype else { vortex_bail!("UUID storage dtype must be a FixedSizeList, got {storage_dtype}"); @@ -77,7 +77,6 @@ impl ExtVTable for Uuid { } fn unpack_native<'a>( - &self, ext_dtype: &ExtDType, storage_value: &'a ScalarValue, ) -> VortexResult> { @@ -248,7 +247,7 @@ mod tests { let storage_value = storage_scalar .value() .ok_or_else(|| vortex_error::vortex_err!("expected non-null scalar"))?; - let result = Uuid.unpack_native(&ext_dtype, storage_value)?; + let result = Uuid::unpack_native(&ext_dtype, storage_value)?; assert_eq!(result, expected); assert_eq!(result.to_string(), "550e8400-e29b-41d4-a716-446655440000"); Ok(()) @@ -283,7 +282,7 @@ mod tests { let storage_value = storage_scalar .value() .ok_or_else(|| vortex_error::vortex_err!("expected non-null scalar"))?; - assert!(Uuid.unpack_native(&ext_dtype, storage_value).is_err()); + assert!(Uuid::unpack_native(&ext_dtype, storage_value).is_err()); Ok(()) } @@ -317,7 +316,7 @@ mod tests { .unwrap(); let storage_value = uuid_storage_scalar(&v4_uuid); - let result = Uuid.unpack_native(&ext_dtype, &storage_value)?; + let result = Uuid::unpack_native(&ext_dtype, &storage_value)?; assert_eq!(result, v4_uuid); Ok(()) } @@ -335,7 +334,7 @@ mod tests { .unwrap(); let storage_value = uuid_storage_scalar(&v4_uuid); - let result = Uuid.unpack_native(&ext_dtype, &storage_value)?; + let result = Uuid::unpack_native(&ext_dtype, &storage_value)?; assert_eq!(result, v4_uuid); Ok(()) } diff --git a/vortex-array/src/scalar/arrow.rs b/vortex-array/src/scalar/arrow.rs index ac9fda0ee5e..f5051ceaf21 100644 --- a/vortex-array/src/scalar/arrow.rs +++ b/vortex-array/src/scalar/arrow.rs @@ -466,14 +466,12 @@ mod tests { } fn validate_dtype( - &self, _ext_dtype: &crate::dtype::extension::ExtDType, ) -> VortexResult<()> { Ok(()) } fn unpack_native<'a>( - &self, _ext_dtype: &'a crate::dtype::extension::ExtDType, _storage_value: &'a ScalarValue, ) -> VortexResult> { diff --git a/vortex-array/src/scalar/tests/casting.rs b/vortex-array/src/scalar/tests/casting.rs index e5677f7c1f9..4e6ecdd60b9 100644 --- a/vortex-array/src/scalar/tests/casting.rs +++ b/vortex-array/src/scalar/tests/casting.rs @@ -43,12 +43,11 @@ mod tests { Ok(0) } - fn validate_dtype(&self, _ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(_ext_dtype: &ExtDType) -> VortexResult<()> { Ok(()) } fn unpack_native<'a>( - &self, _ext_dtype: &'a ExtDType, _storage_value: &'a ScalarValue, ) -> VortexResult> { @@ -259,12 +258,11 @@ mod tests { vortex_bail!("not implemented") } - fn validate_dtype(&self, _ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(_ext_dtype: &ExtDType) -> VortexResult<()> { Ok(()) } fn unpack_native<'a>( - &self, _ext_dtype: &'a ExtDType, _storage_value: &'a ScalarValue, ) -> VortexResult> { @@ -317,12 +315,11 @@ mod tests { vortex_bail!("not implemented") } - fn validate_dtype(&self, _ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(_ext_dtype: &ExtDType) -> VortexResult<()> { Ok(()) } fn unpack_native<'a>( - &self, _ext_dtype: &'a ExtDType, _storage_value: &'a ScalarValue, ) -> VortexResult> { diff --git a/vortex-array/src/scalar/typed_view/extension/tests.rs b/vortex-array/src/scalar/typed_view/extension/tests.rs index 4801e8e6e0c..5faa9550402 100644 --- a/vortex-array/src/scalar/typed_view/extension/tests.rs +++ b/vortex-array/src/scalar/typed_view/extension/tests.rs @@ -32,12 +32,11 @@ impl ExtVTable for TestI32Ext { Ok(EmptyMetadata) } - fn validate_dtype(&self, _ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(_ext_dtype: &ExtDType) -> VortexResult<()> { Ok(()) } fn unpack_native<'a>( - &self, _ext_dtype: &'a ExtDType, _storage_value: &'a ScalarValue, ) -> VortexResult> { @@ -116,12 +115,11 @@ fn test_ext_scalar_partial_ord_different_types() { Ok(EmptyMetadata) } - fn validate_dtype(&self, _ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(_ext_dtype: &ExtDType) -> VortexResult<()> { Ok(()) } fn unpack_native<'a>( - &self, _ext_dtype: &'a ExtDType, _storage_value: &'a ScalarValue, ) -> VortexResult> { @@ -299,12 +297,11 @@ fn test_ext_scalar_with_metadata() { vortex_bail!("not implemented") } - fn validate_dtype(&self, _ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(_ext_dtype: &ExtDType) -> VortexResult<()> { Ok(()) } fn unpack_native<'a>( - &self, _ext_dtype: &'a ExtDType, _storage_value: &'a ScalarValue, ) -> VortexResult> { diff --git a/vortex-duckdb/src/convert/dtype.rs b/vortex-duckdb/src/convert/dtype.rs index e96fa838f63..ad66787f02e 100644 --- a/vortex-duckdb/src/convert/dtype.rs +++ b/vortex-duckdb/src/convert/dtype.rs @@ -594,12 +594,11 @@ mod tests { Ok(EmptyMetadata) } - fn validate_dtype(&self, _ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(_ext_dtype: &ExtDType) -> VortexResult<()> { Ok(()) } fn unpack_native<'a>( - &self, _ext_dtype: &'a ExtDType, _storage_value: &'a ScalarValue, ) -> VortexResult> { diff --git a/vortex-tensor/public-api.lock b/vortex-tensor/public-api.lock index 2b84eef114f..18107f84db4 100644 --- a/vortex-tensor/public-api.lock +++ b/vortex-tensor/public-api.lock @@ -40,9 +40,9 @@ pub fn vortex_tensor::fixed_shape::FixedShapeTensor::id(&self) -> vortex_array:: pub fn vortex_tensor::fixed_shape::FixedShapeTensor::serialize_metadata(&self, metadata: &Self::Metadata) -> vortex_error::VortexResult> -pub fn vortex_tensor::fixed_shape::FixedShapeTensor::unpack_native<'a>(&self, _ext_dtype: &'a vortex_array::dtype::extension::typed::ExtDType, storage_value: &'a vortex_array::scalar::scalar_value::ScalarValue) -> vortex_error::VortexResult +pub fn vortex_tensor::fixed_shape::FixedShapeTensor::unpack_native<'a>(_ext_dtype: &'a vortex_array::dtype::extension::typed::ExtDType, storage_value: &'a vortex_array::scalar::scalar_value::ScalarValue) -> vortex_error::VortexResult -pub fn vortex_tensor::fixed_shape::FixedShapeTensor::validate_dtype(&self, ext_dtype: &vortex_array::dtype::extension::typed::ExtDType) -> vortex_error::VortexResult<()> +pub fn vortex_tensor::fixed_shape::FixedShapeTensor::validate_dtype(ext_dtype: &vortex_array::dtype::extension::typed::ExtDType) -> vortex_error::VortexResult<()> pub struct vortex_tensor::fixed_shape::FixedShapeTensorMetadata @@ -220,6 +220,6 @@ pub fn vortex_tensor::vector::Vector::id(&self) -> vortex_array::dtype::extensio pub fn vortex_tensor::vector::Vector::serialize_metadata(&self, _metadata: &Self::Metadata) -> vortex_error::VortexResult> -pub fn vortex_tensor::vector::Vector::unpack_native<'a>(&self, _ext_dtype: &'a vortex_array::dtype::extension::typed::ExtDType, storage_value: &'a vortex_array::scalar::scalar_value::ScalarValue) -> vortex_error::VortexResult +pub fn vortex_tensor::vector::Vector::unpack_native<'a>(_ext_dtype: &'a vortex_array::dtype::extension::typed::ExtDType, storage_value: &'a vortex_array::scalar::scalar_value::ScalarValue) -> vortex_error::VortexResult -pub fn vortex_tensor::vector::Vector::validate_dtype(&self, ext_dtype: &vortex_array::dtype::extension::typed::ExtDType) -> vortex_error::VortexResult<()> +pub fn vortex_tensor::vector::Vector::validate_dtype(ext_dtype: &vortex_array::dtype::extension::typed::ExtDType) -> vortex_error::VortexResult<()> diff --git a/vortex-tensor/src/fixed_shape/vtable.rs b/vortex-tensor/src/fixed_shape/vtable.rs index 136bb4b4718..3c0b6512a65 100644 --- a/vortex-tensor/src/fixed_shape/vtable.rs +++ b/vortex-tensor/src/fixed_shape/vtable.rs @@ -33,7 +33,7 @@ impl ExtVTable for FixedShapeTensor { proto::deserialize(metadata) } - fn validate_dtype(&self, ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(ext_dtype: &ExtDType) -> VortexResult<()> { let storage_dtype = ext_dtype.storage_dtype(); let DType::FixedSizeList(element_dtype, list_size, _nullability) = storage_dtype else { vortex_bail!( @@ -64,7 +64,6 @@ impl ExtVTable for FixedShapeTensor { } fn unpack_native<'a>( - &self, _ext_dtype: &'a ExtDType, storage_value: &'a ScalarValue, ) -> VortexResult> { diff --git a/vortex-tensor/src/vector/vtable.rs b/vortex-tensor/src/vector/vtable.rs index 6ab849ab4e9..61a0f35d9ff 100644 --- a/vortex-tensor/src/vector/vtable.rs +++ b/vortex-tensor/src/vector/vtable.rs @@ -31,7 +31,7 @@ impl ExtVTable for Vector { Ok(EmptyMetadata) } - fn validate_dtype(&self, ext_dtype: &ExtDType) -> VortexResult<()> { + fn validate_dtype(ext_dtype: &ExtDType) -> VortexResult<()> { let storage_dtype = ext_dtype.storage_dtype(); let DType::FixedSizeList(element_dtype, _list_size, _nullability) = storage_dtype else { vortex_bail!("Vector storage dtype must be a FixedSizeList, got {storage_dtype}"); @@ -50,7 +50,6 @@ impl ExtVTable for Vector { } fn unpack_native<'a>( - &self, _ext_dtype: &'a ExtDType, storage_value: &'a ScalarValue, ) -> VortexResult> { From 8f878ac33d367ceda6aefd4964b890b6825b9164 Mon Sep 17 00:00:00 2001 From: Nicholas Gates Date: Fri, 20 Mar 2026 17:10:20 -0400 Subject: [PATCH 2/2] Only pass vtable once via ExtDType Signed-off-by: Nicholas Gates --- vortex-array/src/extension/tests/divisible_int.rs | 5 +++-- vortex-array/src/scalar/arrow.rs | 7 +++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/vortex-array/src/extension/tests/divisible_int.rs b/vortex-array/src/extension/tests/divisible_int.rs index 5f07573a0f3..8b9612e9438 100644 --- a/vortex-array/src/extension/tests/divisible_int.rs +++ b/vortex-array/src/extension/tests/divisible_int.rs @@ -11,6 +11,7 @@ use vortex_error::vortex_ensure; use crate::dtype::DType; use crate::dtype::PType; +use crate::dtype::extension::ExtDType; use crate::dtype::extension::ExtId; use crate::dtype::extension::ExtVTable; use crate::scalar::ScalarValue; @@ -51,7 +52,7 @@ impl ExtVTable for DivisibleInt { Ok(Divisor(n)) } - fn validate_dtype(ext_dtype: &crate::dtype::extension::ExtDType) -> VortexResult<()> { + fn validate_dtype(ext_dtype: &ExtDType) -> VortexResult<()> { vortex_ensure!( matches!(ext_dtype.storage_dtype(), DType::Primitive(PType::U64, _)), "divisible int storage dtype must be u64" @@ -60,7 +61,7 @@ impl ExtVTable for DivisibleInt { } fn unpack_native<'a>( - ext_dtype: &'a crate::dtype::extension::ExtDType, + ext_dtype: &'a ExtDType, storage_value: &'a ScalarValue, ) -> VortexResult> { let value = storage_value.as_primitive().cast::()?; diff --git a/vortex-array/src/scalar/arrow.rs b/vortex-array/src/scalar/arrow.rs index f5051ceaf21..73142281b0d 100644 --- a/vortex-array/src/scalar/arrow.rs +++ b/vortex-array/src/scalar/arrow.rs @@ -203,6 +203,7 @@ mod tests { use crate::dtype::Nullability; use crate::dtype::PType; use crate::dtype::StructFields; + use crate::dtype::extension::ExtDType; use crate::dtype::extension::ExtId; use crate::dtype::extension::ExtVTable; use crate::dtype::i256; @@ -465,14 +466,12 @@ mod tests { vortex_bail!("not implemented") } - fn validate_dtype( - _ext_dtype: &crate::dtype::extension::ExtDType, - ) -> VortexResult<()> { + fn validate_dtype(_ext_dtype: &ExtDType) -> VortexResult<()> { Ok(()) } fn unpack_native<'a>( - _ext_dtype: &'a crate::dtype::extension::ExtDType, + _ext_dtype: &'a ExtDType, _storage_value: &'a ScalarValue, ) -> VortexResult> { Ok("")