private static List merge()

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