You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues-all@impala.apache.org by "Paul Rogers (JIRA)" <ji...@apache.org> on 2018/10/29 20:28:08 UTC

[jira] [Created] (IMPALA-7781) Clean up ad-hoc instance of, casts to use predicates in expr rewriter

Paul Rogers created IMPALA-7781:
-----------------------------------

             Summary: Clean up ad-hoc instance of, casts to use predicates in expr rewriter
                 Key: IMPALA-7781
                 URL: https://issues.apache.org/jira/browse/IMPALA-7781
             Project: IMPALA
          Issue Type: Bug
          Components: Frontend
    Affects Versions: Impala 3.0
            Reporter: Paul Rogers


The expression rewriter rules have evolved over time, it seems. When originally written, it seem that the standard way to check if an expression is a null literal is to do an {{instance of}} as in {{SimplifyConditionalsRule}}:

{code:java}
  private Expr simplifyCaseExpr(CaseExpr expr, Analyzer analyzer)
      throws AnalysisException {
    ...
      if (child instanceof NullLiteral) continue;
{code}

Since this was written, we added {{Expr.isNullLiteral()}} which not only checks if the expression is null, it also tests for the {{CAST(NULL AS <type>)}} form created by the constant folding rule.

The result is that rewrites miss optimization cases for expressions such as {{NULL + 1}} which are rewritten to {{CASE(NULL AS INT)}}. (IMPALA-7769).

Code also does manual casts to Boolean literals in the same function:

{code:java}
      if (whenExpr instanceof BoolLiteral) {
        if (((BoolLiteral) whenExpr).getValue()) {
{code}

Which can be replaced with the {{Expr.IS_TRUE_LITERAL}} predicate. Same is true for the {{FALSE}} check.

Finally, there are places in the rewriter that check {{isLiteral()}} when it wants to know a more generic "is near literal". Consider the {{CAST(NULL...)}} issue above. The {{CAST}} is not a literal, but it acts like one in some cases (such as in the constant folding rule itself, IMPALA-7769.)

In short, a number of minor, obscure errors could be avoided if we made consistent use of the higher-level predicates already available.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-all-unsubscribe@impala.apache.org
For additional commands, e-mail: issues-all-help@impala.apache.org