public static void appendAttributes(
      boolean hasExpression, StringBuilder builder, Map<String, String> functionAttributes) {
    if (hasExpression) {
      builder.append(", ");
    }
    Iterator<Entry<String, String>> iterator = functionAttributes.entrySet().iterator();
    Entry<String, String> entry = iterator.next();
    builder
        .append("\"")
        .append(entry.getKey())
        .append("\"=\"")
        .append(entry.getValue())
        .append("\"");
    while (iterator.hasNext()) {
      entry = iterator.next();
      builder
          .append(", ")
          .append("\"")
          .append(entry.getKey())
          .append("\"=\"")
          .append(entry.getValue())
          .append("\"");
    }
  }
Generates the parameter part of the function column name.

<p>Example:

<p>Full column name -> udf(root.sg.d.s1, sin(root.sg.d.s1), 'key1'='value1', 'key2'='value2')

<p>The parameter part -> root.sg.d.s1, sin(root.sg.d.s1), 'key1'='value1', 'key2'='value2'
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/multi/FunctionExpression.java