@Override public int mark() { return pattern.size() ; }
@Override public int mark() { return bgp.size() ; }
public boolean isEmpty() { return triples.size() == 0 ; }
/** * Transforms BGPs with the reordering */ @Override public Op transform(OpBGP opBGP) { BasicPattern pattern = opBGP.getPattern(); if ( pattern.size() < 2 ) return opBGP ; BasicPattern pattern2 = reorder.reorder(pattern); return new OpBGP(pattern2); }
public boolean equivalent(OpBGP opBGP) { BasicPattern bgp = opBGP.getPattern() ; if ( bgp.size() != 1 ) return false ; Triple t = bgp.get(0) ; return triple.equals(t) ; }
/** Return a new basic pattern with the same triples as the input, * but ordered as per the index list of this reorder processor. */ @Override public BasicPattern reorder(BasicPattern bgp) { if ( indexes.length != bgp.size() ) { String str = String.format("Expected size = %d : actual basic pattern size = %d", indexes.length, bgp.size()) ; Log.error(this, str) ; throw new ARQException(str) ; } BasicPattern bgp2 = new BasicPattern() ; for ( int idx : indexes ) { Triple t = bgp.get( idx ); bgp2.add( t ); } return bgp2 ; }
/** * Transforms Quad Patterns with the reordering */ @Override public Op transform(OpQuadPattern opQuadPattern) { BasicPattern pattern = opQuadPattern.getBasicPattern(); if ( pattern.size() < 2 ) return opQuadPattern ; BasicPattern pattern2 = reorder.reorder(pattern); return new OpQuadPattern(opQuadPattern.getGraphNode(), pattern2); }
@Override public QueryIterator execute(BasicPattern pattern, QueryIterator input, ExecutionContext execCxt) { // --- In case this isn't for GraphPropertyTable Graph g = execCxt.getActiveGraph() ; if ( ! ( g instanceof GraphPropertyTable ) ) return above.execute(pattern, input, execCxt) ; if (pattern.size() <= 1){ return above.execute(pattern, input, execCxt) ; } return QueryIterPropertyTable.create(input, pattern, execCxt); }
@Override public final ReorderProc reorderIndexes(BasicPattern pattern) { if ( pattern.size() <= 1 ) return ReorderLib.identityProc() ; List<Triple> triples = pattern.getList() ; // Could merge into the conversion step to do the rewrite WRT a Binding. // Or done here as a second pass mutate of PatternTriples // Convert to a mutable form (that allows things like "TERM") List<PatternTriple> components = Iter.toList(Iter.map(triples.iterator(), PatternTriple::new)) ; // Allow subclasses to get in (e.g. static reordering). components = modifyComponents(components) ; ReorderProc proc = reorder(triples, components) ; return proc ; }
public static Element applyTransform(ElementTriplesBlock el, Map<Node, BinaryRelation> virtualPredicates, Generator<Var> rootVarGen) { BasicPattern bgp = el.getPattern(); BasicPattern newPattern = new BasicPattern(); List<Element> elements = new ArrayList<Element>(bgp.size()); for(Triple triple : bgp) { Generator<Var> varGen = rootVarGen.clone(); Element e = applyTransform(triple, virtualPredicates, varGen); if(e == null) { newPattern.add(triple); } else { elements.add(e); } } Iterable<Element> items = newPattern.isEmpty() ? elements : Iterables.concat(Collections.singleton(new ElementTriplesBlock(newPattern)), elements) ; Element result = ElementUtils.createElementGroup(items); return result; }
private void initVars() { _vars = new LinkedHashSet<>(); for (int i = 0; i < _pattern.size(); i++) { final Triple t = _pattern.get(i); if (ARQParser.isDistinguishedVariable(t.getSubject())) _vars.add(t.getSubject().getName()); if (t.getPredicate().isVariable()) _vars.add(t.getPredicate().getName()); if (ARQParser.isDistinguishedVariable(t.getObject())) _vars.add(t.getObject().getName()); } }
private void initVars() { _vars = new LinkedHashSet<>(); for (int i = 0; i < _pattern.size(); i++) { final Triple t = _pattern.get(i); if (ARQParser.isDistinguishedVariable(t.getSubject())) _vars.add(t.getSubject().getName()); if (t.getPredicate().isVariable()) _vars.add(t.getPredicate().getName()); if (ARQParser.isDistinguishedVariable(t.getObject())) _vars.add(t.getObject().getName()); } }
private void initVars() { _vars = new LinkedHashSet<>(); for (int i = 0; i < _pattern.size(); i++) { final Triple t = _pattern.get(i); if (ARQParser.isDistinguishedVariable(t.getSubject())) _vars.add(t.getSubject().getName()); if (t.getPredicate().isVariable()) _vars.add(t.getPredicate().getName()); if (ARQParser.isDistinguishedVariable(t.getObject())) _vars.add(t.getObject().getName()); } }
@Override public void visit(OpBGP opBGP) { if ( opBGP.getPattern().size() == 1 ) { start(opBGP, NoNL) ; write(opBGP.getPattern(), true) ; finish(opBGP) ; return ; } start(opBGP, NL) ; write(opBGP.getPattern(), false) ; finish(opBGP) ; }
if ( pattern.size() >= 2 )
if ( pattern.size() >= 2 )
@Test public void test_param_string_positional_injection_05() { // This injection attempt results in a valid query but a failed // injection String str = "PREFIX : <http://example/>\nSELECT * WHERE { <s> <p> ? . }"; ParameterizedSparqlString pss = new ParameterizedSparqlString(str); pss.setLiteral(0, "hello\" . ?s ?p ?o"); Query q = pss.asQuery(); Element el = q.getQueryPattern(); if (el instanceof ElementTriplesBlock) { Assert.assertEquals(1, ((ElementTriplesBlock) q.getQueryPattern()).getPattern().size()); } else if (el instanceof ElementGroup) { Assert.assertEquals(1, ((ElementGroup) el).getElements().size()); el = ((ElementGroup) el).getElements().get(0); if (el instanceof ElementTriplesBlock) { Assert.assertEquals(1, ((ElementTriplesBlock) el).getPattern().size()); } } }
if ( bgp.size() >= 2 )
@Test public void test_param_string_injection_05() { // This injection attempt results in a valid query but a failed // injection String str = "PREFIX : <http://example/>\nSELECT * WHERE { <s> <p> ?var2 . }"; ParameterizedSparqlString pss = new ParameterizedSparqlString(str); pss.setLiteral("var2", "hello\" . ?s ?p ?o"); Query q = pss.asQuery(); Element el = q.getQueryPattern(); if (el instanceof ElementTriplesBlock) { Assert.assertEquals(1, ((ElementTriplesBlock) q.getQueryPattern()).getPattern().size()); } else if (el instanceof ElementGroup) { Assert.assertEquals(1, ((ElementGroup) el).getElements().size()); el = ((ElementGroup) el).getElements().get(0); if (el instanceof ElementTriplesBlock) { Assert.assertEquals(1, ((ElementTriplesBlock) el).getPattern().size()); } } }
protected QueryIterator execute(BasicPattern pattern, ReorderTransformation reorder, StageGenerator execution, QueryIterator input, ExecutionContext execCxt) { Explain.explain(pattern, execCxt.getContext()) ; if ( ! input.hasNext() ) return input ; if ( reorder != null && pattern.size() >= 2 ) { // If pattern size is 0 or 1, nothing to do. BasicPattern bgp2 = pattern ; // Try to ground the pattern if ( ! input.isJoinIdentity() ) { QueryIterPeek peek = QueryIterPeek.create(input, execCxt) ; // And now use this one input = peek ; Binding b = peek.peek() ; bgp2 = Substitute.substitute(pattern, b) ; } ReorderProc reorderProc = reorder.reorderIndexes(bgp2) ; pattern = reorderProc.reorder(pattern) ; } Explain.explain("Reorder/generic", pattern, execCxt.getContext()) ; return QueryIterBlockTriples.create(input, pattern, execCxt) ; } }