private static void getNestedColsFromExprNodeDesc(
    ExprNodeDesc desc,
    FieldNode pathToRoot,
    List<FieldNode> paths) {
    if (desc instanceof ExprNodeColumnDesc) {
      ExprNodeColumnDesc columnDesc = (ExprNodeColumnDesc) desc;
      FieldNode p = new FieldNode(columnDesc.getColumn());
      checkListAndMap(columnDesc, pathToRoot, p);
      paths.add(p);
    } else if (desc instanceof ExprNodeFieldDesc) {
      ExprNodeFieldDesc fieldDesc = (ExprNodeFieldDesc) desc;
      ExprNodeDesc childDesc = fieldDesc.getDesc();
      FieldNode p = new FieldNode(fieldDesc.getFieldName());
      checkListAndMap(fieldDesc, pathToRoot, p);
      getNestedColsFromExprNodeDesc(childDesc, p, paths);
    } else {
      List<ExprNodeDesc> children = desc.getChildren();
      if (children != null) {
        for (ExprNodeDesc c : children) {
          getNestedColsFromExprNodeDesc(c, pathToRoot, paths);
        }
      }
    }
  }
Given the 'desc', construct a list of field nodes representing the
nested columns paths referenced by this 'desc'.
@param desc the node descriptor
@return a list of nested column paths referenced in the 'desc'
ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcCtx.java