in crates/iceberg/src/spec/transform.rs [706:746]
fn adjust_operator(
op: &PredicateOperator,
datum: &Datum,
width: Option<u32>,
) -> Option<PredicateOperator> {
match op {
PredicateOperator::LessThan => Some(PredicateOperator::LessThanOrEq),
PredicateOperator::GreaterThan => Some(PredicateOperator::GreaterThanOrEq),
PredicateOperator::StartsWith => match datum.literal() {
PrimitiveLiteral::String(s) => {
if let Some(w) = width {
if s.len() == w as usize {
return Some(PredicateOperator::Eq);
};
};
Some(*op)
}
_ => Some(*op),
},
PredicateOperator::NotStartsWith => match datum.literal() {
PrimitiveLiteral::String(s) => {
if let Some(w) = width {
let w = w as usize;
if s.len() == w {
return Some(PredicateOperator::NotEq);
}
if s.len() < w {
return Some(*op);
}
return None;
};
Some(*op)
}
_ => Some(*op),
},
_ => Some(*op),
}
}