fn r#in()

in crates/iceberg/src/expr/visitors/row_group_metrics_evaluator.rs [462:504]


    fn r#in(
        &mut self,
        reference: &BoundReference,
        literals: &FnvHashSet<Datum>,
        _predicate: &BoundPredicate,
    ) -> Result<bool> {
        let field_id = reference.field().id;

        if self.contains_nulls_only(field_id) {
            return ROW_GROUP_CANT_MATCH;
        }

        if literals.len() > IN_PREDICATE_LIMIT {
            // skip evaluating the predicate if the number of values is too big
            return ROW_GROUP_MIGHT_MATCH;
        }

        if let Some(lower_bound) = self.min_value(field_id)? {
            if lower_bound.is_nan() {
                // NaN indicates unreliable bounds. See the InclusiveMetricsEvaluator docs for more.
                return ROW_GROUP_MIGHT_MATCH;
            }

            if !literals.iter().any(|datum| datum.ge(&lower_bound)) {
                // if all values are less than lower bound, rows cannot match.
                return ROW_GROUP_CANT_MATCH;
            }
        }

        if let Some(upper_bound) = self.max_value(field_id)? {
            if upper_bound.is_nan() {
                // NaN indicates unreliable bounds. See the InclusiveMetricsEvaluator docs for more.
                return ROW_GROUP_MIGHT_MATCH;
            }

            if !literals.iter().any(|datum| datum.le(&upper_bound)) {
                // if all values are greater than upper bound, rows cannot match.
                return ROW_GROUP_CANT_MATCH;
            }
        }

        ROW_GROUP_MIGHT_MATCH
    }