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 2019/10/16 15:45:09 UTC
[flink] 01/02: [FLINK-14409][table] Fix MapType and MultisetType
doesn't accept any subclass of java.util.Map for inputs
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 8e81fc265d95f634401269b2acf9a4e80c0c1044
Author: Jark Wu <im...@gmail.com>
AuthorDate: Wed Oct 16 18:24:01 2019 +0800
[FLINK-14409][table] Fix MapType and MultisetType doesn't accept any subclass of java.util.Map for inputs
This closes #9913.
---
.../org/apache/flink/table/types/logical/MapType.java | 3 +++
.../flink/table/types/logical/MultisetType.java | 3 +++
.../flink/table/expressions/ExpressionTest.java | 19 +++++++++++++++++++
.../apache/flink/table/types/LogicalTypesTest.java | 8 +++++---
4 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/MapType.java b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/MapType.java
index 4d77265..cd0ab71 100644
--- a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/MapType.java
+++ b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/MapType.java
@@ -91,6 +91,9 @@ public final class MapType extends LogicalType {
@Override
public boolean supportsInputConversion(Class<?> clazz) {
+ if (Map.class.isAssignableFrom(clazz)) {
+ return true;
+ }
return INPUT_OUTPUT_CONVERSION.contains(clazz.getName());
}
diff --git a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/MultisetType.java b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/MultisetType.java
index 54aa7e4..cd4b7ee 100644
--- a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/MultisetType.java
+++ b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/MultisetType.java
@@ -82,6 +82,9 @@ public final class MultisetType extends LogicalType {
@Override
public boolean supportsInputConversion(Class<?> clazz) {
+ if (Map.class.isAssignableFrom(clazz)) {
+ return true;
+ }
return INPUT_OUTPUT_CONVERSION.contains(clazz.getName());
}
diff --git a/flink-table/flink-table-common/src/test/java/org/apache/flink/table/expressions/ExpressionTest.java b/flink-table/flink-table-common/src/test/java/org/apache/flink/table/expressions/ExpressionTest.java
index eb80d25..c9d265b 100644
--- a/flink-table/flink-table-common/src/test/java/org/apache/flink/table/expressions/ExpressionTest.java
+++ b/flink-table/flink-table-common/src/test/java/org/apache/flink/table/expressions/ExpressionTest.java
@@ -30,6 +30,8 @@ import org.junit.rules.ExpectedException;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
@@ -86,6 +88,23 @@ public class ExpressionTest {
new String[][]{null, null, {"1", "2", "3", "Dog's"}},
DataTypes.ARRAY(DataTypes.ARRAY(DataTypes.STRING())))
.toString());
+
+ final Map<String, Integer> map = new HashMap<>();
+ map.put("key1", 1);
+ map.put("key2", 2);
+ map.put("key3", 3);
+ assertEquals(
+ "{key1=1, key2=2, key3=3}",
+ new ValueLiteralExpression(
+ map,
+ DataTypes.MAP(DataTypes.STRING(), DataTypes.INT()))
+ .toString());
+ assertEquals(
+ "{key1=1, key2=2, key3=3}",
+ new ValueLiteralExpression(
+ map,
+ DataTypes.MULTISET(DataTypes.STRING()))
+ .toString());
}
@Test
diff --git a/flink-table/flink-table-common/src/test/java/org/apache/flink/table/types/LogicalTypesTest.java b/flink-table/flink-table-common/src/test/java/org/apache/flink/table/types/LogicalTypesTest.java
index 6bbbc80..5ce9937 100644
--- a/flink-table/flink-table-common/src/test/java/org/apache/flink/table/types/LogicalTypesTest.java
+++ b/flink-table/flink-table-common/src/test/java/org/apache/flink/table/types/LogicalTypesTest.java
@@ -68,7 +68,9 @@ import org.junit.Test;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Map;
+import java.util.TreeMap;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -426,7 +428,7 @@ public class LogicalTypesTest {
new MultisetType(new TimestampType()),
"MULTISET<TIMESTAMP(6)>",
"MULTISET<TIMESTAMP(6)>",
- new Class[]{Map.class},
+ new Class[]{Map.class, HashMap.class, TreeMap.class},
new Class[]{Map.class},
new LogicalType[]{new TimestampType()},
new MultisetType(new SmallIntType())
@@ -436,7 +438,7 @@ public class LogicalTypesTest {
new MultisetType(new MultisetType(new TimestampType())),
"MULTISET<MULTISET<TIMESTAMP(6)>>",
"MULTISET<MULTISET<TIMESTAMP(6)>>",
- new Class[]{Map.class},
+ new Class[]{Map.class, HashMap.class, TreeMap.class},
new Class[]{Map.class},
new LogicalType[]{new MultisetType(new TimestampType())},
new MultisetType(new MultisetType(new SmallIntType()))
@@ -449,7 +451,7 @@ public class LogicalTypesTest {
new MapType(new VarCharType(20), new TimestampType()),
"MAP<VARCHAR(20), TIMESTAMP(6)>",
"MAP<VARCHAR(20), TIMESTAMP(6)>",
- new Class[]{Map.class},
+ new Class[]{Map.class, HashMap.class, TreeMap.class},
new Class[]{Map.class},
new LogicalType[]{new VarCharType(20), new TimestampType()},
new MapType(new VarCharType(99), new TimestampType())