[ 
https://issues.apache.org/jira/browse/HIVE-22570?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16992693#comment-16992693
 ] 

David Mollitor commented on HIVE-22570:
---------------------------------------

So, pretty easy...

There are only 7 calls to {{getCols}} and most all of them are passed to 
{{Utilities.mergeUniqElems}} which will handle the empty list just fine.  The 
other places check for 'null or empty' (I won't bother improving those now).

There are many more references to {{getChildren()}} however, the first few that 
I sampled don't even both to check for a 'null' return value, so they are at 
risk of a NPE, which is very common and why returning 'null' is generally a bad 
idea. For example:

{code}
  /**
   * Find the variable in the expression.
   * @param expr the expression to look in
   * @return the index of the variable or -1 if there is not exactly one
   *   variable.
   */
  private int findVariable(ExprNodeDesc expr) {
    int result = -1;
    List<ExprNodeDesc> children = expr.getChildren();
    for(int i = 0; i < children.size(); ++i) {
      ExprNodeDesc child = children.get(i);
      if (child instanceof ExprNodeColumnDesc) {
        // if we already found a variable, this isn't a sarg
        if (result != -1) {
          return -1;
        } else {
          result = i;
        }
      }
    }
    return result;
  }
{code}

I can do some follow-on work to tighten up the code (and to remove all of the 
'null' checks that do exist) in another ticket.

> Review of ExprNodeDesc.java
> ---------------------------
>
>                 Key: HIVE-22570
>                 URL: https://issues.apache.org/jira/browse/HIVE-22570
>             Project: Hive
>          Issue Type: Improvement
>            Reporter: David Mollitor
>            Assignee: David Mollitor
>            Priority: Minor
>         Attachments: HIVE-22570.1.patch
>
>




--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to