You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by sn...@apache.org on 2023/09/10 21:15:52 UTC
[flink] branch master updated: [FLINK-33010][table] GREATEST/LEAST should work with other functions as input (#23345)
This is an automated email from the ASF dual-hosted git repository.
snuyanzin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/master by this push:
new 5775fbbf02b [FLINK-33010][table] GREATEST/LEAST should work with other functions as input (#23345)
5775fbbf02b is described below
commit 5775fbbf02b962243d3fbe2d755be350ee98847a
Author: Sergey Nuyanzin <sn...@gmail.com>
AuthorDate: Sun Sep 10 23:15:45 2023 +0200
[FLINK-33010][table] GREATEST/LEAST should work with other functions as input (#23345)
---
.../table/planner/codegen/calls/ScalarOperatorGens.scala | 7 ++++---
.../planner/functions/GreatestLeastFunctionsITCase.java | 16 ++++++++++++++++
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala
index c653223f5d2..084b3aa503e 100644
--- a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala
+++ b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala
@@ -1369,11 +1369,12 @@ object ScalarOperatorGens {
}
}
- val elementsCode = elements
+ val elementsCode = elements.zipWithIndex
.map {
- element =>
+ case (element, index) =>
s"""
| ${element.code}
+ | ${if (index == 0) s"$tmpResult = ${castIfNumeric(elements.head)};" else ""}
| if (!$nullTerm) {
| $boxedResultTypeTerm $cur = ${castIfNumeric(element)};
| if (${element.nullTerm}) {
@@ -1391,7 +1392,7 @@ object ScalarOperatorGens {
val code =
s"""
- | $boxedResultTypeTerm $tmpResult = ${castIfNumeric(elements.head)};
+ | $boxedResultTypeTerm $tmpResult;
| $primitiveResultTypeTerm $result = ${primitiveDefaultValue(widerType.get)};
| boolean $nullTerm = false;
| $elementsCode
diff --git a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/GreatestLeastFunctionsITCase.java b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/GreatestLeastFunctionsITCase.java
index 7fbee4ab467..a455c4e0c84 100644
--- a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/GreatestLeastFunctionsITCase.java
+++ b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/GreatestLeastFunctionsITCase.java
@@ -73,6 +73,14 @@ class GreatestLeastFunctionsITCase extends BuiltInFunctionTestBase {
"GREATEST(f4, f5)",
"world",
DataTypes.STRING().notNull())
+ .testResult(
+ call(
+ "GREATEST",
+ call("IFNULL", $("f4"), $("f5")),
+ call("IFNULL", $("f5"), $("f4"))),
+ "GREATEST(IFNULL(f4, f5), IFNULL(f5, f4))",
+ "world",
+ DataTypes.STRING().notNull())
.testResult(
call("GREATEST", $("f6"), $("f7")),
"GREATEST(f6, f7)",
@@ -157,6 +165,14 @@ class GreatestLeastFunctionsITCase extends BuiltInFunctionTestBase {
"LEAST(f0, f1) = LEAST(f0, f1)",
null,
DataTypes.BOOLEAN())
+ .testResult(
+ call(
+ "LEAST",
+ call("IFNULL", $("f4"), $("f5")),
+ call("IFNULL", $("f5"), $("f4"))),
+ "LEAST(IFNULL(f4, f5), IFNULL(f5, f4))",
+ "hello",
+ DataTypes.STRING().notNull())
.testSqlValidationError(
"LEAST(f5, f6)",
"SQL validation failed. Invalid function call:\n"