You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by li...@apache.org on 2020/07/14 05:55:14 UTC
[flink] branch release-1.11 updated:
[FLINK-16181][table-planner-blink] Fix IfCallGen throw NPE when operand's
resultTerm is null
This is an automated email from the ASF dual-hosted git repository.
libenchao pushed a commit to branch release-1.11
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/release-1.11 by this push:
new 39b4778 [FLINK-16181][table-planner-blink] Fix IfCallGen throw NPE when operand's resultTerm is null
39b4778 is described below
commit 39b4778a3eaae81902203d558335ed4fbbd8e379
Author: libenchao <li...@gmail.com>
AuthorDate: Thu Feb 20 22:19:17 2020 +0800
[FLINK-16181][table-planner-blink] Fix IfCallGen throw NPE when operand's resultTerm is null
This closes #11161
---
.../apache/flink/table/planner/codegen/calls/IfCallGen.scala | 12 +++++++++---
.../table/planner/expressions/ScalarOperatorsTest.scala | 1 +
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/IfCallGen.scala b/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/calls/IfCallGen.scala
index 532f8fe..fcc62c3 100644
--- a/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/calls/IfCallGen.scala
+++ b/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/codegen/calls/IfCallGen.scala
@@ -18,7 +18,7 @@
package org.apache.flink.table.planner.codegen.calls
-import org.apache.flink.table.planner.codegen.CodeGenUtils.primitiveTypeTermForType
+import org.apache.flink.table.planner.codegen.CodeGenUtils.{primitiveDefaultValue, primitiveTypeTermForType}
import org.apache.flink.table.planner.codegen.{CodeGenUtils, CodeGeneratorContext, GeneratedExpression}
import org.apache.flink.table.types.logical.LogicalType
@@ -44,6 +44,7 @@ class IfCallGen() extends CallGenerator {
}
val resultTypeTerm = primitiveTypeTermForType(returnType)
+ val resultDefault = primitiveDefaultValue(returnType)
val Seq(resultTerm, nullTerm) = ctx.addReusableLocalVariables(
(resultTypeTerm, "result"),
("boolean", "isNull"))
@@ -51,13 +52,18 @@ class IfCallGen() extends CallGenerator {
val resultCode =
s"""
|${operands.head.code}
+ |$resultTerm = $resultDefault;
|if (${operands.head.resultTerm}) {
| ${operands(1).code}
- | $resultTerm = $castedResultTerm1;
+ | if (!${operands(1).nullTerm}) {
+ | $resultTerm = $castedResultTerm1;
+ | }
| $nullTerm = ${operands(1).nullTerm};
|} else {
| ${operands(2).code}
- | $resultTerm = $castedResultTerm2;
+ | if (!${operands(2).nullTerm}) {
+ | $resultTerm = $castedResultTerm2;
+ | }
| $nullTerm = ${operands(2).nullTerm};
|}
""".stripMargin
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 04b2002..4f6cbe4 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
@@ -124,5 +124,6 @@ class ScalarOperatorsTest extends ScalarOperatorsTestBase {
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")
+ testSqlApi("IF(true, CAST('non-numeric' AS BIGINT), 0)", "null")
}
}