diff --git a/datafusion/physical-expr/src/analysis.rs b/datafusion/physical-expr/src/analysis.rs index ca25bfd647b6..e7b199af3743 100644 --- a/datafusion/physical-expr/src/analysis.rs +++ b/datafusion/physical-expr/src/analysis.rs @@ -27,7 +27,9 @@ use crate::PhysicalExpr; use arrow::datatypes::Schema; use datafusion_common::stats::Precision; -use datafusion_common::{internal_err, ColumnStatistics, Result, ScalarValue}; +use datafusion_common::{ + internal_datafusion_err, internal_err, ColumnStatistics, Result, ScalarValue, +}; use datafusion_expr::interval_arithmetic::{cardinality_ratio, Interval}; /// The shared context used during the analysis of an expression. Includes @@ -92,7 +94,13 @@ impl ExprBoundaries { col_stats: &ColumnStatistics, col_index: usize, ) -> Result { - let field = &schema.fields()[col_index]; + let field = schema.fields().get(col_index).ok_or_else(|| { + internal_datafusion_err!( + "Could not create `ExprBoundaries`: in `try_from_column` `col_index` + has gone out of bounds with a value of {col_index}, the schema has {} columns.", + schema.fields.len() + ) + })?; let empty_field = ScalarValue::try_from(field.data_type()).unwrap_or(ScalarValue::Null); let interval = Interval::try_new(