public void addRequiredSP(Var subjVar, Var predVar, Var objVar) { addRequiredTE(new StatementPattern(spScope, subjVar, predVar, objVar, contextVar)); }
@Override public BindingSetAssignment visit(ASTInlineData node, Object data) throws VisitorException { BindingSetAssignment bsa = new BindingSetAssignment(); List<ASTVar> varNodes = node.jjtGetChildren(ASTVar.class); List<Var> vars = new ArrayList<Var>(varNodes.size()); // preserve order in query Set<String> bindingNames = new LinkedHashSet<String>(varNodes.size()); for (ASTVar varNode : varNodes) { Var var = (Var)varNode.jjtAccept(this, data); vars.add(var); bindingNames.add(var.getName()); } bsa.setBindingNames(bindingNames); List<ASTBindingSet> bindingNodes = node.jjtGetChildren(ASTBindingSet.class); List<BindingSet> bindingSets = new ArrayList<BindingSet>(bindingNodes.size()); for (ASTBindingSet bindingNode : bindingNodes) { BindingSet bindingSet = (BindingSet)bindingNode.jjtAccept(this, vars); bindingSets.add(bindingSet); } bsa.setBindingSets(bindingSets); graphPattern.addRequiredTE(bsa); return bsa; }
@Override public Object visit(ASTGraphPatternGroup node, Object data) throws VisitorException { GraphPattern parentGP = graphPattern; graphPattern = new GraphPattern(parentGP); boolean optionalPatternInGroup = false; for (int i = 0; i < node.jjtGetNumChildren(); i++) { if (optionalPatternInGroup) { // building the LeftJoin and resetting the graphPattern. TupleExpr te = graphPattern.buildTupleExpr(); graphPattern = new GraphPattern(parentGP); graphPattern.addRequiredTE(te); optionalPatternInGroup = false; } Node childNode = node.jjtGetChild(i); data = childNode.jjtAccept(this, data); if (childNode instanceof ASTOptionalGraphPattern) { optionalPatternInGroup = true; } } // Filters are scoped to the graph pattern group and do not affect // bindings external to the group TupleExpr te = graphPattern.buildTupleExpr(); parentGP.addRequiredTE(te); graphPattern = parentGP; return te; }
@Override public Object visit(ASTMinusGraphPattern node, Object data) throws VisitorException { GraphPattern parentGP = graphPattern; TupleExpr leftArg = graphPattern.buildTupleExpr(); graphPattern = new GraphPattern(parentGP); node.jjtGetChild(0).jjtAccept(this, null); TupleExpr rightArg = graphPattern.buildTupleExpr(); parentGP = new GraphPattern(); parentGP.addRequiredTE(new Difference(leftArg, rightArg)); graphPattern = parentGP; return null; }
@Override public Object visit(ASTUnionGraphPattern node, Object data) throws VisitorException { GraphPattern parentGP = graphPattern; graphPattern = new GraphPattern(parentGP); node.jjtGetChild(0).jjtAccept(this, null); TupleExpr leftArg = graphPattern.buildTupleExpr(); graphPattern = new GraphPattern(parentGP); node.jjtGetChild(1).jjtAccept(this, null); TupleExpr rightArg = graphPattern.buildTupleExpr(); parentGP.addRequiredTE(new Union(leftArg, rightArg)); graphPattern = parentGP; return null; }
@Override public TupleExpr visit(ASTQuadsNotTriples node, Object data) throws VisitorException { GraphPattern parentGP = graphPattern; graphPattern = new GraphPattern(); ValueExpr contextNode = (ValueExpr)node.jjtGetChild(0).jjtAccept(this, data); Var contextVar = mapValueExprToVar(contextNode); graphPattern.setContextVar(contextVar); graphPattern.setStatementPatternScope(Scope.NAMED_CONTEXTS); for (int i = 1; i < node.jjtGetNumChildren(); i++) { node.jjtGetChild(i).jjtAccept(this, data); } TupleExpr result = graphPattern.buildTupleExpr(); parentGP.addRequiredTE(result); graphPattern = parentGP; return result; }
@Override public Object visit(ASTServiceGraphPattern node, Object data) throws VisitorException { GraphPattern parentGP = graphPattern; ValueExpr serviceRef = (ValueExpr)node.jjtGetChild(0).jjtAccept(this, null); graphPattern = new GraphPattern(parentGP); node.jjtGetChild(1).jjtAccept(this, null); TupleExpr serviceExpr = graphPattern.buildTupleExpr(); if (serviceExpr instanceof SingletonSet) return null; // do not add an empty service block String serviceExpressionString = node.getPatternString(); parentGP.addRequiredTE(new Service(mapValueExprToVar(serviceRef), serviceExpr, serviceExpressionString, node.getPrefixDeclarations(), node.getBaseURI(), node.isSilent())); graphPattern = parentGP; return null; }
replacementGP.addRequiredTE(result);
te = handlePathModifiers(scope, subjVar, te, objVar, contextVar, lowerBound, upperBound); pathSequencePattern.addRequiredTE(te); upperBound); pathSequencePattern.addRequiredTE(te); te = handlePathModifiers(scope, startVar, te, nextVar, contextVar, lowerBound, upperBound); pathSequencePattern.addRequiredTE(te); pathSequencePattern.addConstraint(condition); pathSequencePattern.addRequiredTE(te); upperBound); pathSequencePattern.addRequiredTE(te); upperBound); pathSequencePattern.addRequiredTE(te); graphPattern.addRequiredTE(te);
parentGP.addRequiredTE(union); graphPattern = parentGP;
clone.visit(replacer); gp.addRequiredTE(clone);
parentGP.addRequiredTE(tupleExpr); graphPattern = parentGP;