public static void addVarNodes(Collection<Var> acc, Collection<Node> nodes) { if ( nodes == null ) return ; for ( Node n : nodes ) addVar(acc, n) ; }
public static void addVarsTriples(Collection<Var> acc, Collection<Triple> triples) { for ( Triple triple : triples ) addVarsFromTriple(acc, triple); }
@Override public void visit(OpPath opPath) { addVarsFromTriplePath(defines, opPath.getTriplePath()); }
@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) ; } }
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) ; }
public static void addVars(Collection<Var> acc, PropFuncArg arg) { if ( arg.isNode() ) addVar(acc, arg.getArg()); else addVarNodes(acc, arg.getArgList()); } }
@Override public void visit(OpBGP opBGP) { BasicPattern triples = opBGP.getPattern(); addVars(defines, triples); }
public Set<Triple> extractTriplePattern(final Query query, final boolean ignoreOptionals) { triplePattern = new HashSet<>(); optionalTriplePattern = new HashSet<>(); query.getQueryPattern().visit(this); // postprocessing: triplepattern in OPTIONAL clause if (!ignoreOptionals && query.isSelectType()) { for (Triple t : optionalTriplePattern) { if (!ListUtils.intersection(new ArrayList<>(VarUtils.getVars(t)), query.getProjectVars()).isEmpty()) { triplePattern.add(t); } } } return triplePattern; }
public static void addVars(Collection<Var> acc, QuadPattern quadPattern) { for ( Quad quad : quadPattern.getList() ) { addVarsFromQuad(acc, quad) ; } }
public static void addVars(Collection<Var> acc, BasicPattern pattern) { addVarsTriples(acc, pattern.getList()); }
@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) ; } } }
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; }
@Override public void visit(OpQuadBlock quadBlock) { VarUtils.addVars(acc, quadBlock.getPattern()) ; }
public Set<Triple> extractTriplePattern(Query query, boolean ignoreOptionals){ triplePattern = new HashSet<>(); optionalTriplePattern = new HashSet<>(); query.getQueryPattern().visit(this); //postprocessing: triplepattern in OPTIONAL clause if(!ignoreOptionals){ if(query.isSelectType()){ for(Triple t : optionalTriplePattern){ if(!ListUtils.intersection(new ArrayList<>(VarUtils.getVars(t)), query.getProjectVars()).isEmpty()){ triplePattern.add(t); } } } } return triplePattern; }
@Override public void visit(OpQuad opQuad) { VarUtils.addVarsFromQuad(acc, opQuad.getQuad()); }
@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(OpBGP opBGP) { VarUtils.addVars(acc, opBGP.getPattern()) ; }