cloud-fan commented on code in PR #58530:
URL: https://github.com/apache/spark/pull/58530#discussion_r3997080255


##########
sql/api/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseParser.g4:
##########
@@ -87,6 +89,181 @@ compoundOrSingleStatement
     | singleCompoundStatement
     ;
 
+// Boundary-only grammar for parse_sql batches. Leaf statements deliberately 
accept arbitrary
+// tokens: ParseSqlResult parses each emitted segment with the full grammar 
and records any error.
+// BEGIN is excluded from the terminated fallback, so only a grammar context 
can own the
+// semicolons inside a compound statement. BEGIN and END remain unrestricted 
inside leaf
+// statements. The caller appends PARSE_SQL_BATCH_DELIMITER; the trailing 
BEGIN fallback consumes
+// a structurally unclosed compound through that token without synthesizing an 
END token.
+parseSqlBatch
+    : SEMICOLON* (items+=parseSqlBatchItem SEMICOLON*)*
+      PARSE_SQL_BATCH_DELIMITER? EOF
+    ;
+
+parseSqlBatchItem
+    : batchStatement=parseSqlBatchStatement
+      terminator=(SEMICOLON | PARSE_SQL_BATCH_DELIMITER)
+    | partialStatement=parseSqlBatchPartialCompoundStatement
+      terminator=PARSE_SQL_BATCH_DELIMITER
+    ;
+
+parseSqlBatchStatement
+    : parseSqlBatchCompoundStatement
+    | parseSqlBatchMalformedEmptyCompoundBlock
+    | parseSqlBatchMalformedBeginStatement
+    | parseSqlBatchLeafStatement
+    ;
+
+parseSqlBatchMalformedBeginStatement
+    : BEGIN
+    ;
+
+parseSqlBatchPartialCompoundStatement
+    : BEGIN .*?
+    ;
+
+parseSqlBatchCompoundStatement
+    : BEGIN (NOT ATOMIC)? parseSqlBatchCompoundBody? END
+    ;
+
+parseSqlBatchBeginEndCompoundBlock
+    : beginLabel? BEGIN (NOT ATOMIC)? parseSqlBatchCompoundBody? END endLabel?
+    ;
+
+parseSqlBatchMalformedEmptyCompoundBlock
+    : beginLabel? BEGIN (NOT ATOMIC)? SEMICOLON END endLabel?
+    ;
+
+parseSqlBatchMalformedBodyBeginStatement
+    : BEGIN (~(SEMICOLON | PARSE_SQL_BATCH_DELIMITER))+
+    ;
+
+parseSqlBatchCompoundBody
+    : (parseSqlBatchCompoundBodyStatement SEMICOLON)+
+    ;
+
+parseSqlBatchCompoundBodyStatement
+    : parseSqlBatchNestedStatement
+    | parseSqlBatchOrphanControlEndStatement
+    | parseSqlBatchBodyLeafStatement
+    ;
+
+parseSqlBatchNestedStatement
+    : parseSqlBatchBeginEndCompoundBlock
+    | parseSqlBatchMalformedEmptyCompoundBlock
+    | parseSqlBatchDeclareHandlerStatement
+    | parseSqlBatchIfElseStatement
+    | parseSqlBatchCaseStatement
+    | parseSqlBatchWhileStatement
+    | parseSqlBatchRepeatStatement
+    | parseSqlBatchLoopStatement
+    | parseSqlBatchForStatement
+    | parseSqlBatchMalformedBodyBeginStatement
+    | parseSqlBatchMalformedBeginStatement
+    ;
+
+parseSqlBatchOrphanControlEndStatement
+    : END (IF | WHILE | LOOP | REPEAT | FOR | CASE)
+    ;
+
+parseSqlBatchDeclareHandlerStatement
+    : DECLARE (CONTINUE | EXIT) HANDLER FOR conditionValues
+      (parseSqlBatchBeginEndCompoundBlock
+      | parseSqlBatchMalformedEmptyCompoundBlock
+      | parseSqlBatchMalformedBodyBeginStatement
+      | parseSqlBatchBodyLeafStatement)
+    ;
+
+parseSqlBatchWhileStatement
+    : beginLabel? WHILE booleanExpression DO parseSqlBatchCompoundBody

Review Comment:
   Confirmed in the pinned head: the private parse_sql batch grammar is gone, 
and the positioned shared splitter again applies the existing 
variable-validation preprocessor. This loop-header boundary issue no longer 
applies.
   
   <!-- SPARK_DEV_REVIEW_REPLY 
{"feedback_id":"inline:3991356396","thread_id":"inline:3991356396","verdict_sha256":"ace3cf980ffacf956b901afa034b97ca7849c7146998efc98acccb717b5f58a1"}
 -->



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to