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);
};
}