From 0acc67e6b93b5c4a2cc444af555d9f80a9cd0b63 Mon Sep 17 00:00:00 2001 From: MaChengLong <592577182@qq.com> Date: Thu, 8 Apr 2021 13:52:36 +0800 Subject: [PATCH] [FLINK-22109][table-planner-blink] Resolve misleading exception message in invalid nested function --- .../inference/TypeInferenceOperandInference.java | 3 ++- .../planner/expressions/ScalarFunctionsTest.scala | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/functions/inference/TypeInferenceOperandInference.java b/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/functions/inference/TypeInferenceOperandInference.java index 16793e6dc7898..5e6e3d83b4d24 100644 --- a/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/functions/inference/TypeInferenceOperandInference.java +++ b/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/functions/inference/TypeInferenceOperandInference.java @@ -30,6 +30,7 @@ import org.apache.flink.table.types.logical.LogicalType; import org.apache.calcite.rel.type.RelDataType; +import org.apache.calcite.runtime.CalciteContextException; import org.apache.calcite.sql.SqlCallBinding; import org.apache.calcite.sql.type.SqlOperandTypeInference; @@ -68,7 +69,7 @@ public void inferOperandTypes( new CallBindingCallContext(dataTypeFactory, definition, callBinding, returnType); try { inferOperandTypesOrError(unwrapTypeFactory(callBinding), callContext, operandTypes); - } catch (ValidationException e) { + } catch (ValidationException | CalciteContextException e) { // let operand checker fail } catch (Throwable t) { throw createUnexpectedException(callContext, t); 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 859c869a73daa..4a1bafb096c71 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 @@ -21,7 +21,7 @@ package org.apache.flink.table.planner.expressions import org.apache.flink.table.api._ import org.apache.flink.table.expressions.{Expression, ExpressionParser, TimeIntervalUnit, TimePointUnit} import org.apache.flink.table.planner.expressions.utils.ScalarTypesTestBase - +import org.hamcrest.core.StringContains import org.junit.Test class ScalarFunctionsTest extends ScalarTypesTestBase { @@ -4133,4 +4133,14 @@ class ScalarFunctionsTest extends ScalarTypesTestBase { testSqlApi(s"IFNULL(CAST(INTERVAL '2' DAY AS VARCHAR(20)), $str2)", "+2 00:00:00.000") testSqlApi(s"IFNULL(CAST(f53 AS VARCHAR(100)), $str2)", "hello world") } + + @Test + def testInvalidNestedFunction(): Unit = { + thrown.expect(classOf[ValidationException]) + thrown.expectMessage(StringContains.containsString( + """Invalid number of arguments to function 'SUBSTR'""")) + testSqlApi( + "IFNULL(SUBSTR('abc'), 'def')", + "abc") + } }