public static void addVarsTriples(Collection<Var> acc, Collection<Triple> triples) { for ( Triple triple : triples ) addVarsFromTriple(acc, triple); }
@Override public void visit(ElementPathBlock el) { for (Iterator<TriplePath> iter = el.patternElts() ; iter.hasNext() ; ) { TriplePath tp = iter.next() ; // If it's triple-izable, then use the triple. if ( tp.isTriple() ) VarUtils.addVarsFromTriple(acc, tp.asTriple()) ; else VarUtils.addVarsFromTriplePath(acc, tp) ; } }
@Override public void visit(ElementPathBlock el) { for (Iterator<TriplePath> iter = el.patternElts() ; iter.hasNext() ; ) { TriplePath tp = iter.next() ; // If it's triple-izable, then use the triple. if ( tp.isTriple() ) { VarUtils.addVarsFromTriple(vars, tp.asTriple()) ; } else { VarUtils.addVarsFromTriplePath(vars, tp) ; } } }
public static Set<Var> getVars(Triple triple) { Set<Var> x = new HashSet<>(); addVarsFromTriple(x, triple); return x; }
@Override public void visit(ElementPathBlock el) { for (Iterator<TriplePath> iter = el.patternElts() ; iter.hasNext() ; ) { TriplePath tp = iter.next() ; // If it's triple-izable, then use the triple. if ( tp.isTriple() ) { VarUtils.addVarsFromTriple(vars, tp.asTriple()) ; } else { VarUtils.addVarsFromTriplePath(vars, tp) ; } } }
@Override public void visit(ElementTriplesBlock el) { for (Iterator<Triple> iter = el.patternElts(); iter.hasNext(); ) { Triple t = iter.next() ; VarUtils.addVarsFromTriple(vars, t) ; } }
@Override public void visit(ElementTriplesBlock el) { for (Iterator<Triple> iter = el.patternElts() ; iter.hasNext() ; ) { Triple t = iter.next() ; VarUtils.addVarsFromTriple(acc, t) ; } }
@Override public void visit(ElementTriplesBlock el) { for (Iterator<Triple> iter = el.patternElts(); iter.hasNext(); ) { Triple t = iter.next() ; VarUtils.addVarsFromTriple(vars, t) ; } }
@Override public void visit(OpTriple opTriple) { VarUtils.addVarsFromTriple(acc, opTriple.getTriple()); }
@Override public void visit(OpTriple opTriple) { addVarsFromTriple(defines, opTriple.getTriple()) ; }
private static Placement placeBGP(ExprList exprsIn, BasicPattern pattern) { ExprList exprs = ExprList.copy(exprsIn) ; Set<Var> patternVarsScope = new HashSet<>() ; // Any filters that depend on no variables. Op op = insertAnyFilter$(exprs, patternVarsScope, null) ; for (Triple triple : pattern) { OpBGP opBGP = getBGP(op) ; if ( opBGP == null ) { // Last thing was not a BGP (so it likely to be a filter) // Need to pass the results from that into the next triple. opBGP = new OpBGP() ; op = OpSequence.create(op, opBGP) ; } opBGP.getPattern().add(triple) ; // Update variables in scope. VarUtils.addVarsFromTriple(patternVarsScope, triple) ; op = insertAnyFilter$(exprs, patternVarsScope, op) ; } return result(op, exprs) ; }
private static Op transformFilterBGP(ExprList exprs, Set<Var> patternVarsScope, BasicPattern pattern) { // Any filters that depend on no variables. Op op = insertAnyFilter(exprs, patternVarsScope, null); for (Triple triple : pattern) { OpBGP opBGP = getBGP(op); if (opBGP == null) { // Last thing was not a BGP (so it likely to be a filter) // Need to pass the results from that into the next triple. // Which is a join and sequence is a special case of join // which always evaluates by passing results of the early // part into the next element of the sequence. opBGP = new OpBGP(); op = OpSequence.create(op, opBGP); } opBGP.getPattern().add(triple); // Update variables in scope. VarUtils.addVarsFromTriple(patternVarsScope, triple); // Attempt to place any filters op = insertAnyFilter(exprs, patternVarsScope, op); } // Leave any remaining filter expressions - don't wrap up any as // something else may take them. return op; }
private static Placement placeQuadPattern(ExprList exprsIn, Node graphNode, BasicPattern pattern) { ExprList exprs = ExprList.copy(exprsIn) ; Set<Var> patternVarsScope = new HashSet<>() ; // Any filters that depend on no variables. Op op = insertAnyFilter$(exprs, patternVarsScope, null) ; if ( Var.isVar(graphNode) ) { // Add in the graph node of the quad block. VarUtils.addVar(patternVarsScope, Var.alloc(graphNode)) ; } for (Triple triple : pattern) { OpQuadPattern opQuad = getQuads(op) ; if ( opQuad == null ) { opQuad = new OpQuadPattern(graphNode, new BasicPattern()) ; op = OpSequence.create(op, opQuad) ; } opQuad.getBasicPattern().add(triple) ; // Update variables in scope. VarUtils.addVarsFromTriple(patternVarsScope, triple) ; op = insertAnyFilter$(exprs, patternVarsScope, op) ; } return result(op, exprs) ; }
private static Op transformFilterQuadPattern(ExprList exprs, Set<Var> patternVarsScope, Node graphNode, BasicPattern pattern) { // Any filters that depend on no variables. Op op = insertAnyFilter(exprs, patternVarsScope, null); if (Var.isVar(graphNode)) { // Add in the graph node of the quad block. // It's picked up after the first triple is processed. VarUtils.addVar(patternVarsScope, Var.alloc(graphNode)); } for (Triple triple : pattern) { OpQuadPattern opQuad = getQuads(op); if (opQuad == null) { opQuad = new OpQuadPattern(graphNode, new BasicPattern()); op = OpSequence.create(op, opQuad); } opQuad.getBasicPattern().add(triple); // Update variables in scope. VarUtils.addVarsFromTriple(patternVarsScope, triple); // Attempt to place any filters op = insertAnyFilter(exprs, patternVarsScope, op); } return op; }