Search in sources :

Example 46 with Var

use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.

the class TupleExprBuilder method visit.

@Override
public Object visit(ASTBind node, Object data) throws VisitorException {
    // bind expression
    ValueExpr ve = (ValueExpr) node.jjtGetChild(0).jjtAccept(this, data);
    // name to bind the expression outcome to
    Node aliasNode = node.jjtGetChild(1);
    String alias = ((ASTVar) aliasNode).getName();
    Extension extension = new Extension();
    extension.addElement(new ExtensionElem(ve, alias));
    TupleExpr result = null;
    TupleExpr arg = graphPattern.buildTupleExpr();
    // check if alias is not previously used.
    if (arg.getBindingNames().contains(alias)) {
        // SES-2314 we need to doublecheck that the reused varname is not
        // just
        // for an anonymous var or a constant.
        VarCollector collector = new VarCollector();
        arg.visit(collector);
        for (Var v : collector.getCollectedVars()) {
            if (alias.equals(v.getName())) {
                if (!v.isConstant() && !v.isAnonymous()) {
                    throw new VisitorException(String.format("BIND clause alias '%s' was previously used", alias));
                }
                break;
            }
        }
    }
    if (arg instanceof Filter) {
        result = arg;
        // the BIND expression.
        while (((Filter) arg).getArg() instanceof Filter) {
            arg = ((Filter) arg).getArg();
        }
        extension.setArg(((Filter) arg).getArg());
        ((Filter) arg).setArg(extension);
    } else {
        extension.setArg(arg);
        result = extension;
    }
    GraphPattern replacementGP = new GraphPattern(graphPattern);
    replacementGP.addRequiredTE(result);
    graphPattern = replacementGP;
    return result;
}
Also used : Extension(org.eclipse.rdf4j.query.algebra.Extension) ValueExpr(org.eclipse.rdf4j.query.algebra.ValueExpr) Filter(org.eclipse.rdf4j.query.algebra.Filter) Var(org.eclipse.rdf4j.query.algebra.Var) QueryModelNode(org.eclipse.rdf4j.query.algebra.QueryModelNode) IsBNode(org.eclipse.rdf4j.query.algebra.IsBNode) ExtensionElem(org.eclipse.rdf4j.query.algebra.ExtensionElem) TupleExpr(org.eclipse.rdf4j.query.algebra.TupleExpr)

Example 47 with Var

use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.

the class SparqlTupleExprRenderer method ctxClose.

private void ctxClose(TupleExpr theExpr) {
    Var aContext = mContexts.get(theExpr);
    if (aContext != null) {
        mJoinBuffer.append("}");
        mIndent -= 2;
    }
}
Also used : Var(org.eclipse.rdf4j.query.algebra.Var)

Example 48 with Var

use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.

the class SparqlTupleExprRenderer method ctxOpen.

private void ctxOpen(TupleExpr theExpr) {
    Var aContext = mContexts.get(theExpr);
    if (aContext != null) {
        mJoinBuffer.append(indent()).append("GRAPH ");
        if (aContext.hasValue()) {
            mJoinBuffer.append(RenderUtils.getSPARQLQueryString(aContext.getValue()));
        } else {
            mJoinBuffer.append("?").append(aContext.getName());
        }
        mJoinBuffer.append(" {\n");
        mIndent += 2;
    }
}
Also used : Var(org.eclipse.rdf4j.query.algebra.Var)

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