@Override public boolean isEquivalentTo(QueryNode queryNode) { return (queryNode instanceof InnerJoinNode) && getOptionalFilterCondition().equals(((InnerJoinNode) queryNode).getOptionalFilterCondition()); }
@Override public boolean isSyntacticallyEquivalentTo(QueryNode node) { return (node instanceof InnerJoinNode) && this.getOptionalFilterCondition().equals(((InnerJoinNode) node).getOptionalFilterCondition()); }
@Override public boolean isSyntacticallyEquivalentTo(QueryNode node) { return (node instanceof InnerJoinNode) && this.getOptionalFilterCondition().equals(((InnerJoinNode) node).getOptionalFilterCondition()); }
@Override public void visit(InnerJoinNode innerJoinNode) { if (query.getChildren(innerJoinNode).size() < 2) { throw new InvalidIntermediateQueryException("JOIN node " + innerJoinNode +" does not have at least 2 children.\n" + query); } innerJoinNode.getOptionalFilterCondition() .ifPresent(e -> checkExpression(innerJoinNode, e)); }
@Deprecated public static ImmutableList<ImmutableExpression> extractBooleanExpressionsFromJoins(InnerJoinNode topJoinNode, IntermediateQuery query) { Queue<InnerJoinNode> joinNodesToExplore = new LinkedList<>(); joinNodesToExplore.add(topJoinNode); ImmutableList.Builder<ImmutableExpression> exprListBuilder = ImmutableList.builder(); while (!joinNodesToExplore.isEmpty()) { InnerJoinNode joinNode = joinNodesToExplore.poll(); Optional<ImmutableExpression> optionalFilterCondition = joinNode.getOptionalFilterCondition(); if (optionalFilterCondition.isPresent()) { exprListBuilder.add(optionalFilterCondition.get()); } /** * Children: only considers the inner joins and the filter nodes. */ for (QueryNode child : query.getChildren(joinNode)) { if (child instanceof InnerJoinNode) { // Continues exploring joinNodesToExplore.add((InnerJoinNode)child); } else if (child instanceof FilterNode) { exprListBuilder.add(((FilterNode)child).getFilterCondition()); } } } return exprListBuilder.build(); }
@Deprecated public static ImmutableList<ImmutableExpression> extractBooleanExpressionsFromJoins(InnerJoinNode topJoinNode, IntermediateQuery query) { Queue<InnerJoinNode> joinNodesToExplore = new LinkedList<>(); joinNodesToExplore.add(topJoinNode); ImmutableList.Builder<ImmutableExpression> exprListBuilder = ImmutableList.builder(); while (!joinNodesToExplore.isEmpty()) { InnerJoinNode joinNode = joinNodesToExplore.poll(); Optional<ImmutableExpression> optionalFilterCondition = joinNode.getOptionalFilterCondition(); if (optionalFilterCondition.isPresent()) { exprListBuilder.add(optionalFilterCondition.get()); } /** * Children: only considers the inner joins and the filter nodes. */ for (QueryNode child : query.getChildren(joinNode)) { if (child instanceof InnerJoinNode) { // Continues exploring joinNodesToExplore.add((InnerJoinNode)child); } else if (child instanceof FilterNode) { exprListBuilder.add(((FilterNode)child).getFilterCondition()); } } } return exprListBuilder.build(); }
@Override public void visit(InnerJoinNode innerJoinNode) { if (query.getChildren(innerJoinNode).size() < 2) { throw new InvalidIntermediateQueryException("JOIN node " + innerJoinNode +" does not have at least 2 children.\n" + query); } innerJoinNode.getOptionalFilterCondition() .ifPresent(e -> checkExpression(innerJoinNode, e)); }
private IQTree liftInnerJoin(NaryIQTree queryTree, ImmutableList<IQTree> newChildren, VariableGenerator variableGenerator) { InnerJoinNode joinNode = (InnerJoinNode) queryTree.getRootNode(); NaryIQTree newQueryTree = newChildren.equals(queryTree.getChildren()) ? queryTree : iqFactory.createNaryIQTree(joinNode, newChildren); return extractCandidateVariables(queryTree, joinNode.getOptionalFilterCondition(), newChildren) .map(newQueryTree::liftIncompatibleDefinitions) .filter(t -> !t.equals(queryTree)) .findFirst() .orElse(newQueryTree) .liftBinding(variableGenerator); }
@Override public InnerJoinNode transform(InnerJoinNode innerJoinNode) { return iqFactory.createInnerJoinNode(renameOptionalBooleanExpression(innerJoinNode.getOptionalFilterCondition())); }
@Override public InnerJoinNode transform(InnerJoinNode innerJoinNode) { return iqFactory.createInnerJoinNode(renameOptionalBooleanExpression(innerJoinNode.getOptionalFilterCondition())); }
throw new IllegalStateException("All triple patterns of BGP have been eliminated by Sigma-LIDs"); case 1: if (rootNode.getOptionalFilterCondition().isPresent()) return iqFactory.createUnaryIQTree( iqFactory.createFilterNode(rootNode.getOptionalFilterCondition().get()), result.get(0)); else return result.get(0);
@Override public IQTree transformInnerJoin(IQTree tree, InnerJoinNode rootNode, ImmutableList<IQTree> children) { ImmutableList<ImmutableExpression> filterChildExpressions = getChildExpressions(children); if (filterChildExpressions.isEmpty()) return tree; return iqFactory.createNaryIQTree( iqFactory.createInnerJoinNode( Optional.of( updateJoinCondition( rootNode.getOptionalFilterCondition(), filterChildExpressions ))), children.stream() .map(this::trimRootFilter) .collect(ImmutableCollectors.toList()) ); }
boolean isNested) { List<Function> body = new ArrayList<>(); Optional<ImmutableExpression> filter = node.getOptionalFilterCondition(); List<Function> atoms = new ArrayList<>(); List<QueryNode> listnode = te.getChildren(node);
boolean isNested) { List<Function> body = new ArrayList<>(); Optional<ImmutableExpression> filter = node.getOptionalFilterCondition(); List<Function> atoms = new ArrayList<>(); List<IQTree> listnode = tree.getChildren();
QueryNode replacingChild = query.getFirstChild(joinNode).get(); if (joinNode.getOptionalFilterCondition().isPresent()) { FilterNode newFilterNode = iqFactory.createFilterNode(joinNode.getOptionalFilterCondition().get()); treeComponent.replaceNode(joinNode, newFilterNode);
QueryNode replacingChild = query.getFirstChild(joinNode).get(); if (joinNode.getOptionalFilterCondition().isPresent()) { FilterNode newFilterNode = iqFactory.createFilterNode(joinNode.getOptionalFilterCondition().get()); treeComponent.replaceNode(joinNode, newFilterNode);
@Override public IQTree transformInnerJoin(IQTree tree, InnerJoinNode rootNode, ImmutableList<IQTree> children) { ImmutableList<InjectiveVar2VarSubstitution> substitutions = computeSubstitutions(children); if (substitutions.stream().allMatch(ImmutableSubstitution::isEmpty)) return tree; ImmutableList<IQTree> updatedChildren = updateJoinChildren(substitutions, children); return iqFactory.createUnaryIQTree( iqFactory.createConstructionNode(tree.getVariables()), iqFactory.createNaryIQTree( iqFactory.createInnerJoinNode( Optional.of(updateJoinCondition( rootNode.getOptionalFilterCondition(), substitutions ))), updatedChildren )); }
|| (!optionalAggregatedFilterCondition.equals(originalTopJoinNode.getOptionalFilterCondition()))) {
InnerJoinNode formerJoinNode = (InnerJoinNode) formerRootChild; ImmutableExpression newJoiningCondition = formerJoinNode.getOptionalFilterCondition() .map(e -> immutabilityTools.foldBooleanExpressions(e, filterCondition).get()) .orElse(filterCondition);
|| (!optionalAggregatedFilterCondition.equals(originalTopJoinNode.getOptionalFilterCondition()))) {