in java/ws-server/src/main/java/com/epam/deltix/tbwg/webapp/services/grafana/FunctionsServiceImpl.java [206:234]
private static List<SelectQuery.FieldArg> merge(List<SelectQuery.FieldArg> fieldArgs) {
List<SelectQuery.FieldArg> result = new ArrayList<>();
Map<String, List<SelectQuery.FunctionDef>> functions = new HashMap<>();
for (SelectQuery.FieldArg fieldArg : fieldArgs) {
if (fieldArg.getFunction() != null
&& (fieldArg.getFunction().getFieldArgs() == null || fieldArg.getFunction().getFieldArgs().isEmpty())
&& (fieldArg.getFunction().getResultFields() != null && !fieldArg.getFunction().getResultFields().isEmpty())) {
functions.computeIfAbsent(fieldArg.getFunction().getId(), key -> new ArrayList<>()).add(fieldArg.getFunction());
} else {
result.add(fieldArg);
}
}
functions.forEach((id, functionsList) -> {
SelectQuery.FieldArg fieldArg = new SelectQuery.FieldArg();
SelectQuery.FunctionDef functionDef = new SelectQuery.FunctionDef();
fieldArg.setFunction(functionDef);
functionDef.setId(id);
functionDef.setConstantArgs(new HashMap<>());
functionDef.setFieldArgs(Collections.emptyList());
functionDef.setGroupBy(functionsList.get(0).getGroupBy());
Map<String, String> resultFields = new HashMap<>();
for (SelectQuery.FunctionDef def : functionsList) {
resultFields.putAll(def.getResultFields());
}
functionDef.setResultFields(resultFields);
result.add(fieldArg);
});
return result;
}