@Override public TupleExpr visit(ASTInsertClause node, Object data) throws VisitorException { TupleExpr result = (TupleExpr)data; // Collect insert clause triples GraphPattern parentGP = graphPattern; graphPattern = new GraphPattern(); // inherit scope & context graphPattern.setStatementPatternScope(parentGP.getStatementPatternScope()); graphPattern.setContextVar(parentGP.getContextVar()); for (int i = 0; i < node.jjtGetNumChildren(); i++) { node.jjtGetChild(i).jjtAccept(this, data); } TupleExpr insertExpr = graphPattern.buildTupleExpr(); graphPattern = parentGP; return insertExpr; }
@Override public Object visit(ASTGraphGraphPattern node, Object data) throws VisitorException { Var oldContext = graphPattern.getContextVar(); Scope oldScope = graphPattern.getStatementPatternScope(); ValueExpr newContext = (ValueExpr)node.jjtGetChild(0).jjtAccept(this, null); graphPattern.setContextVar(mapValueExprToVar(newContext)); graphPattern.setStatementPatternScope(Scope.NAMED_CONTEXTS); node.jjtGetChild(1).jjtAccept(this, null); graphPattern.setContextVar(oldContext); graphPattern.setStatementPatternScope(oldScope); return null; }
@Override public TupleExpr visit(ASTDeleteClause node, Object data) throws VisitorException { TupleExpr result = (TupleExpr)data; // Collect construct triples GraphPattern parentGP = graphPattern; graphPattern = new GraphPattern(); // inherit scope & context graphPattern.setStatementPatternScope(parentGP.getStatementPatternScope()); graphPattern.setContextVar(parentGP.getContextVar()); for (int i = 0; i < node.jjtGetNumChildren(); i++) { node.jjtGetChild(i).jjtAccept(this, data); } TupleExpr deleteExpr = graphPattern.buildTupleExpr(); // FIXME we should adapt the grammar so we can avoid doing this in // post-processing. VarCollector collector = new VarCollector(); deleteExpr.visit(collector); for (Var var : collector.getCollectedVars()) { if (var.isAnonymous() && !var.hasValue()) { // blank node in delete pattern, not allowed by SPARQL spec. throw new VisitorException("DELETE clause may not contain blank nodes"); } } graphPattern = parentGP; return deleteExpr; }
@Override public Modify visit(ASTDeleteWhere node, Object data) throws VisitorException { // Collect delete clause triples GraphPattern parentGP = graphPattern; graphPattern = new GraphPattern(); // inherit scope & context graphPattern.setStatementPatternScope(parentGP.getStatementPatternScope()); graphPattern.setContextVar(parentGP.getContextVar()); for (int i = 0; i < node.jjtGetNumChildren(); i++) { node.jjtGetChild(i).jjtAccept(this, data); } TupleExpr whereExpr = graphPattern.buildTupleExpr(); graphPattern = parentGP; TupleExpr deleteExpr = whereExpr.clone(); // FIXME we should adapt the grammar so we can avoid doing this // post-processing. VarCollector collector = new VarCollector(); deleteExpr.visit(collector); for (Var var : collector.getCollectedVars()) { if (var.isAnonymous() && !var.hasValue()) { throw new VisitorException("DELETE WHERE may not contain blank nodes"); } } Modify modify = new Modify(deleteExpr, null, whereExpr); return modify; }
Scope scope = pathSequencePattern.getStatementPatternScope(); Var contextVar = pathSequencePattern.getContextVar();