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"),