From 7e49ccf3dd3408bc9c4adb86f070d1e3d1f4c1e2 Mon Sep 17 00:00:00 2001 From: Jonah Gao Date: Thu, 27 Jun 2024 01:41:54 +0800 Subject: [PATCH] Temporary Fix: Query error when grouping by case expressions (#11133) --- datafusion/core/src/physical_planner.rs | 11 ++++++++--- .../sqllogictest/test_files/group_by.slt | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/datafusion/core/src/physical_planner.rs b/datafusion/core/src/physical_planner.rs index 52d976c45cf3..15f7555575e8 100644 --- a/datafusion/core/src/physical_planner.rs +++ b/datafusion/core/src/physical_planner.rs @@ -156,13 +156,18 @@ fn create_physical_name(e: &Expr, is_first_expr: bool) -> Result { Expr::Case(case) => { let mut name = "CASE ".to_string(); if let Some(e) = &case.expr { - let _ = write!(name, "{e} "); + let _ = write!(name, "{} ", create_physical_name(e, false)?); } for (w, t) in &case.when_then_expr { - let _ = write!(name, "WHEN {w} THEN {t} "); + let _ = write!( + name, + "WHEN {} THEN {} ", + create_physical_name(w, false)?, + create_physical_name(t, false)? + ); } if let Some(e) = &case.else_expr { - let _ = write!(name, "ELSE {e} "); + let _ = write!(name, "ELSE {} ", create_physical_name(e, false)?); } name += "END"; Ok(name) diff --git a/datafusion/sqllogictest/test_files/group_by.slt b/datafusion/sqllogictest/test_files/group_by.slt index f7f251e4b95c..04a1fcc78fe7 100644 --- a/datafusion/sqllogictest/test_files/group_by.slt +++ b/datafusion/sqllogictest/test_files/group_by.slt @@ -5135,3 +5135,22 @@ GROUP BY ts_chunk; ---- 2024-01-01T00:00:00 4 + +# Issue: https://github.com/apache/datafusion/issues/11118 +statement ok +CREATE TABLE test_case_expr(a INT, b TEXT) AS VALUES (1,'hello'), (2,'world') + +query T +SELECT (CASE WHEN CONCAT(b, 'hello') = 'test' THEN 'good' ELSE 'bad' END) AS c + FROM test_case_expr GROUP BY c; +---- +bad + +query I rowsort +SELECT (CASE a::BIGINT WHEN 1 THEN 1 END) AS c FROM test_case_expr GROUP BY c; +---- +1 +NULL + +statement ok +drop table test_case_expr