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 2017/12/19 10:22:53 UTC
flink git commit: [FLINK-8215] [table] Support implicit type widening
for array/map constructors in SQL
Repository: flink
Updated Branches:
refs/heads/master 8aca84c72 -> 2142eeda9
[FLINK-8215] [table] Support implicit type widening for array/map constructors in SQL
This closes #5148.
Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/2142eeda
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/2142eeda
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/2142eeda
Branch: refs/heads/master
Commit: 2142eeda9df262e989951c4b31273cbd9346567f
Parents: 8aca84c
Author: Rong Rong <ro...@uber.com>
Authored: Mon Dec 11 14:55:49 2017 -0800
Committer: twalthr <tw...@apache.org>
Committed: Tue Dec 19 11:03:36 2017 +0100
----------------------------------------------------------------------
.../org/apache/flink/table/codegen/CodeGenerator.scala | 4 ++--
.../apache/flink/table/expressions/ArrayTypeTest.scala | 3 +++
.../org/apache/flink/table/expressions/MapTypeTest.scala | 3 +++
.../expressions/validation/ArrayTypeValidationTest.scala | 10 ++++++++++
.../expressions/validation/MapTypeValidationTest.scala | 10 ++++++++++
5 files changed, 28 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flink/blob/2142eeda/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/CodeGenerator.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/CodeGenerator.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/CodeGenerator.scala
index b98936f..e94fe38 100644
--- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/CodeGenerator.scala
+++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/table/codegen/CodeGenerator.scala
@@ -1312,10 +1312,10 @@ abstract class CodeGenerator(
}
private[flink] def generateNullableOutputBoxing(
- element: GeneratedExpression,
+ expr: GeneratedExpression,
typeInfo: TypeInformation[_])
: GeneratedExpression = {
- val boxedExpr = generateOutputFieldBoxing(element)
+ val boxedExpr = generateOutputFieldBoxing(generateCast(nullCheck, expr, typeInfo))
val boxedTypeTerm = boxedTypeTermForTypeInfo(typeInfo)
val exprOrNull: String = if (nullCheck) {
s"${boxedExpr.nullTerm} ? null : ($boxedTypeTerm) ${boxedExpr.resultTerm}"
http://git-wip-us.apache.org/repos/asf/flink/blob/2142eeda/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ArrayTypeTest.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ArrayTypeTest.scala b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ArrayTypeTest.scala
index 28023dd..e0292b2 100644
--- a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ArrayTypeTest.scala
+++ b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/ArrayTypeTest.scala
@@ -99,6 +99,9 @@ class ArrayTypeTest extends ArrayTypeTestBase {
"Array(Array(1, 2, 3), Array(3, 2, 1))",
"ARRAY[ARRAY[1, 2, 3], ARRAY[3, 2, 1]]",
"[[1, 2, 3], [3, 2, 1]]")
+
+ // implicit type cast only works on SQL APIs.
+ testSqlApi("ARRAY[CAST(1 AS DOUBLE), CAST(2 AS FLOAT)]", "[1.0, 2.0]")
}
@Test
http://git-wip-us.apache.org/repos/asf/flink/blob/2142eeda/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/MapTypeTest.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/MapTypeTest.scala b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/MapTypeTest.scala
index 1fdfb79..2ce17e4 100644
--- a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/MapTypeTest.scala
+++ b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/MapTypeTest.scala
@@ -77,6 +77,9 @@ class MapTypeTest extends MapTypeTestBase {
"map(2.0002p, 2.0003p)",
"MAP[CAST(2.0002 AS DECIMAL), CAST(2.0003 AS DECIMAL)]",
"{2.0002=2.0003}")
+
+ // implicit conversion
+ testSqlApi("MAP['k1', CAST(1 AS DOUBLE), 'k2', CAST(2 AS FLOAT)]", "{k1=1.0, k2=2.0}")
}
@Test
http://git-wip-us.apache.org/repos/asf/flink/blob/2142eeda/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/validation/ArrayTypeValidationTest.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/validation/ArrayTypeValidationTest.scala b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/validation/ArrayTypeValidationTest.scala
index 3606d13..1691000 100644
--- a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/validation/ArrayTypeValidationTest.scala
+++ b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/validation/ArrayTypeValidationTest.scala
@@ -26,6 +26,16 @@ import org.junit.Test
class ArrayTypeValidationTest extends ArrayTypeTestBase {
@Test(expected = classOf[ValidationException])
+ def testImplicitTypeCastTableApi(): Unit = {
+ testTableApi(array(1.0, 2.0f), "FAIL", "FAIL")
+ }
+
+ @Test(expected = classOf[ValidationException])
+ def testImplicitTypeCastArraySql(): Unit = {
+ testSqlApi("ARRAY['string', 12]", "FAIL")
+ }
+
+ @Test(expected = classOf[ValidationException])
def testObviousInvalidIndexTableApi(): Unit = {
testTableApi('f2.at(0), "FAIL", "FAIL")
}
http://git-wip-us.apache.org/repos/asf/flink/blob/2142eeda/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/validation/MapTypeValidationTest.scala
----------------------------------------------------------------------
diff --git a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/validation/MapTypeValidationTest.scala b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/validation/MapTypeValidationTest.scala
index 8a5eaea..76ebf03 100644
--- a/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/validation/MapTypeValidationTest.scala
+++ b/flink-libraries/flink-table/src/test/scala/org/apache/flink/table/expressions/validation/MapTypeValidationTest.scala
@@ -44,4 +44,14 @@ class MapTypeValidationTest extends MapTypeTestBase {
def testEmptyMap(): Unit = {
testAllApis("FAIL", "map()", "MAP[]", "FAIL")
}
+
+ @Test(expected = classOf[ValidationException])
+ def testUnsupportedMapImplicitTypeCastTableApi(): Unit = {
+ testTableApi(map("k1", 1.0, "k2", 2.0f), "map('k1', 1.0, 'k2', 2.0f)", "FAIL")
+ }
+
+ @Test(expected = classOf[ValidationException])
+ def testUnsupportedMapImplicitTypeCastSql(): Unit = {
+ testSqlApi("MAP['k1', 'string', 'k2', 12]", "FAIL")
+ }
}