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 2025/08/02 15:00:44 UTC
(flink) branch master updated: [FLINK-38069][table] Fix return type nullability diffs of function ENCODE & DECODE in SQL and Table API
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 a356421ded6 [FLINK-38069][table] Fix return type nullability diffs of function ENCODE & DECODE in SQL and Table API
a356421ded6 is described below
commit a356421ded64dc95a7c274e25663e977c9af9dfa
Author: dylanhz <53...@users.noreply.github.com>
AuthorDate: Sat Aug 2 23:00:38 2025 +0800
[FLINK-38069][table] Fix return type nullability diffs of function ENCODE & DECODE in SQL and Table API
---
.../planner/functions/sql/FlinkSqlOperatorTable.java | 6 ++++--
.../table/planner/functions/MiscFunctionsITCase.java | 16 ++++++++++++++--
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/sql/FlinkSqlOperatorTable.java b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/sql/FlinkSqlOperatorTable.java
index c897000b3d2..bae972abaeb 100644
--- a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/sql/FlinkSqlOperatorTable.java
+++ b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/sql/FlinkSqlOperatorTable.java
@@ -888,7 +888,7 @@ public class FlinkSqlOperatorTable extends ReflectiveSqlOperatorTable {
SqlKind.OTHER_FUNCTION,
ReturnTypes.cascade(
ReturnTypes.explicit(SqlTypeName.VARBINARY),
- SqlTypeTransforms.FORCE_NULLABLE),
+ SqlTypeTransforms.TO_NULLABLE),
null,
OperandTypes.family(SqlTypeFamily.CHARACTER, SqlTypeFamily.CHARACTER),
SqlFunctionCategory.STRING);
@@ -897,7 +897,9 @@ public class FlinkSqlOperatorTable extends ReflectiveSqlOperatorTable {
new SqlFunction(
"DECODE",
SqlKind.OTHER_FUNCTION,
- VARCHAR_FORCE_NULLABLE,
+ ReturnTypes.cascade(
+ ReturnTypes.explicit(SqlTypeName.VARCHAR),
+ SqlTypeTransforms.TO_NULLABLE),
null,
OperandTypes.family(SqlTypeFamily.BINARY, SqlTypeFamily.CHARACTER),
SqlFunctionCategory.STRING);
diff --git a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/MiscFunctionsITCase.java b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/MiscFunctionsITCase.java
index 67baf4dc96c..b347f8d158c 100644
--- a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/MiscFunctionsITCase.java
+++ b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/MiscFunctionsITCase.java
@@ -229,7 +229,13 @@ class MiscFunctionsITCase extends BuiltInFunctionTestBase {
lit("Hello world").encode($("f2")),
"ENCODE('Hello world', f2)",
"Hello world".getBytes(StandardCharsets.UTF_8),
- DataTypes.BYTES().nullable()),
+ DataTypes.BYTES().nullable())
+ .testResult(
+ // test for nullability of return type
+ lit("Hello world").encode("utf-8"),
+ "ENCODE('Hello world', 'utf-8')",
+ "Hello world".getBytes(StandardCharsets.UTF_8),
+ DataTypes.BYTES().notNull()),
TestSetSpec.forFunction(BuiltInFunctionDefinitions.DECODE)
.onFieldsWithData(
null, "Hello world".getBytes(StandardCharsets.UTF_8), "utf-8")
@@ -250,7 +256,13 @@ class MiscFunctionsITCase extends BuiltInFunctionTestBase {
lit("Hello world".getBytes(StandardCharsets.UTF_8)).decode($("f2")),
"DECODE(x'" + EncodingUtils.hex("Hello world") + "', f2)",
"Hello world",
- DataTypes.STRING().nullable()));
+ DataTypes.STRING().nullable())
+ .testResult(
+ // test for nullability of return type
+ lit("Hello world".getBytes(StandardCharsets.UTF_8)).decode("utf-8"),
+ "DECODE(x'" + EncodingUtils.hex("Hello world") + "', 'utf-8')",
+ "Hello world",
+ DataTypes.STRING().notNull()));
}
// --------------------------------------------------------------------------------------------