@Override
  public String toString(boolean isRoot) {
    StringBuilder result = new StringBuilder(this.functionName);
    int keyValueSize = this.functionAttributesKeyValueList.size();

    result.append("(");
    for (int i = 0; i < this.expressions.size(); i++) {
      result.append(this.expressions.get(i).toString());
      if (i + 1 >= this.expressions.size()) {
        break;
      }
      result.append(", ");
    }

    if (this.functionAttributesKeyValueList.size() > 1) {
      if (!this.expressions.isEmpty()) {
        result.append(", ");
      }

      for (int i = 0; i + 1 < keyValueSize; i += 2) {
        result
            .append(this.functionAttributesKeyValueList.get(i))
            .append("=")
            .append(this.functionAttributesKeyValueList.get(i + 1));
        if (i + 2 >= keyValueSize) {
          break;
        }
        result.append(", ");
      }
    }

    result.append(")");
    return result.toString();
  }
example: select udf(a, b, udf(c)) from root.sg.d;

<p>3 expressions [root.sg.d.a, root.sg.d.b, udf(root.sg.d.c)] will be in this field.
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/view/viewExpression/multi/FunctionViewExpression.java