[
https://issues.apache.org/jira/browse/SPARK-55005?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Milan Dankovic updated SPARK-55005:
-----------------------------------
Description:
In the example below, after continue handler is executed, the whole loop will
be skipped instead of continuing with iteration. The bug was introduced in this
PR: [https://github.com/apache/spark/pull/52371], because the
interruptConditionalStatements method in SqlScriptingExecution.scala was
designed to skip conditional statements when exceptions occurred in their
condition evaluation (e.g., WHILE 1/0 > 0). However, it didn't distinguish
between:
* Exception in condition → loop should be skipped
* Exception in body → loop should continue iteration
{code:java}
BEGIN
-- Multi-variable declaration (New in 4.1)
DECLARE x, y = 1;
-- Define error handling logic
DECLARE CONTINUE HANDLER FOR DIVIDE_BY_ZERO
BEGIN
SET y = -1;
END;
-- Loop logic
WHILE x < 8 DO
SET x = x + 1;
-- This might throw a divide-by-zero error, but the handler will catch it
SET y = y / (x - 3);
END WHILE;
SELECT x, y;
END;
{code}
was:
In the example below, after continue handler is executed, the whole loop will
be skipped instead of continuing with iteration. The bug was introduced in this
PR: [https://github.com/apache/spark/pull/52371], because the
interruptConditionalStatements method in SqlScriptingExecution.scala was
designed to skip conditional statements when exceptions occurred in their
condition evaluation (e.g., WHILE 1/0 > 0). However, it didn't distinguish
between:
* Exception in condition → loop should be skipped
* Exception in body → loop should continue iteration
{code:java}
BEGIN
-- Multi-variable declaration (New in 4.1)
DECLARE x, y = 1;
-- Define error handling logic
DECLARE CONTINUE HANDLER FOR DIVIDE_BY_ZERO
BEGIN
SET y = -1;
END;
-- Loop logic
WHILE x < 8 DO
SET x = x + 1;
-- This might throw a divide-by-zero error, but the handler will catch it
SET y = y / (x - 3);
END WHILE;
SELECT x, y;
END;
{code}
> CONTINUE handler not working properly when exception occurs inside loops
> ------------------------------------------------------------------------
>
> Key: SPARK-55005
> URL: https://issues.apache.org/jira/browse/SPARK-55005
> Project: Spark
> Issue Type: Sub-task
> Components: Spark Core
> Affects Versions: 4.2.0
> Reporter: Milan Dankovic
> Priority: Major
>
> In the example below, after continue handler is executed, the whole loop will
> be skipped instead of continuing with iteration. The bug was introduced in
> this PR: [https://github.com/apache/spark/pull/52371], because the
> interruptConditionalStatements method in SqlScriptingExecution.scala was
> designed to skip conditional statements when exceptions occurred in their
> condition evaluation (e.g., WHILE 1/0 > 0). However, it didn't distinguish
> between:
> * Exception in condition → loop should be skipped
> * Exception in body → loop should continue iteration
> {code:java}
> BEGIN
> -- Multi-variable declaration (New in 4.1)
> DECLARE x, y = 1;
>
> -- Define error handling logic
> DECLARE CONTINUE HANDLER FOR DIVIDE_BY_ZERO
> BEGIN
> SET y = -1;
> END;
> -- Loop logic
> WHILE x < 8 DO
> SET x = x + 1;
> -- This might throw a divide-by-zero error, but the handler will catch it
> SET y = y / (x - 3);
> END WHILE;
> SELECT x, y;
> END;
> {code}
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]