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}.

Reply via email to