private Optional<CommutativeJoinOrFilterNode> getProviderReplacementNode(CommutativeJoinOrFilterNode providerNode, Optional<ImmutableExpression> nonPropagatedExpression) { if (providerNode instanceof InnerJoinNode) { return Optional.of(iqFactory.createInnerJoinNode(nonPropagatedExpression)); } if (providerNode instanceof FilterNode) { if (nonPropagatedExpression.isPresent()) { return Optional.of(iqFactory.createFilterNode(nonPropagatedExpression.get())); } return Optional.empty(); } throw new IllegalStateException("Invalid proposal: A CommutativeJoinOrFilterNode must be a commutative " + "join or filter node"); } }
private Optional<CommutativeJoinOrFilterNode> getProviderReplacementNode(CommutativeJoinOrFilterNode providerNode, Optional<ImmutableExpression> nonPropagatedExpression) { if (providerNode instanceof InnerJoinNode) { return Optional.of(iqFactory.createInnerJoinNode(nonPropagatedExpression)); } if (providerNode instanceof FilterNode) { if (nonPropagatedExpression.isPresent()) { return Optional.of(iqFactory.createFilterNode(nonPropagatedExpression.get())); } return Optional.empty(); } throw new IllegalStateException("Invalid proposal: A CommutativeJoinOrFilterNode must be a commutative " + "join or filter node"); } }
private IQTree transformIntoInnerJoinTree(IQTree leftChild, IQTree rightChild) { return iqFactory.createNaryIQTree( iqFactory.createInnerJoinNode(getOptionalFilterCondition()), ImmutableList.of(leftChild, rightChild)); }
private JoinOrFilterNode getRecipientReplacementNode(JoinOrFilterNode replacedNode, ImmutableExpression expressionToPropagate) { ImmutableExpression combinedExpression = getCombinedExpression(expressionToPropagate, replacedNode); if (replacedNode instanceof InnerJoinNode) return iqFactory.createInnerJoinNode(Optional.of(combinedExpression)); if (replacedNode instanceof LeftJoinNode) return iqFactory.createLeftJoinNode(Optional.of(combinedExpression)); if (replacedNode instanceof FilterNode) return iqFactory.createFilterNode(combinedExpression); throw new IllegalStateException("Invalid proposal: A CommutativeJoinOrFilterNode must be a commutative join or filter node"); }
private JoinOrFilterNode getRecipientReplacementNode(JoinOrFilterNode replacedNode, ImmutableExpression expressionToPropagate) { ImmutableExpression combinedExpression = getCombinedExpression(expressionToPropagate, replacedNode); if (replacedNode instanceof InnerJoinNode) return iqFactory.createInnerJoinNode(Optional.of(combinedExpression)); if (replacedNode instanceof LeftJoinNode) return iqFactory.createLeftJoinNode(Optional.of(combinedExpression)); if (replacedNode instanceof FilterNode) return iqFactory.createFilterNode(combinedExpression); throw new IllegalStateException("Invalid proposal: A CommutativeJoinOrFilterNode must be a commutative join or filter node"); }
@Override public InnerJoinNode transform(InnerJoinNode innerJoinNode) { return iqFactory.createInnerJoinNode(renameOptionalBooleanExpression(innerJoinNode.getOptionalFilterCondition())); }
@Override public InnerJoinNode transform(InnerJoinNode innerJoinNode) { return iqFactory.createInnerJoinNode(renameOptionalBooleanExpression(innerJoinNode.getOptionalFilterCondition())); }
/** * TODO: explain */ private static Optional<JoinOrFilterNode> createFilterOrJoinNode(IntermediateQueryFactory iqFactory, List<Function> dataAndCompositeAtoms, List<Function> booleanAtoms) { Optional<ImmutableExpression> optionalFilter = createFilterExpression(booleanAtoms); int dataAndCompositeAtomCount = dataAndCompositeAtoms.length(); Optional<JoinOrFilterNode> optionalRootNode; /* * Filter as a root node */ if (optionalFilter.isPresent() && (dataAndCompositeAtomCount == 1)) { optionalRootNode = Optional.of(iqFactory.createFilterNode(optionalFilter.get())); } else if (dataAndCompositeAtomCount > 1) { optionalRootNode = Optional.of(iqFactory.createInnerJoinNode(optionalFilter)); } /* * No need to create a special root node (will be the unique data atom) */ else { optionalRootNode = Optional.empty(); } return optionalRootNode; }
@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()) ); }
private IQTree getIntensionalCanonizedTree(IQ assertion, DistinctVariableOnlyDataAtom projAtom, IntensionalDataNode intensionalDataNode) { return iqFactory.createUnaryIQTree( iqFactory.createConstructionNode(projAtom.getVariables()), iqFactory.createNaryIQTree( iqFactory.createInnerJoinNode(), ImmutableList.of( assertion.getTree(), intensionalDataNode ))); }
@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 )); }
InnerJoinNode innerJoinNode = iqFactory.createInnerJoinNode(); treeComponent.replaceNode(leftJoinNodeToUpgrade, innerJoinNode); return new NodeCentricOptimizationResultsImpl<>(query, Optional.of(innerJoinNode));
InnerJoinNode innerJoinNode = iqFactory.createInnerJoinNode(); treeComponent.replaceNode(leftJoinNodeToUpgrade, innerJoinNode); return new NodeCentricOptimizationResultsImpl<>(query, Optional.of(innerJoinNode));
iqFactory.createInnerJoinNode(expressionAndSubstitution.optionalExpression), newChildren); return expressionAndSubstitution.substitution.isEmpty()
InnerJoinNode newJoinNode = iqFactory.createInnerJoinNode(optionalAggregatedFilterCondition);
InnerJoinNode joinNode = iqFactory.createInnerJoinNode(optionalFilterCondition);
InnerJoinNode newJoinNode = iqFactory.createInnerJoinNode(optionalAggregatedFilterCondition);
InnerJoinNode joinNode = queryBuilder.getFactory().createInnerJoinNode(optionalFilterCondition); queryBuilder.addChild(parentNodeOfTheJoinNode, joinNode, optionalPosition);