From cf12ff277cb62bb753e8604a6fb5d195d477ef7f Mon Sep 17 00:00:00 2001 From: Chongchen Chen Date: Sun, 2 Nov 2025 12:36:30 +0800 Subject: [PATCH] chore: simplify map const --- .../simplify_expressions/expr_simplifier.rs | 27 ++----------------- .../sqllogictest/test_files/simplify_expr.slt | 11 ++++++++ 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs b/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs index 85e9d9b6a0ed..8d2acc8dfc5d 100644 --- a/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs +++ b/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs @@ -711,35 +711,12 @@ impl<'a> ConstEvaluator<'a> { } else { // Non-ListArray match ScalarValue::try_from_array(&a, 0) { - Ok(s) => { - // TODO: support the optimization for `Map` type after support impl hash for it - if matches!(&s, ScalarValue::Map(_)) { - ConstSimplifyResult::SimplifyRuntimeError( - DataFusionError::NotImplemented("Const evaluate for Map type is still not supported".to_string()), - expr, - ) - } else { - ConstSimplifyResult::Simplified(s, metadata) - } - } + Ok(s) => ConstSimplifyResult::Simplified(s, metadata), Err(err) => ConstSimplifyResult::SimplifyRuntimeError(err, expr), } } } - ColumnarValue::Scalar(s) => { - // TODO: support the optimization for `Map` type after support impl hash for it - if matches!(&s, ScalarValue::Map(_)) { - ConstSimplifyResult::SimplifyRuntimeError( - DataFusionError::NotImplemented( - "Const evaluate for Map type is still not supported" - .to_string(), - ), - expr, - ) - } else { - ConstSimplifyResult::Simplified(s, metadata) - } - } + ColumnarValue::Scalar(s) => ConstSimplifyResult::Simplified(s, metadata), } } } diff --git a/datafusion/sqllogictest/test_files/simplify_expr.slt b/datafusion/sqllogictest/test_files/simplify_expr.slt index c77163dc996d..2387385369cb 100644 --- a/datafusion/sqllogictest/test_files/simplify_expr.slt +++ b/datafusion/sqllogictest/test_files/simplify_expr.slt @@ -107,3 +107,14 @@ query B SELECT a / NULL::DECIMAL(4,3) > 1.2::decimal(2,1) FROM VALUES (1) AS t(a); ---- NULL + +query TT +explain SELECT CASE WHEN 1 > 0 THEN MAP {'x': 100} ELSE MAP {'y': 200} END AS a; +---- +logical_plan +01)Projection: Map([{"x":"100"}]) AS a +02)--EmptyRelation: rows=1 +physical_plan +01)ProjectionExec: expr=[[{x:100}] as a] +02)--PlaceholderRowExec +