use vortex_error::VortexResult;
use super::DictArray;
use super::DictVTable;
use crate::Array;
use crate::ArrayRef;
use crate::ExecutionCtx;
use crate::IntoArray;
use crate::arrays::ConstantArray;
use crate::compute::Operator;
use crate::compute::compare;
use crate::expr::CompareKernel;
impl CompareKernel for DictVTable {
fn compare(
lhs: &DictArray,
rhs: &dyn Array,
operator: Operator,
_ctx: &mut ExecutionCtx,
) -> VortexResult<Option<ArrayRef>> {
if lhs.values().len() > lhs.codes().len() {
return Ok(None);
}
if let Some(rhs) = rhs.as_constant() {
let compare_result = compare(
lhs.values(),
ConstantArray::new(rhs, lhs.values().len()).as_ref(),
operator,
)?;
let result = unsafe {
DictArray::new_unchecked(lhs.codes().clone(), compare_result)
.set_all_values_referenced(lhs.has_all_values_referenced())
.into_array()
};
return Ok(Some(result.to_canonical()?.into_array()));
}
Ok(None)
}
}