@Override public ImmutableSet<Variable> getLocalVariables() { if (optionalFilterCondition.isPresent()) { return optionalFilterCondition.get().getVariables(); } else { return ImmutableSet.of(); } }
@Override public ImmutableSet<Variable> getLocalVariables() { if (optionalFilterCondition.isPresent()) { return optionalFilterCondition.get().getVariables(); } else { return ImmutableSet.of(); } }
private Optional<ExplicitVariableProjectionNode> getProjectorReplacementNode(ExplicitVariableProjectionNode replacedNode, ImmutableExpression expressionToPropagate) { if (expressionToPropagate.getVariables().size() == 0) { return Optional.empty(); } ImmutableSet.Builder<Variable> allProjectedVariablesBuilder = ImmutableSet.builder(); allProjectedVariablesBuilder.addAll(replacedNode.getVariables()); allProjectedVariablesBuilder.addAll(expressionToPropagate.getVariables()); if (replacedNode instanceof UnionNode) { return Optional.of(iqFactory.createUnionNode(allProjectedVariablesBuilder.build())); } if (replacedNode instanceof ConstructionNode) { return Optional.of(iqFactory.createConstructionNode(allProjectedVariablesBuilder.build(), ((ConstructionNode) replacedNode).getSubstitution())); } throw new IllegalStateException("Unsupported node type"); }
private Optional<ExplicitVariableProjectionNode> getProjectorReplacementNode(ExplicitVariableProjectionNode replacedNode, ImmutableExpression expressionToPropagate) { if (expressionToPropagate.getVariables().size() == 0) { return Optional.empty(); } ImmutableSet.Builder<Variable> allProjectedVariablesBuilder = ImmutableSet.builder(); allProjectedVariablesBuilder.addAll(replacedNode.getVariables()); allProjectedVariablesBuilder.addAll(expressionToPropagate.getVariables()); if (replacedNode instanceof UnionNode) { return Optional.of(iqFactory.createUnionNode(allProjectedVariablesBuilder.build())); } if (replacedNode instanceof ConstructionNode) { return Optional.of(iqFactory.createConstructionNode(allProjectedVariablesBuilder.build(), ((ConstructionNode) replacedNode).getSubstitution(), ((ConstructionNode) replacedNode).getOptionalModifiers())); } throw new IllegalStateException("Unsupported node type"); }
private ImmutableSet<Variable> updateRetainedVariables(JoinOrFilterNode joinOrFilterNode, IntermediateQuery query, ImmutableSet<Variable> allRetainedVariables) { /* Add all variables encountered in filtering or explicit joining conditions */ Set<Variable> joinOrFilterVariables = new HashSet<>(); Optional<ImmutableExpression> explicitJoiningCondition = joinOrFilterNode.getOptionalFilterCondition(); if (explicitJoiningCondition.isPresent()) { joinOrFilterVariables.addAll(explicitJoiningCondition.get().getVariables()); } /* Add all variables encountered in implicit joining conditions, i.e. projected out by at least two children subtrees of a JoinLikeNode */ Set<Variable> repeatedVariables = new HashSet<>(); if (joinOrFilterNode instanceof JoinLikeNode) { Set<Variable> encounteredVariables = new HashSet<>(); for (QueryNode child : query.getChildren(joinOrFilterNode)) { for (Variable v : query.getVariables(child)) { if (encounteredVariables.contains(v)) { repeatedVariables.add(v); } encounteredVariables.add(v); } } } joinOrFilterVariables.addAll(repeatedVariables); return ImmutableSet.copyOf(Sets.union(allRetainedVariables, joinOrFilterVariables)); }
private ImmutableSet<Variable> updateRetainedVariables(JoinOrFilterNode joinOrFilterNode, IntermediateQuery query, ImmutableSet<Variable> allRetainedVariables) { /** * Add all variables encountered in filtering or explicit joining conditions */ Set<Variable> joinOrFilterVariables = new HashSet<>(); Optional<ImmutableExpression> explicitJoiningCondition = joinOrFilterNode.getOptionalFilterCondition(); if (explicitJoiningCondition.isPresent()) { joinOrFilterVariables.addAll(explicitJoiningCondition.get().getVariables()); } /** * Add all variables encountered in implicit joining conditions, * i.e. projected out by at least two children subtrees of a JoinLikeNode */ Set<Variable> repeatedVariables = new HashSet<>(); if (joinOrFilterNode instanceof JoinLikeNode) { Set<Variable> encounteredVariables = new HashSet<>(); for (QueryNode child : query.getChildren(joinOrFilterNode)) { for (Variable v : query.getVariables(child)) { if (encounteredVariables.contains(v)) { repeatedVariables.add(v); } encounteredVariables.add(v); } } } joinOrFilterVariables.addAll(repeatedVariables); return ImmutableSet.copyOf(Sets.union(allRetainedVariables, joinOrFilterVariables)); }
ImmutableList.Builder<QueryNode> selectedSubtreeRootsBuilder = ImmutableList.builder(); ImmutableSet<Variable> expressionVariables = expression.getVariables(); for (QueryNode candidateSubtreeRoot : candidateSubtreeRoots) { ImmutableSet<Variable> projectedVariables = query.getVariables(candidateSubtreeRoot);
ImmutableSet<Variable> expressionVariables = expression.getVariables(); for (QueryNode candidateSubtreeRoot : candidateSubtreeRoots) { ImmutableSet<Variable> projectedVariables = query.getVariables(candidateSubtreeRoot);
/** * This methods only propagates down an expression e coming from a provider parent p of a LJ node n, * and not the joining condition of n. * <p> * e is not added to the joining condition of n, * but may be propagated down d irectly to the left subtree of n */ private Push findPushInLeftJoinRootedSubtree(IntermediateQuery query, ImmutableExpression expression, JoinOrFilterNode providerNode, LeftJoinNode currentNode) { QueryNode leftChild = query.getChild(currentNode, LEFT) .orElseThrow(() -> new MinorOntopInternalBugException("Was expecting a left child")); return query.getVariables(leftChild).containsAll(expression.getVariables()) ? new Push(new Recipient(leftChild), expression) : getProviderAsPush(providerNode, expression); }
if (expression.getVariables().isEmpty()) { return findRecipientsInTrueNodeRootedSubtree(query, providerNode, (TrueNode) subtreeRoot);