/** * SPARQL algebra requires kgram to compute BGP exp and return Mappings List<Node> from = query.getFrom(gNode); Mappings map = p.getMappings(gNode, from, exp, memory); */ Mappings exec(Node gNode, Producer p, Exp exp, Mapping m){ if (true){ List<Node> from = query.getFrom(gNode); Mappings map = p.getMappings(gNode, from, exp, memory); return map; } Stack stack = Stack.create(exp); set(stack); if (m != null){ process(exp, m); } eval(p, gNode, stack, 0); Mappings map = Mappings.create(query); map.add(results); memory.start(); results.clear(); return map; }
@Override public Mappings getMappings(Node gNode, List<Node> from, Exp exp, Environment env) { Mappings meta = new Mappings(); for (Producer p : getProducerList()) { meta.add(p.getMappings(gNode, from, exp, env)); } return meta; }
private int bgp(Producer p, Node gNode, Exp exp, Stack stack, int n) { int backtrack = n - 1; List<Node> from = query.getFrom(gNode); Mappings map = p.getMappings(gNode, from, exp, memory); for (Mapping m : map) { if (stop) { return STOP; } m.fixQueryNodes(query); boolean b = memory.push(m, n, false); if (b) { int back = eval(p, gNode, stack, n + 1); memory.pop(m); if (back < n) { return back; } } } return backtrack; }