/** * TODO: explain * */ @Override protected Optional<PredicateLevelProposal> proposePerPredicate(InnerJoinNode joinNode, ImmutableCollection<DataNode> initialNodes, AtomPredicate predicate, DBMetadata dbMetadata, ImmutableList<Variable> priorityVariables, IntermediateQuery query) throws AtomUnificationException { ImmutableMultimap<AtomPredicate, ImmutableList<Integer>> uniqueConstraints = dbMetadata.getUniqueConstraints(); if (uniqueConstraints.containsKey(predicate)) { ImmutableMultimap<ImmutableList<VariableOrGroundTerm>, DataNode> groupingMap = groupByUniqueConstraintArguments( initialNodes, uniqueConstraints.get(predicate)); return Optional.of(proposeForGroupingMap(groupingMap)); } else { return Optional.empty(); } }
/** * TODO: explain * */ @Override protected Optional<PredicateLevelProposal> proposePerPredicate(InnerJoinNode joinNode, ImmutableCollection<ExtensionalDataNode> initialNodes, RelationPredicate predicate, DBMetadata dbMetadata, ImmutableList<Variable> priorityVariables, IntermediateQuery query) throws AtomUnificationException { ImmutableMultimap<RelationPredicate, ImmutableList<Integer>> uniqueConstraints = dbMetadata.getUniqueConstraints(); if (uniqueConstraints.containsKey(predicate)) { ImmutableMultimap<ImmutableList<VariableOrGroundTerm>, ExtensionalDataNode> groupingMap = groupByUniqueConstraintArguments( initialNodes, uniqueConstraints.get(predicate)); return Optional.of(proposeForGroupingMap(groupingMap)); } else { return Optional.empty(); } }