private TupleExpr findNotFilter(TupleExpr node) { if (node instanceof Filter) { return findNotFilter(((Filter)node).getArg()); } return node; }
@Override public void meet(Filter node) { nodeCount += 1; node.getArg().visit(this); }
public Set<String> getBindingNames() { Set<String> result = getArg().getBindingNames(); if (condition instanceof SubQueryValueOperator) { result = Stream .concat(result.stream(), ((SubQueryValueOperator) condition).getSubQuery().getBindingNames().stream()) .collect(Collectors.toSet()); } return result; }
@Override public Set<String> getBindingNames() { Set<String> result = getArg().getBindingNames(); if (condition instanceof SubQueryValueOperator) { result = Stream .concat(result.stream(), ((SubQueryValueOperator) condition).getSubQuery().getBindingNames().stream()) .collect(Collectors.toSet()); } return result; }
@Override public void meet(Filter node) { spFilterSet.add(node.getCondition()); node.getArg().visit(this); }
@Override public void meet(Filter node) { filterCond.add(node.getCondition()); node.replaceWith(node.getArg()); }
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); } } }
public CloseableIteration<BindingSet, QueryEvaluationException> evaluate(Filter filter, BindingSet bindings) throws QueryEvaluationException { CloseableIteration<BindingSet, QueryEvaluationException> result; result = this.evaluate(filter.getArg(), bindings); result = new FilterIterator(filter, result, this); return result; }
@Override public void meet(EmptySet node) { if (filter.getParentNode() != null) { // Remove filter from its original location filter.replaceWith(filter.getArg()); } }
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); } } }
public CloseableIteration<BindingSet, QueryEvaluationException> evaluate(Filter filter, BindingSet bindings) throws QueryEvaluationException { CloseableIteration<BindingSet, QueryEvaluationException> result; result = this.evaluate(filter.getArg(), bindings); result = new FilterIterator(filter, result, this); return result; }
@Override public void meet(EmptySet node) { if (filter.getParentNode() != null) { // Remove filter from its original location filter.replaceWith(filter.getArg()); } }
@Override public double getCardinality(final TupleExpr expr) { if (expr instanceof Filter) { final Filter f = (Filter) expr; // filters must make sets smaller return super.getCardinality(f.getArg()) / 10; } return super.getCardinality(expr); }
@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); } } } }
@Override public void meet(final Filter filter) { //First visit children, then condition (reverse of default): filter.getArg().visit(this); filter.getCondition().visit(this); } }
@Override public void meet(Filter node) { FilterVarReNamer fvr = new FilterVarReNamer(varChanges, valMap); node.getCondition().visit(fvr); node.getArg().visit(this); }
private void renameVar(Var oldVar, Var newVar, Filter filter) { filter.getArg().visit(new VarRenamer(oldVar, newVar)); // TODO: skip this step if old variable name is not used // Replace SameTerm-filter with an Extension, the old variable name // might still be relevant to nodes higher in the tree Extension extension = new Extension(filter.getArg()); extension.addElement(new ExtensionElem(new Var(newVar.getName()), oldVar.getName())); filter.replaceWith(extension); }
private void renameVar(Var oldVar, Var newVar, Filter filter) { filter.getArg().visit(new VarRenamer(oldVar, newVar)); // TODO: skip this step if old variable name is not used // Replace SameTerm-filter with an Extension, the old variable name // might still be relevant to nodes higher in the tree Extension extension = new Extension(filter.getArg()); extension.addElement(new ExtensionElem(new Var(newVar.getName()), oldVar.getName())); filter.replaceWith(extension); }
@Override public void meet(Filter node) throws RDFHandlerException { hasGroup = false; node.getArg().visit(this); if (!hasGroup) { listEntry(); handler.handleStatement(valueFactory.createStatement(subject, RDF.TYPE, SP.FILTER_CLASS)); meet(node.getCondition()); } }
@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()); } }