private static String formatFrameBound(FrameBound frameBound) {
    switch (frameBound.getType()) {
      case UNBOUNDED_PRECEDING:
        return "UNBOUNDED PRECEDING";
      case PRECEDING:
        return formatExpression(frameBound.getValue().get()) + " PRECEDING";
      case CURRENT_ROW:
        return "CURRENT ROW";
      case FOLLOWING:
        return formatExpression(frameBound.getValue().get()) + " FOLLOWING";
      case UNBOUNDED_FOLLOWING:
        return "UNBOUNDED FOLLOWING";
      default:
        throw new IllegalArgumentException("Unsupported frame type: " + frameBound.getType());
    }
  }
Returns the formatted `LISTAGG` function call corresponding to the specified node.

<p>During the parsing of the syntax tree, the `LISTAGG` expression is synthetically converted
to a function call. This method formats the specified {@link FunctionCall} node to correspond
to the standardised syntax of the `LISTAGG` expression.

@param node the `LISTAGG` function call
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/util/ExpressionFormatter.java