private Optional<PushUpBooleanExpressionProposal> makeNodeCentricProposal(CommutativeJoinOrFilterNode providerNode, IntermediateQuery query) { if (providerNode.getOptionalFilterCondition().isPresent()) { return makeNodeCentricProposal(providerNode, providerNode.getOptionalFilterCondition().get(), Optional.empty(), query, false); } return Optional.empty(); }
private Optional<PushUpBooleanExpressionProposal> makeNodeCentricProposal(CommutativeJoinOrFilterNode providerNode, IntermediateQuery query) { if (providerNode.getOptionalFilterCondition().isPresent()) { return makeNodeCentricProposal( providerNode, providerNode.getOptionalFilterCondition().get(), Optional.empty(), query, false ); } return Optional.empty(); }
/** * Returns the boolean conjuncts shared by all providers. */ private ImmutableSet<ImmutableExpression> getExpressionsToPropagateAboveUnion(ImmutableSet<CommutativeJoinOrFilterNode> providers) { return providers.stream() .map(n -> n.getOptionalFilterCondition().get().flattenAND()) .reduce(this::computeIntersection).get(); }
/** * Returns the boolean conjuncts shared by all providers. */ private ImmutableSet<ImmutableExpression> getExpressionsToPropagateAboveUnion(ImmutableSet<CommutativeJoinOrFilterNode> providers) { return providers.stream() .map(n -> n.getOptionalFilterCondition().get().flattenAND()) .reduce(this::computeIntersection).get(); }
private Optional<ImmutableExpression> getRetainedSubExpression (ImmutableSet<ImmutableExpression> propagatedExpressions, CommutativeJoinOrFilterNode provider) { ImmutableExpression fullBooleanExpression = provider.getOptionalFilterCondition() .orElseThrow(() -> new IllegalStateException("The provider is expected to have a filtering condition")); // conjuncts which will not be propagated up from this child return ImmutabilityTools.foldBooleanExpressions( fullBooleanExpression.flattenAND().stream() .filter(e -> !propagatedExpressions.contains(e)) ); }
private Optional<ImmutableExpression> getRetainedSubExpression (ImmutableSet<ImmutableExpression> propagatedExpressions, CommutativeJoinOrFilterNode provider) { ImmutableExpression fullBooleanExpression = provider.getOptionalFilterCondition() .orElseThrow(() -> new IllegalStateException("The provider is expected to have a filtering condition")); // conjuncts which will not be propagated up from this child return immutabilityTools.foldBooleanExpressions( fullBooleanExpression.flattenAND().stream() .filter(e -> !propagatedExpressions.contains(e)) ); }
/** * Recursive */ private Optional<CommutativeJoinOrFilterNode> getCandidateProvider(QueryNode subtreeRoot, IntermediateQuery query) { if (subtreeRoot instanceof ConstructionNode) { Optional<QueryNode> optChild = query.getFirstChild(subtreeRoot); return optChild.isPresent() ? getCandidateProvider(optChild.get(), query) : Optional.empty(); } if (subtreeRoot instanceof CommutativeJoinOrFilterNode) { CommutativeJoinOrFilterNode castNode = (CommutativeJoinOrFilterNode) subtreeRoot; if (castNode.getOptionalFilterCondition().isPresent()) { return Optional.of(castNode); } } return Optional.empty(); }
/** * Recursive */ private Optional<CommutativeJoinOrFilterNode> getCandidateProvider(QueryNode subtreeRoot, IntermediateQuery query) { if (subtreeRoot instanceof ConstructionNode) { Optional<QueryNode> optChild = query.getFirstChild(subtreeRoot); return optChild.isPresent() ? getCandidateProvider(optChild.get(), query) : Optional.empty(); } if (subtreeRoot instanceof CommutativeJoinOrFilterNode) { CommutativeJoinOrFilterNode castNode = (CommutativeJoinOrFilterNode) subtreeRoot; if (castNode.getOptionalFilterCondition().isPresent()) { return Optional.of(castNode); } } return Optional.empty(); }