From 5b2cdc469090fe20660c70b54f105a03fbc351f0 Mon Sep 17 00:00:00 2001 From: LiBinfeng <1204975323@qq.com> Date: Wed, 16 Aug 2023 10:56:17 +0800 Subject: [PATCH] [Fix](Planner) fix case function with null cast to array null --- .../src/main/java/org/apache/doris/analysis/CastExpr.java | 2 +- .../sql_functions/case_function/test_case_function_null.out | 3 +++ .../case_function/test_case_function_null.groovy | 6 +++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java index 6ceb8e3d84c760d..cb78d785395d30a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CastExpr.java @@ -314,7 +314,7 @@ public void analyze() throws AnalysisException { // it is necessary to check if it is castable before creating fn. // char type will fail in canCastTo, so for compatibility, only the cast of array type is checked here. if (type.isArrayType() || childType.isArrayType()) { - if (childType.isNull() || !Type.canCastTo(childType, type)) { + if (!Type.canCastTo(childType, type)) { throw new AnalysisException("Invalid type cast of " + getChild(0).toSql() + " from " + childType + " to " + type); } diff --git a/regression-test/data/query_p0/sql_functions/case_function/test_case_function_null.out b/regression-test/data/query_p0/sql_functions/case_function/test_case_function_null.out index de51eb0306ad099..2d2816c012eb392 100644 --- a/regression-test/data/query_p0/sql_functions/case_function/test_case_function_null.out +++ b/regression-test/data/query_p0/sql_functions/case_function/test_case_function_null.out @@ -16,3 +16,6 @@ -- !sql_case2 -- -2 +-- !sql_case3 -- +0 + diff --git a/regression-test/suites/query_p0/sql_functions/case_function/test_case_function_null.groovy b/regression-test/suites/query_p0/sql_functions/case_function/test_case_function_null.groovy index 63e67a40f009fb9..269a0bf0db87cff 100644 --- a/regression-test/suites/query_p0/sql_functions/case_function/test_case_function_null.groovy +++ b/regression-test/suites/query_p0/sql_functions/case_function/test_case_function_null.groovy @@ -228,4 +228,8 @@ suite("test_case_function_null", "query,p0") { END) FROM case_null2; """ -} \ No newline at end of file + + + qt_sql_case3 """SELECT COUNT(CASE (NOT (NOT true)) WHEN (((- 47960023)) IS NOT NULL) THEN NULL ELSE NULL END) from case_null1;""" + +}