public CompiledResult compile()

in backend/engine/src/main/java/com/epam/deltix/quantgrid/engine/compiler/CompileFunction.java [99:167]


    public CompiledResult compile(CompileContext context) {
        String name = context.functionName();
        if (UNARY_FUNCTIONS.contains(name)) {
            return compileUnaryFunction(name, context);
        }

        if (BINARY_FUNCTIONS.contains(name)) {
            return compileBinaryFunction(name, context);
        }

        if (TERNARY_FUNCTIONS.contains(name)) {
            return compileTernaryFunction(name, context);
        }

        ParsedPython.Function function = context.pythonFunction(name);
        if (function != null) {
            return CompilePython.compile(context, function);
        }

        return switch (name) {
            case "UnaryOperator" -> compileUnaryOperator(context,
                    ((UnaryOperator) context.function()).operation());
            case "BinaryOperator" -> compileBinaryOperator(context,
                    ((BinaryOperator) context.function()).operation());
            case "POW" -> compileBinaryOperator(context, BinaryOperation.POW);
            case "ROW" -> compileRow(context);
            case "PERIODSERIES" -> compilePeriodSeries(context);
            case "EXTRAPOLATE" -> compileExtrapolate(context);
            case "PERCENTCHANGE" -> compilePercentChange(context);
            case "RANGE" -> compileRange(context);
            case "FILTER" -> compileFilter(context);
            case "RowReference" -> compileRowReference(context);
            case "FIND" -> compileFind(context);
            case "UNIQUE" -> compileUnique(context);
            case "UNIQUEBY" -> compileUniqueBy(context);
            case "SORT" -> compileSort(context);
            case "SORTBY" -> compileSortBy(context);
            case "COUNT" -> compileCount(context);
            case "SUM", "AVERAGE", "MAX", "MIN", "STDEVS", "STDEVP", "GEOMEAN", "MEDIAN" ->
                    compileDoubleAggregation(name, context);
            case "MINBY", "MAXBY" -> compileRowAggregationByDouble(name, context);
            case "FIRST", "LAST", "SINGLE" -> (context.argumentCount() == 1)
                    ? compileFirstLastSingle(name, context)
                    : compileFirstsLasts(name, context);
            case "INDEX" -> compileIndex(context);
            case "INPUT" -> compileInput(context);
            case "PIVOT" -> CompilePivot.compile(context);
            case "UNPIVOT" -> CompileUnpivot.compile(context);
            case "FIELDS" -> compileFields(context);
            case "CONCAT", "CONCATENATE" -> compileConcatenate(context);
            case "TEXT" -> compileText(context);
            case "IF" -> compileIf(context);
            case "IFNA" -> compileIfNa(context);
            case "MODE" -> compileMode(context);
            case "CORREL" -> compileCorrelation(context);
            case "PI" -> compilePi();
            case "SPLIT" -> compileSplit(context);
            case "DATERANGE" -> compileDateRange(context);
            case "LIST" -> compileList(context);
            case "TOTAL" -> compileTotal(context);
            case "EVALUATE_N" -> compileEvaluateN(context);
            case "EVALUATE_MODEL" -> compileEvaluateModel(context);
            case "RETRIEVE" -> compileRetrieve(context);
            case "RETRIEVE_SCORES" -> compileRetrieveScores(context);
            case "RETRIEVE_DESCRIPTIONS" -> compileRetrieveDescriptions(context);
            case "RECALL" -> compileRecall(context);
            default -> throw new CompileError("Unsupported function: " + name);
        };
    }