This is an automated email from the ASF dual-hosted git repository. MartijnVisser pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/flink.git
commit d0ee4cb81ac081f143b8a933163e2cb2e02e865c Author: Martijn Visser <[email protected]> AuthorDate: Mon Sep 28 21:51:23 2026 +0200 [hotfix][table-planner] Extract the SqlParseException conversion in CalciteParser The three catch blocks built the same SqlParserException, two of them also the same SqlParserEOFException. One helper for statements and one for expressions now do it, and a null Calcite message no longer ends in a NullPointerException. Generated-by: Claude Code (Claude Fable 5.1) --- .../flink/table/planner/parse/CalciteParser.java | 30 +++++++++++++++------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/parse/CalciteParser.java b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/parse/CalciteParser.java index 55768b3b9c6..67b88a00a6d 100644 --- a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/parse/CalciteParser.java +++ b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/parse/CalciteParser.java @@ -55,10 +55,7 @@ public class CalciteParser { SqlParser parser = SqlParser.create(sql, config); return parser.parseStmt(); } catch (SqlParseException e) { - if (e.getMessage().contains("Encountered \"<EOF>\"")) { - throw new SqlParserEOFException(e.getMessage(), e); - } - throw new SqlParserException("SQL parse failed. " + e.getMessage(), e); + throw toStatementException(e); } } @@ -75,10 +72,7 @@ public class CalciteParser { SqlParser parser = SqlParser.create(sql, config); return parser.parseStmtList(); } catch (SqlParseException e) { - if (e.getMessage().contains("Encountered \"<EOF>\"")) { - throw new SqlParserEOFException(e.getMessage(), e); - } - throw new SqlParserException("SQL parse failed. " + e.getMessage(), e); + throw toStatementException(e); } } @@ -94,7 +88,7 @@ public class CalciteParser { final SqlParser parser = SqlParser.create(sqlExpression, config); return parser.parseExpression(); } catch (SqlParseException e) { - throw new SqlParserException("SQL parse failed. " + e.getMessage(), e); + throw toParserException(e); } } @@ -120,6 +114,24 @@ public class CalciteParser { } } + /** + * Converts a parse error of a statement. An error at the end of the input means the statement + * is incomplete, which callers such as the SQL client use to keep reading. + */ + private static SqlParserException toStatementException(SqlParseException e) { + final String message = e.getMessage(); + if (message != null && message.contains("Encountered \"<EOF>\"")) { + return new SqlParserEOFException(message, e); + } + return toParserException(e); + } + + private static SqlParserException toParserException(SqlParseException e) { + final String message = e.getMessage(); + return new SqlParserException( + message == null ? "SQL parse failed." : "SQL parse failed. " + message, e); + } + /** * Equivalent to {@link SqlParser#create(Reader, SqlParser.Config)}. The only difference is we * do not wrap the {@link FlinkSqlParserImpl} with {@link SqlParser}.
