use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.
the class UpdateExprBuilder method visit.
@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;
}
use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.
the class UpdateExprBuilder method getProjectionVars.
private Set<Var> getProjectionVars(Collection<StatementPattern> statementPatterns) {
Set<Var> vars = new LinkedHashSet<Var>(statementPatterns.size() * 2);
for (StatementPattern sp : statementPatterns) {
vars.add(sp.getSubjectVar());
vars.add(sp.getPredicateVar());
vars.add(sp.getObjectVar());
if (sp.getContextVar() != null) {
vars.add(sp.getContextVar());
}
}
return vars;
}
use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.
the class TupleExprBuilder method visit.
@Override
public BindingSetAssignment visit(ASTBindingsClause 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);
return bsa;
}
use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.
the class TupleExprBuilder method visit.
@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;
}
use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.
the class BaseTupleExprRenderer method toStatementPattern.
/**
* Turn a ProjectionElemList for a construct query projection (three elements aliased as 'subject',
* 'predicate' and 'object' in that order) into a StatementPattern.
*
* @param theList
* the elem list to render
* @return the elem list for a construct projection as a statement pattern
* @throws Exception
* if there is an exception while rendering
*/
public StatementPattern toStatementPattern(ProjectionElemList theList) throws Exception {
ProjectionElem aSubj = theList.getElements().get(0);
ProjectionElem aPred = theList.getElements().get(1);
ProjectionElem aObj = theList.getElements().get(2);
return new StatementPattern(mExtensions.containsKey(aSubj.getSourceName()) ? new Var(scrubVarName(aSubj.getSourceName()), asValue(mExtensions.get(aSubj.getSourceName()))) : new Var(scrubVarName(aSubj.getSourceName())), mExtensions.containsKey(aPred.getSourceName()) ? new Var(scrubVarName(aPred.getSourceName()), asValue(mExtensions.get(aPred.getSourceName()))) : new Var(scrubVarName(aPred.getSourceName())), mExtensions.containsKey(aObj.getSourceName()) ? new Var(scrubVarName(aObj.getSourceName()), asValue(mExtensions.get(aObj.getSourceName()))) : new Var(scrubVarName(aObj.getSourceName())));
}
Aggregations