use vortex_error::VortexResult;
use crate::ArrayRef;
use crate::ExecutionCtx;
use crate::IntoArray;
use crate::array::ArrayView;
use crate::arrays::ConstantArray;
use crate::arrays::Extension;
use crate::arrays::extension::ExtensionArrayExt;
use crate::builtins::ArrayBuiltins;
use crate::scalar_fn::fns::binary::CompareKernel;
use crate::scalar_fn::fns::operators::CompareOperator;
use crate::scalar_fn::fns::operators::Operator;
impl CompareKernel for Extension {
fn compare(
lhs: ArrayView<'_, Extension>,
rhs: &ArrayRef,
operator: CompareOperator,
_ctx: &mut ExecutionCtx,
) -> VortexResult<Option<ArrayRef>> {
if let Some(const_ext) = rhs.as_constant() {
let storage_scalar = const_ext.as_extension().to_storage_scalar();
return lhs
.storage_array()
.clone()
.binary(
ConstantArray::new(storage_scalar, lhs.len()).into_array(),
Operator::from(operator),
)
.map(Some);
}
if let Some(rhs_ext) = rhs.as_opt::<Extension>() {
return lhs
.storage_array()
.clone()
.binary(rhs_ext.storage_array().clone(), Operator::from(operator))
.map(Some);
}
Ok(None)
}
}