From 5f86f2d1ae608a4d2259bfcf637d97b490dbd328 Mon Sep 17 00:00:00 2001 From: Benchao Li Date: Fri, 20 Dec 2019 14:47:54 +0800 Subject: [PATCH] [FLINK-15266][table-planner-blink] Fix NPE for code generated CASE WHEN operator in blink planner (#10594) --- .../planner/codegen/calls/ScalarOperatorGens.scala | 11 ++++++++--- .../planner/expressions/ScalarOperatorsTest.scala | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala b/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala index be7c982c65983..200c0de57b0e9 100644 --- a/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala +++ b/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala @@ -1279,21 +1279,26 @@ object ScalarOperatorGens { val Seq(resultTerm, nullTerm) = newNames("result", "isNull") val resultTypeTerm = primitiveTypeTermForType(resultType) + val defaultValue = primitiveDefaultValue(resultType) val operatorCode = if (ctx.nullCheck) { s""" |${condition.code} - |$resultTypeTerm $resultTerm; + |$resultTypeTerm $resultTerm = $defaultValue; |boolean $nullTerm; |if (${condition.resultTerm}) { | ${trueAction.code} - | $resultTerm = ${trueAction.resultTerm}; | $nullTerm = ${trueAction.nullTerm}; + | if (!$nullTerm) { + | $resultTerm = ${trueAction.resultTerm}; + | } |} |else { | ${falseAction.code} - | $resultTerm = ${falseAction.resultTerm}; | $nullTerm = ${falseAction.nullTerm}; + | if (!$nullTerm) { + | $resultTerm = ${falseAction.resultTerm}; + | } |} |""".stripMargin.trim } diff --git a/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/expressions/ScalarOperatorsTest.scala b/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/expressions/ScalarOperatorsTest.scala index 95aff8ac03133..04b20022f80ec 100644 --- a/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/expressions/ScalarOperatorsTest.scala +++ b/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/expressions/ScalarOperatorsTest.scala @@ -122,5 +122,7 @@ class ScalarOperatorsTest extends ScalarOperatorsTestBase { testSqlApi("CASE f7 WHEN 1 THEN 11 WHEN 2 THEN 4 ELSE NULL END", "null") testSqlApi("CASE 42 WHEN 1 THEN 'a' WHEN 2 THEN 'bcd' END", "null") testSqlApi("CASE 1 WHEN 1 THEN true WHEN 2 THEN false ELSE NULL END", "true") + + testSqlApi("CASE WHEN f2 = 1 THEN CAST('' as INT) ELSE 0 END", "null") } }