Skip to content

Commit 042956c

Browse files
gkomlossisnuyanzin
andauthored
[FLINK-38750][table] Validation of queries with functions erroneously invoked under SELECT fails with StackOverflow
Co-authored-by: Sergey Nuyanzin <snuyanzin@gmail.com>
1 parent 8a34dec commit 042956c

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/inference/TypeInferenceOperandInference.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,10 @@ public void inferOperandTypes(
7474
false)) {
7575
inferOperandTypesOrError(unwrapTypeFactory(callBinding), callContext, operandTypes);
7676
}
77-
} catch (ValidationException | CalciteContextException e) {
77+
} catch (ValidationException e) {
7878
// let operand checker fail
79+
} catch (CalciteContextException e) {
80+
throw e;
7981
} catch (Throwable t) {
8082
throw createUnexpectedException(callContext, t);
8183
}

flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/stream/sql/CalcTest.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,21 @@ class CalcTest extends TableTestBase {
110110
.isThrownBy(() => util.tableEnv.sqlQuery("SELECT a, foo FROM MyTable"))
111111
}
112112

113+
@Test
114+
def testCoalesceOnInvalidField(): Unit = {
115+
assertThatExceptionOfType(classOf[ValidationException])
116+
.isThrownBy(() => util.verifyExecPlan("SELECT coalesce(SELECT invalid)"))
117+
.withMessageContaining("Column 'invalid' not found in any table")
118+
}
119+
120+
@Test
121+
def testNestedCoalesceOnInvalidField(): Unit = {
122+
assertThatExceptionOfType(classOf[ValidationException])
123+
.isThrownBy(
124+
() => util.verifyExecPlan("SELECT coalesce(SELECT coalesce(SELECT coalesce(invalid)))"))
125+
.withMessageContaining("Column 'invalid' not found in any table")
126+
}
127+
113128
@Test
114129
def testPrimitiveMapType(): Unit = {
115130
util.verifyExecPlan("SELECT MAP[b, 30, 10, a] FROM MyTable")

0 commit comments

Comments
 (0)