You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by ja...@apache.org on 2019/08/09 03:17:11 UTC

[flink] 01/03: [FLINK-13523][table-planner-blink] Refactor DIVIDE function to keep it compatible with old planner

This is an automated email from the ASF dual-hosted git repository.

jark pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git

commit 4d560df50d08f22b68e8b8c9a0e2086f45b5f4b4
Author: Zhenghua Gao <do...@gmail.com>
AuthorDate: Thu Aug 1 18:40:14 2019 +0800

    [FLINK-13523][table-planner-blink] Refactor DIVIDE function to keep it compatible with old planner
    
    The behavior of DIVIDE function in blink planner always return double/decimal type which is not standard.
---
 .../planner/functions/sql/FlinkSqlOperatorTable.java    | 17 +----------------
 .../table/planner/expressions/ReturnTypeInference.scala |  5 +----
 .../table/planner/expressions/ScalarFunctionsTest.scala |  2 +-
 .../table/planner/expressions/SqlExpressionTest.scala   |  2 +-
 4 files changed, 4 insertions(+), 22 deletions(-)

diff --git a/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/functions/sql/FlinkSqlOperatorTable.java b/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/functions/sql/FlinkSqlOperatorTable.java
index b3d91ae..ba453ff 100644
--- a/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/functions/sql/FlinkSqlOperatorTable.java
+++ b/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/functions/sql/FlinkSqlOperatorTable.java
@@ -25,7 +25,6 @@ import org.apache.flink.table.planner.plan.type.NumericExceptFirstOperandChecker
 import org.apache.flink.table.planner.plan.type.RepeatFamilyOperandTypeChecker;
 
 import org.apache.calcite.sql.SqlAggFunction;
-import org.apache.calcite.sql.SqlBinaryOperator;
 import org.apache.calcite.sql.SqlFunction;
 import org.apache.calcite.sql.SqlFunctionCategory;
 import org.apache.calcite.sql.SqlGroupedWindowFunction;
@@ -52,7 +51,6 @@ import java.util.List;
 
 import static org.apache.flink.table.planner.plan.type.FlinkReturnTypes.ARG0_VARCHAR_FORCE_NULLABLE;
 import static org.apache.flink.table.planner.plan.type.FlinkReturnTypes.FLINK_DIV_NULLABLE;
-import static org.apache.flink.table.planner.plan.type.FlinkReturnTypes.FLINK_QUOTIENT_NULLABLE;
 import static org.apache.flink.table.planner.plan.type.FlinkReturnTypes.STR_MAP_NULLABLE;
 import static org.apache.flink.table.planner.plan.type.FlinkReturnTypes.VARCHAR_2000_NULLABLE;
 
@@ -108,20 +106,6 @@ public class FlinkSqlOperatorTable extends ReflectiveSqlOperatorTable {
 	// Flink specific built-in scalar SQL functions
 	// -----------------------------------------------------------------------------
 
-	// OPERATORS
-
-	/**
-	 * Arithmetic division operator, '/'. Return DOUBLE or DECIMAL with fractional part.
-	 */
-	public static final SqlBinaryOperator DIVIDE = new SqlBinaryOperator(
-		"/",
-		SqlKind.DIVIDE,
-		60,
-		true,
-		FLINK_QUOTIENT_NULLABLE,
-		InferTypes.FIRST_KNOWN,
-		OperandTypes.DIVISION_OPERATOR);
-
 	// FUNCTIONS
 
 	/**
@@ -953,6 +937,7 @@ public class FlinkSqlOperatorTable extends ReflectiveSqlOperatorTable {
 	public static final SqlOperator AND = SqlStdOperatorTable.AND;
 	public static final SqlOperator AS = SqlStdOperatorTable.AS;
 	public static final SqlOperator CONCAT = SqlStdOperatorTable.CONCAT;
+	public static final SqlOperator DIVIDE = SqlStdOperatorTable.DIVIDE;
 	public static final SqlOperator DIVIDE_INTEGER = SqlStdOperatorTable.DIVIDE_INTEGER;
 	public static final SqlOperator DOT = SqlStdOperatorTable.DOT;
 	public static final SqlOperator EQUALS = SqlStdOperatorTable.EQUALS;
diff --git a/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/expressions/ReturnTypeInference.scala b/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/expressions/ReturnTypeInference.scala
index b2c90b0..59110ab 100644
--- a/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/expressions/ReturnTypeInference.scala
+++ b/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/expressions/ReturnTypeInference.scala
@@ -138,10 +138,7 @@ object ReturnTypeInference {
         fromLogicalTypeToTypeInfo(FlinkTypeFactory.toLogicalType(resultType))
       }
     }
-    val nonDecimalType = op match {
-      case _: Div => (_: LogicalType) => BasicTypeInfo.DOUBLE_TYPE_INFO
-      case _: Mul => (t: LogicalType) => fromLogicalTypeToTypeInfo(t)
-    }
+    val nonDecimalType = (t: LogicalType) => fromLogicalTypeToTypeInfo(t)
     inferBinaryArithmetic(op, decimalFunc, nonDecimalType)
   }
 
diff --git a/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/expressions/ScalarFunctionsTest.scala b/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/expressions/ScalarFunctionsTest.scala
index 7c01910..0472cf7 100644
--- a/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/expressions/ScalarFunctionsTest.scala
+++ b/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/expressions/ScalarFunctionsTest.scala
@@ -1473,7 +1473,7 @@ class ScalarFunctionsTest extends ScalarTypesTestBase {
       1514356320000L / 60000.0, // the `/` is Scala operator, not Flink TableApi operator
       "1514356320000L / 60000",
       "1514356320000 / 60000",
-      "2.5239272E7")
+      "25239272")
 
     testAllApis(
       'f7 / 2,
diff --git a/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/expressions/SqlExpressionTest.scala b/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/expressions/SqlExpressionTest.scala
index 2877468..1e7e53c 100644
--- a/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/expressions/SqlExpressionTest.scala
+++ b/flink-table/flink-table-planner-blink/src/test/scala/org/apache/flink/table/planner/expressions/SqlExpressionTest.scala
@@ -91,7 +91,7 @@ class SqlExpressionTest extends ExpressionTestBase {
     testSqlApi("5+5", "10")
     testSqlApi("5-5", "0")
     testSqlApi("5*5", "25")
-    testSqlApi("5/5", "1.0")
+    testSqlApi("5/5", "1")
     testSqlApi("POWER(5, 5)", "3125.0")
     testSqlApi("ABS(-5)", "5")
     testSqlApi("MOD(-26, 5)", "-1")