[
https://issues.apache.org/jira/browse/SPARK-60075?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Anurag Mantripragada updated SPARK-60075:
-----------------------------------------
Description:
SPARK-59983 fixed the StackOverflowError in toString of a
{{GeneralScalarExpression}} with an unknown name. One case remains. A connector
PartitionPredicate that overrides neither toString nor describe still recurses:
{{V2ExpressionSQLBuilder.visitPartitionPredicate}} returns describe(), which
defaults to ExpressionWithToString.toString, which calls build again, until a
StackOverflowError.
A parent such as Not, And or Cast wrapping such a predicate, or a pushdown
builder that reaches it, recurses the same way. Spark's own
PartitionPredicateImpl overrides toString, so built-in code paths are not
affected.
SPARK-34586 (https://github.com/apache/spark/pull/58153) works around it for
DESCRIBE TABLE EXTENDED of a declared write ordering.
was:
V2ExpressionSQLBuilder.visitUnexpectedExpr builds its UNEXPECTED_V2_EXPRESSION
error with String.valueOf(expr). For an ExpressionWithToString (for example a
GeneralScalarExpression whose name the builder does not know, such as new
GeneralScalarExpression("DATE_TRUNC", ...)), toString() calls
ToStringSQLBuilder.build, which reaches visitUnexpectedExpr again, so
toString() recurses until StackOverflowError instead of producing a string or a
clean error.
Anything that prints such an expression is affected: describe(), log messages,
error messages and explain output. SPARK-34586
(https://github.com/apache/spark/pull/58153) works around it for DESCRIBE TABLE
EXTENDED of a declared write ordering.
visitUnexpectedExpr should describe the expression without calling its
toString(), for example by its class name and the name of a
GeneralScalarExpression.
> Avoid infinite recursion in toString of a V2 expression that
> V2ExpressionSQLBuilder does not know
> -------------------------------------------------------------------------------------------------
>
> Key: SPARK-60075
> URL: https://issues.apache.org/jira/browse/SPARK-60075
> Project: Spark
> Issue Type: Bug
> Components: SQL
> Affects Versions: 5.0.0
> Reporter: Anurag Mantripragada
> Priority: Major
>
> SPARK-59983 fixed the StackOverflowError in toString of a
> {{GeneralScalarExpression}} with an unknown name. One case remains. A
> connector PartitionPredicate that overrides neither toString nor describe
> still recurses: {{V2ExpressionSQLBuilder.visitPartitionPredicate}} returns
> describe(), which defaults to ExpressionWithToString.toString, which calls
> build again, until a StackOverflowError.
> A parent such as Not, And or Cast wrapping such a predicate, or a pushdown
> builder that reaches it, recurses the same way. Spark's own
> PartitionPredicateImpl overrides toString, so built-in code paths are not
> affected.
> SPARK-34586 (https://github.com/apache/spark/pull/58153) works around it for
> DESCRIBE TABLE EXTENDED of a declared write ordering.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]