/** * TODO: explain */ private ImmutableMap<Integer, VariableRenaming> generateRenamingMap(DataNode focusNode, ImmutableList<Integer> indexes, IntermediateQuery query) throws InvalidQueryOptimizationProposalException { ImmutableMap.Builder<Integer, VariableRenaming> mapBuilder = ImmutableMap.builder(); ImmutableList<? extends VariableOrGroundTerm> arguments = focusNode.getProjectionAtom().getArguments(); for (Integer index : indexes) { VariableOrGroundTerm argument = arguments.get(index); if (argument instanceof Variable) { Variable formerVariable = (Variable) argument; Variable newVariable = query.generateNewVariable(formerVariable); mapBuilder.put(index, new VariableRenaming(formerVariable, newVariable)); } else { throw new InvalidQueryOptimizationProposalException("The argument at the index "+ index + " is not a variable!"); } } return mapBuilder.build(); }
return Optional.of(query.generateNewVariable((Variable) firstValue)); return Optional.of(query.generateNewVariable((Variable) secondValue));
private PairExtraction extractPairs(DataNode dataNode, IntermediateQuery query) throws InvalidQueryOptimizationProposalException { ImmutableList.Builder<VariableGroundTermPair> pairBuilder = ImmutableList.builder(); ImmutableList.Builder<VariableOrGroundTerm> newArgumentBuilder = ImmutableList.builder(); for (VariableOrGroundTerm argument : dataNode.getProjectionAtom().getArguments()) { if (argument.isGround()) { Variable newVariable = query.generateNewVariable(); pairBuilder.add(new VariableGroundTermPair(newVariable, (GroundTerm) argument)); newArgumentBuilder.add(newVariable); } /** * Variable */ else { newArgumentBuilder.add(argument); } } ImmutableList<VariableGroundTermPair> pairs = pairBuilder.build(); if (pairs.isEmpty()) { throw new InvalidQueryOptimizationProposalException("The data node " + dataNode + " does not have" + "ground terms"); } else { DataNode newDataNode = generateDataNode(dataNode, newArgumentBuilder.build()); return new PairExtraction(pairs, newDataNode); } }
.map(v -> new AbstractMap.SimpleEntry<>(v, query.generateNewVariable(v))) .collect(ImmutableCollectors.toMap());