@Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append(genericUDF.getClass().getSimpleName());
    if (genericUDF instanceof GenericUDFBridge) {
      GenericUDFBridge genericUDFBridge = (GenericUDFBridge) genericUDF;
      sb.append(" ==> ");
      String udfName = genericUDFBridge.getUdfName();
      Class<? extends UDF> udfClass = genericUDFBridge.getUdfClass();
      sb.append(udfName != null ? udfName : (udfClass != null ? udfClass.getSimpleName() : "null"));
      sb.append(" ");
    }
    sb.append("(");
    if (children != null) {
      for (int i = 0; i < children.size(); i++) {
        if (i > 0) {
          sb.append(", ");
        }
        sb.append(children.get(i));
      }
    }
    sb.append(")");
    return sb.toString();
  }
This class uses a writableObjectInspector rather than a TypeInfo to store
the canonical type information for this NodeDesc.
ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeGenericFuncDesc.java