private boolean test(Producer p, Exp exp, Mapping m){ for (Exp f : exp){ if (! eval.getEvaluator().test(f.getFilter(), m, p)){ return false; } } return true; }
boolean postpone(Exp exp, Mapping m){ for (Exp e : exp.getPostpone()){ if (! eval.getEvaluator().test(e.getFilter(), m)){ return false; } } return true; }
/** * Eliminate all Mapping that do not match filter */ void filter(Evaluator eval, Filter f, Memory mem) { ArrayList<Mapping> l = new ArrayList<Mapping>(); for (Mapping map : getList()) { mem.push(map, -1); if (eval.test(f, mem)) { l.add(map); } mem.pop(map); } setList(l); }
boolean test(Node node) { Node qNode = edge.getNode(index); mem.push(qNode, node); boolean test = evaluator.test(filter, mem, producer); mem.pop(qNode); return test; }
/** * exp : min(?l, groupBy(?x, ?y), (?l = ?min)) as ?min) test the filter, * remove Mappping that fail */ void having(Evaluator eval, Exp exp, Memory mem, Group g) { Filter f = exp.getHavingFilter(); clear(); for (Mappings lm : g.getValues()) { for (Mapping map : lm) { mem.push(map, -1); if (eval.test(f, mem)) { add(map); } mem.pop(map); } } }
/** * exp * * @{?this rdf:type c:Person} */ boolean test(Filter filter, Path path, Node qNode, Node node) { mem.push(qNode, node); if (varNode != null) { // TODO: fix it Node pathNode = getPathNode(path); mem.push(varNode, pathNode); //mem.push(varNode, varNode); mem.pushPath(varNode, path); } boolean test = evaluator.test(filter, mem); mem.pop(qNode); if (varNode != null) { mem.pop(varNode); mem.popPath(varNode); } return test; }
/** * proxyGraphNode is the fake graphNode ?_kgram_ that is a proxy for the named graph ?g */ boolean filter(Node proxyGraphNode, Mapping map, Exp exp) { if (exp.isPostpone()) { // A optional B // filters of B must be evaluated now for (Exp f : exp.getPostpone()) { map.setQuery(query); map.setMap(memory.getMap()); map.setBind(memory.getBind()); map.setGraphNode(proxyGraphNode); map.setEval(this); boolean b = evaluator.test(f.getFilter(), map); map.setGraphNode(null); if (hasFilter) { Node graphNode = (proxyGraphNode == null) ? null : map.getNode(proxyGraphNode); b = getVisitor().filter(this, graphNode, f.getFilter().getExp(), b); } if (! b) { return false; } } } return true; }
success = evaluator.test(exp.getFilter(), env, p); env.setGraphNode(null);
Eval ev = memory.getEval(); if (n == HAVING) { res = eval.test(exp.getFilter(), memory); if (ev != null) { ev.getVisitor().having(ev, exp.getFilter().getExp(), res);