vortex_array/array/extension/compute/
compare.rsuse vortex_error::VortexResult;
use crate::array::{ConstantArray, ExtensionArray, ExtensionEncoding};
use crate::compute::{compare, CompareFn, Operator};
use crate::encoding::EncodingVTable;
use crate::{ArrayData, ArrayLen};
impl CompareFn<ExtensionArray> for ExtensionEncoding {
fn compare(
&self,
lhs: &ExtensionArray,
rhs: &ArrayData,
operator: Operator,
) -> VortexResult<Option<ArrayData>> {
if let Some(const_ext) = rhs.as_constant() {
let storage_scalar = const_ext.as_extension().storage();
return compare(
lhs.storage(),
ConstantArray::new(storage_scalar, lhs.len()),
operator,
)
.map(Some);
}
if rhs.is_encoding(ExtensionEncoding.id()) {
let rhs_ext = ExtensionArray::try_from(rhs.clone())?;
return compare(lhs.storage(), rhs_ext.storage(), operator).map(Some);
}
Ok(None)
}
}