Search in sources :

Example 11 with Var

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;
}
Also used : Var(org.eclipse.rdf4j.query.algebra.Var) Modify(org.eclipse.rdf4j.query.algebra.Modify) ASTModify(org.eclipse.rdf4j.query.parser.sparql.ast.ASTModify) VisitorException(org.eclipse.rdf4j.query.parser.sparql.ast.VisitorException) TupleExpr(org.eclipse.rdf4j.query.algebra.TupleExpr)

Example 12 with Var

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;
}
Also used : LinkedHashSet(java.util.LinkedHashSet) StatementPattern(org.eclipse.rdf4j.query.algebra.StatementPattern) Var(org.eclipse.rdf4j.query.algebra.Var)

Example 13 with Var

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;
}
Also used : LinkedHashSet(java.util.LinkedHashSet) ListBindingSet(org.eclipse.rdf4j.query.impl.ListBindingSet) BindingSet(org.eclipse.rdf4j.query.BindingSet) BindingSetAssignment(org.eclipse.rdf4j.query.algebra.BindingSetAssignment) Var(org.eclipse.rdf4j.query.algebra.Var) ArrayList(java.util.ArrayList)

Example 14 with Var

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;
}
Also used : ValueExpr(org.eclipse.rdf4j.query.algebra.ValueExpr) Scope(org.eclipse.rdf4j.query.algebra.StatementPattern.Scope) Var(org.eclipse.rdf4j.query.algebra.Var)

Example 15 with Var

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())));
}
Also used : StatementPattern(org.eclipse.rdf4j.query.algebra.StatementPattern) Var(org.eclipse.rdf4j.query.algebra.Var) ProjectionElem(org.eclipse.rdf4j.query.algebra.ProjectionElem)

Aggregations

Var (org.eclipse.rdf4j.query.algebra.Var)48 ValueExpr (org.eclipse.rdf4j.query.algebra.ValueExpr)19 StatementPattern (org.eclipse.rdf4j.query.algebra.StatementPattern)15 ArrayList (java.util.ArrayList)14 TupleExpr (org.eclipse.rdf4j.query.algebra.TupleExpr)14 ProjectionElemList (org.eclipse.rdf4j.query.algebra.ProjectionElemList)13 Extension (org.eclipse.rdf4j.query.algebra.Extension)10 ExtensionElem (org.eclipse.rdf4j.query.algebra.ExtensionElem)10 ASTVar (org.eclipse.rdf4j.query.parser.serql.ast.ASTVar)8 List (java.util.List)7 ProjectionElem (org.eclipse.rdf4j.query.algebra.ProjectionElem)7 ValueConstant (org.eclipse.rdf4j.query.algebra.ValueConstant)7 LinkedHashSet (java.util.LinkedHashSet)6 Projection (org.eclipse.rdf4j.query.algebra.Projection)6 MultiProjection (org.eclipse.rdf4j.query.algebra.MultiProjection)5 Reduced (org.eclipse.rdf4j.query.algebra.Reduced)5 SameTerm (org.eclipse.rdf4j.query.algebra.SameTerm)5 Distinct (org.eclipse.rdf4j.query.algebra.Distinct)4 Filter (org.eclipse.rdf4j.query.algebra.Filter)4 BindingSet (org.eclipse.rdf4j.query.BindingSet)3