Uploaded image for project: 'IMPALA'
  1. IMPALA
  2. IMPALA-12770

ExprRewriter enter infinite loop for nested Case expressions

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • Impala 4.4.0
    • Frontend
    • None
    • ghx-label-7

    Description

      ExprRewriter enter infinite loop when run following query with nested Case statement:

      select 
        case
          case ''
            when 'abc' then t4.string_col
          end
          when 'none' then 'Total'
        end
      as fcol from functional.alltypes as t4 limit 1;
      

      jstack shows Impala enter infinite loop in ExprRewriter functions:

      "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)
      

      The issue does not happen if a matching value is found for the inner 'case' statement, or adding 'else' for the inner 'case' statement.

      Attachments

        Activity

          People

            wzhou Wenzhe Zhou
            wzhou Wenzhe Zhou
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: