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 2020/06/03 15:02:11 UTC

[flink] 02/04: [hotfix][table-common] Align explicit casting with Calcite's SqlTypeCoercionRule

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 7dc419342779d08f6c1ae6adf42e58bdc6056971
Author: Timo Walther <tw...@apache.org>
AuthorDate: Fri May 29 08:18:43 2020 +0200

    [hotfix][table-common] Align explicit casting with Calcite's SqlTypeCoercionRule
---
 .../types/logical/utils/LogicalTypeCasts.java      | 33 ++++++++++++++--------
 .../flink/table/types/LogicalTypeCastsTest.java    |  2 +-
 2 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/utils/LogicalTypeCasts.java b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/utils/LogicalTypeCasts.java
index ea63e0a..bc8640c 100644
--- a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/utils/LogicalTypeCasts.java
+++ b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/utils/LogicalTypeCasts.java
@@ -119,76 +119,85 @@ public final class LogicalTypeCasts {
 		castTo(CHAR)
 			.implicitFrom(CHAR)
 			.explicitFromFamily(PREDEFINED)
-			.explicitNotFromFamily(BINARY_STRING)
 			.build();
 
 		castTo(VARCHAR)
 			.implicitFromFamily(CHARACTER_STRING)
 			.explicitFromFamily(PREDEFINED)
-			.explicitNotFromFamily(BINARY_STRING)
 			.build();
 
 		castTo(BOOLEAN)
 			.implicitFrom(BOOLEAN)
-			.explicitFromFamily(CHARACTER_STRING)
+			.explicitFromFamily(CHARACTER_STRING, NUMERIC)
 			.build();
 
 		castTo(BINARY)
 			.implicitFrom(BINARY)
+			.explicitFromFamily(CHARACTER_STRING)
+			.explicitFrom(VARBINARY)
 			.build();
 
 		castTo(VARBINARY)
 			.implicitFromFamily(BINARY_STRING)
+			.explicitFromFamily(CHARACTER_STRING)
+			.explicitFrom(BINARY)
 			.build();
 
 		castTo(DECIMAL)
 			.implicitFromFamily(NUMERIC)
-			.explicitFromFamily(CHARACTER_STRING)
+			.explicitFromFamily(CHARACTER_STRING, INTERVAL)
+			.explicitFrom(BOOLEAN, TIMESTAMP_WITHOUT_TIME_ZONE, TIMESTAMP_WITH_LOCAL_TIME_ZONE)
 			.build();
 
 		castTo(TINYINT)
 			.implicitFrom(TINYINT)
-			.explicitFromFamily(NUMERIC, CHARACTER_STRING)
+			.explicitFromFamily(NUMERIC, CHARACTER_STRING, INTERVAL)
+			.explicitFrom(BOOLEAN, TIMESTAMP_WITHOUT_TIME_ZONE, TIMESTAMP_WITH_LOCAL_TIME_ZONE)
 			.build();
 
 		castTo(SMALLINT)
 			.implicitFrom(TINYINT, SMALLINT)
-			.explicitFromFamily(NUMERIC, CHARACTER_STRING)
+			.explicitFromFamily(NUMERIC, CHARACTER_STRING, INTERVAL)
+			.explicitFrom(BOOLEAN, TIMESTAMP_WITHOUT_TIME_ZONE, TIMESTAMP_WITH_LOCAL_TIME_ZONE)
 			.build();
 
 		castTo(INTEGER)
 			.implicitFrom(TINYINT, SMALLINT, INTEGER)
-			.explicitFromFamily(NUMERIC, CHARACTER_STRING)
+			.explicitFromFamily(NUMERIC, CHARACTER_STRING, INTERVAL)
+			.explicitFrom(BOOLEAN, TIMESTAMP_WITHOUT_TIME_ZONE, TIMESTAMP_WITH_LOCAL_TIME_ZONE)
 			.build();
 
 		castTo(BIGINT)
 			.implicitFrom(TINYINT, SMALLINT, INTEGER, BIGINT)
-			.explicitFromFamily(NUMERIC, CHARACTER_STRING)
+			.explicitFromFamily(NUMERIC, CHARACTER_STRING, INTERVAL)
+			.explicitFrom(BOOLEAN, TIMESTAMP_WITHOUT_TIME_ZONE, TIMESTAMP_WITH_LOCAL_TIME_ZONE)
 			.build();
 
 		castTo(FLOAT)
 			.implicitFrom(TINYINT, SMALLINT, INTEGER, BIGINT, FLOAT, DECIMAL)
 			.explicitFromFamily(NUMERIC, CHARACTER_STRING)
+			.explicitFrom(BOOLEAN, TIMESTAMP_WITHOUT_TIME_ZONE, TIMESTAMP_WITH_LOCAL_TIME_ZONE)
 			.build();
 
 		castTo(DOUBLE)
 			.implicitFromFamily(NUMERIC)
 			.explicitFromFamily(CHARACTER_STRING)
+			.explicitFrom(BOOLEAN, TIMESTAMP_WITHOUT_TIME_ZONE, TIMESTAMP_WITH_LOCAL_TIME_ZONE)
 			.build();
 
 		castTo(DATE)
 			.implicitFrom(DATE, TIMESTAMP_WITHOUT_TIME_ZONE)
-			.explicitFromFamily(TIMESTAMP, CHARACTER_STRING)
+			.explicitFromFamily(TIMESTAMP, CHARACTER_STRING, BINARY_STRING)
 			.build();
 
 		castTo(TIME_WITHOUT_TIME_ZONE)
 			.implicitFrom(TIME_WITHOUT_TIME_ZONE, TIMESTAMP_WITHOUT_TIME_ZONE)
-			.explicitFromFamily(TIME, TIMESTAMP, CHARACTER_STRING)
+			.explicitFromFamily(TIME, TIMESTAMP, CHARACTER_STRING, BINARY_STRING)
 			.build();
 
 		castTo(TIMESTAMP_WITHOUT_TIME_ZONE)
 			.implicitFrom(TIMESTAMP_WITHOUT_TIME_ZONE)
-			.explicitFromFamily(DATETIME, CHARACTER_STRING)
+			.explicitFromFamily(DATETIME, CHARACTER_STRING, BINARY_STRING, NUMERIC)
 			.build();
 
 		castTo(TIMESTAMP_WITH_TIME_ZONE)
@@ -198,7 +207,7 @@ public final class LogicalTypeCasts {
 
 		castTo(TIMESTAMP_WITH_LOCAL_TIME_ZONE)
 			.implicitFrom(TIMESTAMP_WITH_LOCAL_TIME_ZONE)
-			.explicitFromFamily(DATETIME, CHARACTER_STRING)
+			.explicitFromFamily(DATETIME, CHARACTER_STRING, BINARY_STRING, NUMERIC)
 			.build();
 
 		castTo(INTERVAL_YEAR_MONTH)
diff --git a/flink-table/flink-table-common/src/test/java/org/apache/flink/table/types/LogicalTypeCastsTest.java b/flink-table/flink-table-common/src/test/java/org/apache/flink/table/types/LogicalTypeCastsTest.java
index 03fb1b7..8f79fe6 100644
--- a/flink-table/flink-table-common/src/test/java/org/apache/flink/table/types/LogicalTypeCastsTest.java
+++ b/flink-table/flink-table-common/src/test/java/org/apache/flink/table/types/LogicalTypeCastsTest.java
@@ -158,7 +158,7 @@ public class LogicalTypeCastsTest {
 						)
 					),
 					false,
-					false
+					true
 				},
 
 				{