You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by tw...@apache.org on 2022/03/23 12:51:26 UTC
[flink] 01/02: [FLINK-26770][table-planner] Fix ArrayToArrayCastRule result data structure
This is an automated email from the ASF dual-hosted git repository.
twalthr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git
commit 7f3fa549638cb2e7b9ddf53366bf744f1f5c6568
Author: slinkydeveloper <fr...@gmail.com>
AuthorDate: Mon Mar 21 10:47:57 2022 +0100
[FLINK-26770][table-planner] Fix ArrayToArrayCastRule result data structure
This closes #19188.
---
.../functions/casting/ArrayToArrayCastRule.java | 28 ++-------------
.../planner/functions/casting/CastRulesTest.java | 42 ++++++++++++++++++++--
2 files changed, 42 insertions(+), 28 deletions(-)
diff --git a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/ArrayToArrayCastRule.java b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/ArrayToArrayCastRule.java
index b67b76a..f3478af 100644
--- a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/ArrayToArrayCastRule.java
+++ b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/ArrayToArrayCastRule.java
@@ -20,8 +20,8 @@ package org.apache.flink.table.planner.functions.casting;
import org.apache.flink.table.data.ArrayData;
import org.apache.flink.table.data.GenericArrayData;
+import org.apache.flink.table.planner.codegen.CodeGenUtils;
import org.apache.flink.table.types.logical.ArrayType;
-import org.apache.flink.table.types.logical.DistinctType;
import org.apache.flink.table.types.logical.LogicalType;
import org.apache.flink.table.types.logical.LogicalTypeRoot;
@@ -109,30 +109,8 @@ class ArrayToArrayCastRule extends AbstractNullAwareCodeGeneratorCastRule<ArrayD
private static String arrayElementType(LogicalType t) {
if (t.isNullable()) {
- return "Object";
+ return CodeGenUtils.boxedTypeTermForType(t);
}
- switch (t.getTypeRoot()) {
- case BOOLEAN:
- return "boolean";
- case TINYINT:
- return "byte";
- case SMALLINT:
- return "short";
- case INTEGER:
- case DATE:
- case TIME_WITHOUT_TIME_ZONE:
- case INTERVAL_YEAR_MONTH:
- return "int";
- case BIGINT:
- case INTERVAL_DAY_TIME:
- return "long";
- case FLOAT:
- return "float";
- case DOUBLE:
- return "double";
- case DISTINCT_TYPE:
- return arrayElementType(((DistinctType) t).getSourceType());
- }
- return "Object";
+ return CodeGenUtils.primitiveTypeTermForType(t);
}
}
diff --git a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/casting/CastRulesTest.java b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/casting/CastRulesTest.java
index 6253e89..46cea2a 100644
--- a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/casting/CastRulesTest.java
+++ b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/casting/CastRulesTest.java
@@ -23,6 +23,7 @@ import org.apache.flink.api.common.typeutils.base.LocalDateTimeSerializer;
import org.apache.flink.table.api.DataTypes;
import org.apache.flink.table.api.TableException;
import org.apache.flink.table.catalog.ObjectIdentifier;
+import org.apache.flink.table.data.DecimalData;
import org.apache.flink.table.data.GenericArrayData;
import org.apache.flink.table.data.GenericMapData;
import org.apache.flink.table.data.GenericRowData;
@@ -1258,8 +1259,8 @@ class CastRulesTest {
CastTestSpecBuilder.testCastTo(ARRAY(BIGINT().nullable()))
.fromCase(
ARRAY(INT().nullable()),
- new GenericArrayData(new Object[] {1, null, 2}),
- new GenericArrayData(new Object[] {1L, null, 2L})),
+ new GenericArrayData(new Integer[] {1, null, 2}),
+ new GenericArrayData(new Long[] {1L, null, 2L})),
CastTestSpecBuilder.testCastTo(ARRAY(BIGINT().notNull()))
.fromCase(
ARRAY(INT().notNull()),
@@ -1273,7 +1274,42 @@ class CastRulesTest {
new GenericArrayData(new Integer[] {1, 2, null}),
new GenericArrayData(new Integer[] {3})
}),
- NullPointerException.class),
+ NullPointerException.class)
+ .fromCase(
+ ARRAY(ARRAY(INT().nullable())),
+ new GenericArrayData(
+ new GenericArrayData[] {
+ new GenericArrayData(new Integer[] {1, 2}),
+ new GenericArrayData(new Integer[] {3})
+ }),
+ new GenericArrayData(
+ new GenericArrayData[] {
+ new GenericArrayData(new Long[] {1L, 2L}),
+ new GenericArrayData(new Long[] {3L})
+ })),
+ CastTestSpecBuilder.testCastTo(ARRAY(ARRAY(DECIMAL(10, 2).notNull())))
+ .fromCase(
+ ARRAY(ARRAY(INT().notNull())),
+ new GenericArrayData(
+ new GenericArrayData[] {
+ new GenericArrayData(new Integer[] {1, 2}),
+ new GenericArrayData(new Integer[] {3})
+ }),
+ new GenericArrayData(
+ new GenericArrayData[] {
+ new GenericArrayData(
+ new Object[] {
+ DecimalData.fromBigDecimal(
+ BigDecimal.ONE, 10, 2),
+ DecimalData.fromBigDecimal(
+ new BigDecimal(2), 10, 2)
+ }),
+ new GenericArrayData(
+ new Object[] {
+ DecimalData.fromBigDecimal(
+ new BigDecimal(3), 10, 2)
+ })
+ })),
CastTestSpecBuilder.testCastTo(MAP(DOUBLE().notNull(), DOUBLE().notNull()))
.fromCase(
MAP(INT().nullable(), INT().nullable()),