You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by fh...@apache.org on 2018/05/11 22:48:46 UTC
flink git commit: [FLINK-9332] [table] Fix handling of null return
values in CallGenerator.
Repository: flink
Updated Branches:
refs/heads/release-1.5 ac043c460 -> 2582a2e77
[FLINK-9332] [table] Fix handling of null return values in CallGenerator.
This closes #5988.
Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/2582a2e7
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/2582a2e7
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/2582a2e7
Branch: refs/heads/release-1.5
Commit: 2582a2e77d801344135fcc222e271900fab43c57
Parents: ac043c4
Author: Xpray <le...@gmail.com>
Authored: Fri May 11 22:47:32 2018 +0800
Committer: Fabian Hueske <fh...@apache.org>
Committed: Sat May 12 00:43:24 2018 +0200
----------------------------------------------------------------------
.../table/codegen/calls/CallGenerator.scala | 21 +++++++++++++++-----
.../table/expressions/ScalarFunctionsTest.scala | 2 ++
2 files changed, 18 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flink/blob/2582a2e7/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/CallGenerator.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/CallGenerator.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/CallGenerator.scala
index 48f5a95..4fbabd6 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/CallGenerator.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/calls/CallGenerator.scala
@@ -21,6 +21,7 @@ package org.apache.flink.table.codegen.calls
import org.apache.flink.api.common.typeinfo.TypeInformation
import org.apache.flink.table.codegen.CodeGenUtils._
import org.apache.flink.table.codegen.{CodeGenerator, GeneratedExpression}
+import org.apache.flink.table.typeutils.TypeCheckUtils
trait CallGenerator {
@@ -64,17 +65,26 @@ object CallGenerator {
val (auxiliaryStmt, result) = call(operands.map(_.resultTerm))
+ val nullTermCode = if (
+ nullCheck &&
+ isReference(returnType) &&
+ !TypeCheckUtils.isTemporal(returnType)) {
+ s"""
+ |$nullTerm = ($resultTerm == null);
+ """.stripMargin
+ } else {
+ ""
+ }
+
val resultCode = if (nullCheck && operands.nonEmpty) {
s"""
|${operands.map(_.code).mkString("\n")}
|boolean $nullTerm = ${operands.map(_.nullTerm).mkString(" || ")};
- |$resultTypeTerm $resultTerm;
- |if ($nullTerm) {
- | $resultTerm = $defaultValue;
- |}
- |else {
+ |$resultTypeTerm $resultTerm = $defaultValue;
+ |if (!$nullTerm) {
| ${auxiliaryStmt.getOrElse("")}
| $resultTerm = $result;
+ | $nullTermCode
|}
|""".stripMargin
} else if (nullCheck && operands.isEmpty) {
@@ -83,6 +93,7 @@ object CallGenerator {
|boolean $nullTerm = false;
|${auxiliaryStmt.getOrElse("")}
|$resultTypeTerm $resultTerm = $result;
+ |$nullTermCode
|""".stripMargin
} else{
s"""
http://git-wip-us.apache.org/repos/asf/flink/blob/2582a2e7/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ScalarFunctionsTest.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ScalarFunctionsTest.scala b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ScalarFunctionsTest.scala
index d449fba..9338412 100644
--- a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ScalarFunctionsTest.scala
+++ b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ScalarFunctionsTest.scala
@@ -364,6 +364,8 @@ class ScalarFunctionsTest extends ScalarTypesTestBase {
testSqlApi("LPAD('⎨⎨',1,'??')", "⎨")
testSqlApi("LPAD('äääääääää',2,'??')", "ää")
testSqlApi("LPAD('äääääääää',10,'??')", "?äääääääää")
+ testSqlApi("LPAD('Hello', -1, 'x') IS NULL", "true")
+ testSqlApi("LPAD('Hello', -1, 'x') IS NOT NULL", "false")
testAllApis(
"äää".lpad(13, "12345"),