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")
+  }
 }