use vortex_error::VortexResult;
use crate::arrays::{ConstantArray, ExtensionArray, ExtensionVTable};
use crate::compute::{self, CompareKernel, CompareKernelAdapter, Operator};
use crate::{Array, ArrayRef, register_kernel};
impl CompareKernel for ExtensionVTable {
fn compare(
&self,
lhs: &ExtensionArray,
rhs: &dyn Array,
operator: Operator,
) -> VortexResult<Option<ArrayRef>> {
if let Some(const_ext) = rhs.as_constant() {
let storage_scalar = const_ext.as_extension().storage();
return compute::compare(
lhs.storage(),
ConstantArray::new(storage_scalar, lhs.len()).as_ref(),
operator,
)
.map(Some);
}
if let Some(rhs_ext) = rhs.as_opt::<ExtensionVTable>() {
return compute::compare(lhs.storage(), rhs_ext.storage(), operator).map(Some);
}
Ok(None)
}
}
register_kernel!(CompareKernelAdapter(ExtensionVTable).lift());