diff --git a/vortex-array/src/arrays/list/compute/kernels.rs b/vortex-array/src/arrays/list/compute/kernels.rs index 6af858dbf49..c0715c1bae9 100644 --- a/vortex-array/src/arrays/list/compute/kernels.rs +++ b/vortex-array/src/arrays/list/compute/kernels.rs @@ -7,16 +7,22 @@ use crate::ArrayVTable; use crate::arrays::Dict; use crate::arrays::Filter; use crate::arrays::List; +use crate::arrays::Slice; use crate::arrays::dict::TakeExecuteAdaptor; use crate::arrays::filter::FilterExecuteAdaptor; +use crate::arrays::slice::SliceExecuteAdaptor; use crate::optimizer::kernels::ArrayKernelsExt; use crate::scalar_fn::ScalarFnVTable; use crate::scalar_fn::fns::cast::Cast; use crate::scalar_fn::fns::cast::CastExecuteAdaptor; +use crate::scalar_fn::fns::mask::Mask; +use crate::scalar_fn::fns::mask::MaskExecuteAdaptor; pub(crate) fn initialize(session: &VortexSession) { let kernels = session.kernels(); kernels.register_execute_parent_kernel(Cast.id(), List, CastExecuteAdaptor(List)); kernels.register_execute_parent_kernel(Filter.id(), List, FilterExecuteAdaptor(List)); kernels.register_execute_parent_kernel(Dict.id(), List, TakeExecuteAdaptor(List)); + kernels.register_execute_parent_kernel(Mask.id(), List, MaskExecuteAdaptor(List)); + kernels.register_execute_parent_kernel(Slice.id(), List, SliceExecuteAdaptor(List)); } diff --git a/vortex-array/src/arrays/list/compute/mask.rs b/vortex-array/src/arrays/list/compute/mask.rs index f2727247646..6fbed0d2eb0 100644 --- a/vortex-array/src/arrays/list/compute/mask.rs +++ b/vortex-array/src/arrays/list/compute/mask.rs @@ -4,11 +4,13 @@ use vortex_error::VortexResult; use crate::ArrayRef; +use crate::ExecutionCtx; use crate::IntoArray; use crate::array::ArrayView; use crate::arrays::List; use crate::arrays::ListArray; use crate::arrays::list::ListArraySlotsExt; +use crate::scalar_fn::fns::mask::MaskKernel; use crate::scalar_fn::fns::mask::MaskReduce; use crate::validity::Validity; @@ -22,3 +24,13 @@ impl MaskReduce for List { .map(|a| Some(a.into_array())) } } + +impl MaskKernel for List { + fn mask( + array: ArrayView<'_, List>, + mask: &ArrayRef, + _ctx: &mut ExecutionCtx, + ) -> VortexResult> { + ::mask(array, mask) + } +} diff --git a/vortex-array/src/arrays/list/compute/slice.rs b/vortex-array/src/arrays/list/compute/slice.rs index f42d490237e..49985c3e132 100644 --- a/vortex-array/src/arrays/list/compute/slice.rs +++ b/vortex-array/src/arrays/list/compute/slice.rs @@ -6,11 +6,13 @@ use std::ops::Range; use vortex_error::VortexResult; use crate::ArrayRef; +use crate::ExecutionCtx; use crate::IntoArray; use crate::array::ArrayView; use crate::arrays::List; use crate::arrays::ListArray; use crate::arrays::list::ListArraySlotsExt; +use crate::arrays::slice::SliceKernel; use crate::arrays::slice::SliceReduce; impl SliceReduce for List { @@ -25,3 +27,13 @@ impl SliceReduce for List { )) } } + +impl SliceKernel for List { + fn slice( + array: ArrayView<'_, Self>, + range: Range, + _ctx: &mut ExecutionCtx, + ) -> VortexResult> { + ::slice(array, range) + } +} diff --git a/vortex-array/src/arrays/varbin/compute/mask.rs b/vortex-array/src/arrays/varbin/compute/mask.rs index 0d91b6fe3c3..753c6969bef 100644 --- a/vortex-array/src/arrays/varbin/compute/mask.rs +++ b/vortex-array/src/arrays/varbin/compute/mask.rs @@ -4,11 +4,13 @@ use vortex_error::VortexResult; use crate::ArrayRef; +use crate::ExecutionCtx; use crate::IntoArray; use crate::array::ArrayView; use crate::arrays::VarBin; use crate::arrays::VarBinArray; use crate::arrays::varbin::VarBinArraySlotsExt; +use crate::scalar_fn::fns::mask::MaskKernel; use crate::scalar_fn::fns::mask::MaskReduce; use crate::validity::Validity; @@ -26,6 +28,16 @@ impl MaskReduce for VarBin { } } +impl MaskKernel for VarBin { + fn mask( + array: ArrayView<'_, VarBin>, + mask: &ArrayRef, + _ctx: &mut ExecutionCtx, + ) -> VortexResult> { + ::mask(array, mask) + } +} + #[cfg(test)] mod test { use crate::IntoArray; diff --git a/vortex-array/src/arrays/varbin/compute/slice.rs b/vortex-array/src/arrays/varbin/compute/slice.rs index 04ed9e52b6e..ae369ca2f31 100644 --- a/vortex-array/src/arrays/varbin/compute/slice.rs +++ b/vortex-array/src/arrays/varbin/compute/slice.rs @@ -6,10 +6,12 @@ use std::ops::Range; use vortex_error::VortexResult; use crate::ArrayRef; +use crate::ExecutionCtx; use crate::IntoArray; use crate::array::ArrayView; use crate::arrays::VarBin; use crate::arrays::VarBinArray; +use crate::arrays::slice::SliceKernel; use crate::arrays::slice::SliceReduce; use crate::arrays::varbin::VarBinArraySlotsExt; @@ -19,6 +21,16 @@ impl SliceReduce for VarBin { } } +impl SliceKernel for VarBin { + fn slice( + array: ArrayView<'_, Self>, + range: Range, + _ctx: &mut ExecutionCtx, + ) -> VortexResult> { + ::slice(array, range) + } +} + impl VarBin { pub fn _slice(array: ArrayView<'_, VarBin>, range: Range) -> VortexResult { Ok(unsafe { diff --git a/vortex-array/src/arrays/varbin/vtable/kernel.rs b/vortex-array/src/arrays/varbin/vtable/kernel.rs index 9e80abd1037..cf13f10300b 100644 --- a/vortex-array/src/arrays/varbin/vtable/kernel.rs +++ b/vortex-array/src/arrays/varbin/vtable/kernel.rs @@ -6,15 +6,19 @@ use vortex_session::VortexSession; use crate::ArrayVTable; use crate::arrays::Dict; use crate::arrays::Filter; +use crate::arrays::Slice; use crate::arrays::VarBin; use crate::arrays::dict::TakeExecuteAdaptor; use crate::arrays::filter::FilterExecuteAdaptor; +use crate::arrays::slice::SliceExecuteAdaptor; use crate::optimizer::kernels::ArrayKernelsExt; use crate::scalar_fn::ScalarFnVTable; use crate::scalar_fn::fns::binary::Binary; use crate::scalar_fn::fns::binary::CompareExecuteAdaptor; use crate::scalar_fn::fns::cast::Cast; use crate::scalar_fn::fns::cast::CastExecuteAdaptor; +use crate::scalar_fn::fns::mask::Mask; +use crate::scalar_fn::fns::mask::MaskExecuteAdaptor; pub(crate) fn initialize(session: &VortexSession) { let kernels = session.kernels(); @@ -22,4 +26,6 @@ pub(crate) fn initialize(session: &VortexSession) { kernels.register_execute_parent_kernel(Binary.id(), VarBin, CompareExecuteAdaptor(VarBin)); kernels.register_execute_parent_kernel(Filter.id(), VarBin, FilterExecuteAdaptor(VarBin)); kernels.register_execute_parent_kernel(Dict.id(), VarBin, TakeExecuteAdaptor(VarBin)); + kernels.register_execute_parent_kernel(Mask.id(), VarBin, MaskExecuteAdaptor(VarBin)); + kernels.register_execute_parent_kernel(Slice.id(), VarBin, SliceExecuteAdaptor(VarBin)); }