use vortex_error::VortexResult;
use crate::Array;
use crate::ArrayRef;
use crate::ExecutionCtx;
use crate::arrays::ConstantArray;
use crate::arrays::ExtensionArray;
use crate::arrays::ExtensionVTable;
use crate::compute;
use crate::compute::Operator;
use crate::expr::CompareKernel;
impl CompareKernel for ExtensionVTable {
fn compare(
lhs: &ExtensionArray,
rhs: &dyn Array,
operator: Operator,
_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 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)
}
}