@Override public void meet(Filter node) { if (replacement == null) { replaceNode(node, node.getArg()); } else if (replacement instanceof ValueExpr) { assert former == node.getCondition(); node.setCondition((ValueExpr)replacement); } else { assert former == node.getArg(); node.setArg((TupleExpr)replacement); } }
@Override public void meet(final Filter node) throws Exception { super.meet(node); final ValueExpr condition = node.getCondition(); final TupleExpr arg = node.getArg(); if (!(arg instanceof Join)) { return; } final Join join = (Join) arg; final TupleExpr leftArg = join.getLeftArg(); final TupleExpr rightArg = join.getRightArg(); if (leftArg instanceof StatementPattern && rightArg instanceof StatementPattern) { final Filter left = new Filter(leftArg, condition); final Filter right = new Filter(rightArg, condition); node.replaceWith(new Join(left, right)); } } }
@Override public void meet(Filter filterNode) throws Exception { filterNode.visitChildren(this); if (filterNode.getArg() instanceof AggregationPipelineQueryNode && filterNode.getParentNode() != null) { AggregationPipelineQueryNode pipelineNode = (AggregationPipelineQueryNode) filterNode.getArg(); if (pipelineNode.filter(filterNode.getCondition())) { filterNode.replaceWith(pipelineNode); } } } }
private TupleExpr filteredTuple(TupleExpr theExpr) { TupleExpr aExpr = theExpr; for (ValueExpr aValEx : mFilters) { Filter aFilter = new Filter(); aFilter.setCondition(aValEx); aFilter.setArg(aExpr); aExpr = aFilter; } return aExpr; }
@Override public void meet(EmptySet node) { if (filter.getParentNode() != null) { // Remove filter from its original location filter.replaceWith(filter.getArg()); } }
@Override public void meet(Filter node) { filterCond.add(node.getCondition()); node.replaceWith(node.getArg()); }
@Override public void meet(Intersection node) { Filter clone = new Filter(); clone.setCondition(filter.getCondition().clone()); relocate(filter, node.getLeftArg()); relocate(clone, node.getRightArg()); FilterRelocator.relocate(filter); FilterRelocator.relocate(clone); }
@Override public void meet(Filter node) { spFilterSet.add(node.getCondition()); node.getArg().visit(this); }
@Override public void meet(final Intersection node) { if (Sets.intersection(node.getRightArg().getBindingNames(), filterVars).size() > 0) { relocate(filter, node.getRightArg()); } else if (Sets.intersection(node.getLeftArg().getBindingNames(), filterVars).size() > 0) { final Filter clone = new Filter(filter.getArg(), filter .getCondition().clone()); relocate(clone, node.getLeftArg()); } }
protected void relocate(Filter filter, TupleExpr newFilterArg) { if (filter.getArg() != newFilterArg) { if (filter.getParentNode() != null) { // Remove filter from its original location filter.replaceWith(filter.getArg()); } // Insert filter at the new location newFilterArg.replaceWith(filter); filter.setArg(newFilterArg); } } }
if (theFilter.getArg() != null) { theFilter.getArg().visit(this); final boolean aNeedsNewScope = theFilter.getParentNode() != null && (theFilter.getParentNode() instanceof Join || theFilter.getParentNode() instanceof LeftJoin); String aFilter = renderValueExpr(theFilter.getCondition()); if (theFilter.getCondition() instanceof ValueConstant || theFilter.getCondition() instanceof Var) {
@Override public void meet(Filter node) { Set<QueryModelNode> eSet = getQNodes(node); Set<QueryModelNode> compSet = Sets.difference(eSet, sSet); // if index contains filter node and it hasn't already been moved, // move it down // query tree just above position of statement pattern nodes found // in both query tree // and index (assuming that SPBubbleDownVisitor has already been // called) if (sSet.contains(node.getCondition()) && !bubbledFilters.contains(node.getCondition())) { FilterBubbleDownVisitor fbdv = new FilterBubbleDownVisitor(node.clone(), compSet); node.visit(fbdv); bubbledFilters.add(node.getCondition()); // checks if filter correctly placed, and if it has been, // removes old copy of filter if (fbdv.filterPlaced()) { QueryModelNode pNode = node.getParentNode(); TupleExpr cNode = node.getArg(); pNode.replaceChildNode(node, cNode); super.meetNode(pNode); } super.meet(node); } else { super.meet(node); } } }
@Override public void meet(Filter node) { Set<QueryModelNode> eSet = getQNodes(node); if (eSet.containsAll(sSet)) { if (eSet.equals(sSet)) { node.replaceWith(set); indexPlaced = true; return; } else { node.getArg().visit(this); } } }
private TupleExpr findNotFilter(TupleExpr node) { if (node instanceof Filter) { return findNotFilter(((Filter)node).getArg()); } return node; }
private List<TupleExpr> getFilterChain(List<TupleExpr> joinArgs) { List<TupleExpr> filterTopBottom = Lists.newArrayList(); TupleExpr filterChainTop = null; TupleExpr filterChainBottom = null; for(int i = 0; i < joinArgs.size(); i++) { if(joinArgs.get(i) instanceof Filter) { if(filterChainTop == null) { filterChainTop = joinArgs.remove(i); i--; } else if(filterChainBottom == null){ filterChainBottom = joinArgs.remove(i); ((Filter)filterChainTop).setArg(filterChainBottom); i--; } else { ((Filter)filterChainBottom).setArg(joinArgs.remove(i)); filterChainBottom = ((Filter)filterChainBottom).getArg(); i--; } } } if(filterChainTop != null) { filterTopBottom.add(filterChainTop); } if(filterChainBottom != null) { filterTopBottom.add(filterChainBottom); } return filterTopBottom; }
@Override public boolean equals(Object other) { if (other instanceof Filter && super.equals(other)) { Filter o = (Filter) other; return condition.equals(o.getCondition()); } return false; }
@Override public Filter clone() { Filter clone = (Filter) super.clone(); clone.setCondition(getCondition().clone()); return clone; } }
private void visitFilter(Resource r) throws RDF4JException { Value expr = TripleSources.singleValue(r, SP.EXPRESSION_PROPERTY, store); ValueExpr valueExpr = visitExpression(expr); tupleNode = new Filter(tupleNode, valueExpr); }
private static List<TupleExpr> getFilterChain(List<Filter> filters) { List<TupleExpr> filterTopBottom = Lists.newArrayList(); Filter filterChainTop = null; Filter filterChainBottom = null; for (Filter filter : filters) { if (filterChainTop == null) { filterChainTop = filter.clone(); } else if (filterChainBottom == null) { filterChainBottom = filter.clone(); filterChainTop.setArg(filterChainBottom); } else { Filter newFilter = filter.clone(); filterChainBottom.setArg(newFilter); filterChainBottom = newFilter; } } if (filterChainTop != null) { filterTopBottom.add(filterChainTop); } if (filterChainBottom != null) { filterTopBottom.add(filterChainBottom); } return filterTopBottom; }
} else if (filterChain.size() == 1) { newJoin = filterChain.get(0); ((Filter) newJoin).setArg(tempJoin); } else { newJoin = filterChain.get(0); filterChain.get(1).setArg(tempJoin); } else if (filterChain.size() == 1) { newJoin = filterChain.get(0); ((Filter) newJoin).setArg(tempJoin); } else { newJoin = filterChain.get(0); filterChain.get(1).setArg(tempJoin);