diff --git a/datafusion/expr/src/utils.rs b/datafusion/expr/src/utils.rs index 88631cc6f07b..8a04df43d812 100644 --- a/datafusion/expr/src/utils.rs +++ b/datafusion/expr/src/utils.rs @@ -688,6 +688,10 @@ pub fn columnize_expr(e: Expr, input_schema: &DFSchema) -> Expr { expr: Box::new(columnize_expr(*expr, input_schema)), data_type, }), + Expr::TryCast { expr, data_type } => Expr::TryCast { + expr: Box::new(columnize_expr(*expr, input_schema)), + data_type, + }, Expr::ScalarSubquery(_) => e.clone(), _ => match e.display_name() { Ok(name) => match input_schema.field_with_unqualified_name(&name) { diff --git a/datafusion/sql/src/planner.rs b/datafusion/sql/src/planner.rs index c78032a0201a..a04a71d4e6ad 100644 --- a/datafusion/sql/src/planner.rs +++ b/datafusion/sql/src/planner.rs @@ -3394,6 +3394,16 @@ mod tests { ); } + #[test] + fn try_cast_from_aggregation() { + quick_test( + "SELECT TRY_CAST(SUM(age) AS FLOAT) FROM person", + "Projection: TRY_CAST(SUM(person.age) AS Float32)\ + \n Aggregate: groupBy=[[]], aggr=[[SUM(person.age)]]\ + \n TableScan: person", + ); + } + #[test] fn cast_to_invalid_decimal_type() { // precision == 0