From 7c117af14026838a4754b615ac555939e991f654 Mon Sep 17 00:00:00 2001 From: byteink Date: Sat, 10 Dec 2022 11:57:22 +0800 Subject: [PATCH] Preserve the TryCast expression in columnize_expr --- datafusion/expr/src/utils.rs | 4 ++++ datafusion/sql/src/planner.rs | 10 ++++++++++ 2 files changed, 14 insertions(+) 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 6587aa30d71a..8aa2b262ca5c 100644 --- a/datafusion/sql/src/planner.rs +++ b/datafusion/sql/src/planner.rs @@ -3366,6 +3366,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