@Override
  public boolean isSame(Object o) {
    if (!(o instanceof ExprNodeGenericFuncDesc)) {
      return false;
    }
    ExprNodeGenericFuncDesc dest = (ExprNodeGenericFuncDesc) o;
    if (!typeInfo.equals(dest.getTypeInfo())
        || !genericUDF.getClass().equals(dest.getGenericUDF().getClass())) {
      return false;
    }

    if (genericUDF instanceof GenericUDFBridge) {
      GenericUDFBridge bridge = (GenericUDFBridge) genericUDF;
      GenericUDFBridge bridge2 = (GenericUDFBridge) dest.getGenericUDF();
      if (!bridge.getUdfClassName().equals(bridge2.getUdfClassName())
          || !bridge.getUdfName().equals(bridge2.getUdfName())
          || bridge.isOperator() != bridge2.isOperator()) {
        return false;
      }
    }

    if (genericUDF instanceof GenericUDFMacro) {
      // if getMacroName is null, we always treat it different from others.
      if (((GenericUDFMacro) genericUDF).getMacroName() == null
          || !(((GenericUDFMacro) genericUDF).getMacroName()
              .equals(((GenericUDFMacro) dest.genericUDF).getMacroName()))) {
        return false;
      }
    }

    if (children.size() != dest.getChildren().size()) {
      return false;
    }

    for (int pos = 0; pos < children.size(); pos++) {
      if (!children.get(pos).isSame(dest.getChildren().get(pos))) {
        return false;
      }
    }

    return true;
  }
Create a ExprNodeGenericFuncDesc based on the genericUDFClass and the
children parameters. If the function has an explicit name, the
newInstance method should be passed the function name in the funcText
argument.

@throws UDFArgumentException
ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeGenericFuncDesc.java