[
https://issues.apache.org/jira/browse/IMPALA-12770?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17813857#comment-17813857
]
ASF subversion and git services commented on IMPALA-12770:
----------------------------------------------------------
Commit 3c93437b7a6191a9ca1ef3acc740fefd2ae54bcf in impala's branch
refs/heads/master from wzhou-code
[ https://gitbox.apache.org/repos/asf?p=impala.git;h=3c93437b7 ]
IMPALA-12770: Fix infinite loop for nested Case expressions
ExprRewriter enter infinite loop when run following query with
nested Case expressions:
select
case
case ''
when 'abc' then t4.string_col
end
when 'none' then 'Total'
end
as fcol from functional.alltypes as t4 limit 1;
The 'case' expr is set as literal NULL expression for outer case
expression since all 'when' expr are false in inner case expression.
This causes function SimplifyConditionalsRule.simplifyCaseExpr() to
be called recusively and enter infinite loop.
This patch fixes the issue by not rewriting a case expression if 'case'
expr is literal NULL expression.
Testing:
- Manually ran above query successfully.
- Added new test cases in ExprRewriteRulesTest.testCaseWithExpr.
- Passed core-tests.
Change-Id: Iaea1b3a35967f92b3e4f3445a378ed58adaa7da5
Reviewed-on: http://gerrit.cloudera.org:8080/20982
Reviewed-by: Impala Public Jenkins <[email protected]>
Tested-by: Impala Public Jenkins <[email protected]>
> ExprRewriter enter infinite loop for nested Case expressions
> ------------------------------------------------------------
>
> Key: IMPALA-12770
> URL: https://issues.apache.org/jira/browse/IMPALA-12770
> Project: IMPALA
> Issue Type: Bug
> Components: Frontend
> Reporter: Wenzhe Zhou
> Assignee: Wenzhe Zhou
> Priority: Major
>
> ExprRewriter enter infinite loop when run following query with nested Case
> statement:
> {code:java}
> select
> case
> case ''
> when 'abc' then t4.string_col
> end
> when 'none' then 'Total'
> end
> as fcol from functional.alltypes as t4 limit 1;
> {code}
> jstack shows Impala enter infinite loop in ExprRewriter functions:
> {code:java}
> "Thread-16" #39 prio=5 os_prio=0 tid=0x000000000e188000 nid=0x90ec8 runnable
> [0x00007fa8b3d23000]
> java.lang.Thread.State: RUNNABLE
> at org.apache.impala.service.FeSupport.NativeEvalExprsWithoutRow(Native
> Method)
> at
> org.apache.impala.service.FeSupport.EvalExprsWithoutRowBounded(FeSupport.java:261)
> at
> org.apache.impala.service.FeSupport.EvalExprWithoutRowBounded(FeSupport.java:205)
> at
> org.apache.impala.analysis.LiteralExpr.createBounded(LiteralExpr.java:214)
> at
> org.apache.impala.rewrite.FoldConstantsRule.apply(FoldConstantsRule.java:68)
> at
> org.apache.impala.rewrite.ExprRewriter.applyRuleBottomUp(ExprRewriter.java:85)
> at
> org.apache.impala.rewrite.ExprRewriter.applyRuleRepeatedly(ExprRewriter.java:71)
> at org.apache.impala.rewrite.ExprRewriter.rewrite(ExprRewriter.java:55)
> at
> org.apache.impala.rewrite.SimplifyConditionalsRule.simplifyCaseExpr(SimplifyConditionalsRule.java:240)
> at
> org.apache.impala.rewrite.SimplifyConditionalsRule.apply(SimplifyConditionalsRule.java:71)
> at
> org.apache.impala.rewrite.ExprRewriter.applyRuleBottomUp(ExprRewriter.java:85)
> at
> org.apache.impala.rewrite.ExprRewriter.applyRuleRepeatedly(ExprRewriter.java:71)
> at org.apache.impala.rewrite.ExprRewriter.rewrite(ExprRewriter.java:55)
> at org.apache.impala.analysis.SelectList.rewriteExprs(SelectList.java:100)
> at
> org.apache.impala.analysis.SelectStmt.rewriteExprs(SelectStmt.java:1517)
> at
> org.apache.impala.analysis.AnalysisContext.analyze(AnalysisContext.java:585)
> at
> org.apache.impala.analysis.AnalysisContext.analyzeAndAuthorize(AnalysisContext.java:492)
> at
> org.apache.impala.service.Frontend.doCreateExecRequest(Frontend.java:2397)
> at org.apache.impala.service.Frontend.getTExecRequest(Frontend.java:2144)
> at
> org.apache.impala.service.Frontend.createExecRequest(Frontend.java:1913)
> at
> org.apache.impala.service.JniFrontend.createExecRequest(JniFrontend.java:169)
> {code}
> The issue does not happen if a matching value is found for the inner 'case'
> statement, or adding 'else' for the inner 'case' statement.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]