private void initializeFunctionType() {
    final String lowerCaseFunctionName = this.functionName.toLowerCase();
    if (BuiltinAggregationFunction.getNativeFunctionNames().contains(lowerCaseFunctionName)) {
      functionType = FunctionType.BUILT_IN_AGGREGATION_FUNCTION;
    } else if (BuiltinScalarFunction.getNativeFunctionNames().contains(lowerCaseFunctionName)) {
      functionType = FunctionType.BUILT_IN_SCALAR_FUNCTION;
    } else if (TreeUDFUtils.isUDAF(functionName)) {
      functionType = FunctionType.UDAF;
    } else {
      functionType = FunctionType.UDTF;
    }
  }
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/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/expression/multi/FunctionExpression.java