Search in sources :

Example 36 with Var

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

the class TupleExprBuilder method createPath.

private TupleExpr createPath(Scope scope, Var subjVar, TupleExpr pathExpression, Var endVar, Var contextVar, long length) throws VisitorException {
    if (pathExpression instanceof StatementPattern) {
        Var predVar = ((StatementPattern) pathExpression).getPredicateVar();
        if (length == 0L) {
            return new ZeroLengthPath(scope, subjVar, endVar, contextVar);
        } else {
            GraphPattern gp = new GraphPattern();
            gp.setContextVar(contextVar);
            gp.setStatementPatternScope(scope);
            Var nextVar = null;
            for (long i = 0L; i < length; i++) {
                if (i < length - 1) {
                    nextVar = createAnonVar();
                } else {
                    nextVar = endVar;
                }
                gp.addRequiredSP(subjVar, predVar, nextVar);
                subjVar = nextVar;
            }
            return gp.buildTupleExpr();
        }
    } else {
        if (length == 0L) {
            return new ZeroLengthPath(scope, subjVar, endVar, contextVar);
        } else {
            GraphPattern gp = new GraphPattern();
            gp.setContextVar(contextVar);
            gp.setStatementPatternScope(scope);
            Var nextVar = null;
            for (long i = 0L; i < length; i++) {
                if (i < length - 1L) {
                    nextVar = createAnonVar();
                } else {
                    nextVar = endVar;
                }
                // create a clone of the path expression.
                TupleExpr clone = pathExpression.clone();
                VarReplacer replacer = new VarReplacer(endVar, nextVar);
                clone.visit(replacer);
                gp.addRequiredTE(clone);
                subjVar = nextVar;
            }
            return gp.buildTupleExpr();
        }
    }
}
Also used : StatementPattern(org.eclipse.rdf4j.query.algebra.StatementPattern) ZeroLengthPath(org.eclipse.rdf4j.query.algebra.ZeroLengthPath) Var(org.eclipse.rdf4j.query.algebra.Var) TupleExpr(org.eclipse.rdf4j.query.algebra.TupleExpr)

Example 37 with Var

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

the class TupleExprBuilder method replaceSameTermVars.

private List<StatementPattern> replaceSameTermVars(List<StatementPattern> statementPatterns, Set<SameTerm> sameTermConstraints) {
    if (sameTermConstraints != null) {
        for (SameTerm st : sameTermConstraints) {
            Var left = (Var) st.getLeftArg();
            Var right = (Var) st.getRightArg();
            for (StatementPattern sp : statementPatterns) {
                Var subj = sp.getSubjectVar();
                Var obj = sp.getObjectVar();
                if (subj.equals(left) || subj.equals(right)) {
                    if (obj.equals(left) || obj.equals(right)) {
                        sp.setObjectVar(subj);
                    }
                }
            }
        }
    }
    return statementPatterns;
}
Also used : StatementPattern(org.eclipse.rdf4j.query.algebra.StatementPattern) Var(org.eclipse.rdf4j.query.algebra.Var) SameTerm(org.eclipse.rdf4j.query.algebra.SameTerm)

Example 38 with Var

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

the class TupleExprBuilder method visit.

@Override
public Var visit(ASTCollection node, Object data) throws VisitorException {
    Var rootListVar = createAnonVar();
    Var listVar = rootListVar;
    int childCount = node.jjtGetNumChildren();
    for (int i = 0; i < childCount; i++) {
        ValueExpr childValue = (ValueExpr) node.jjtGetChild(i).jjtAccept(this, null);
        Var childVar = mapValueExprToVar(childValue);
        graphPattern.addRequiredSP(listVar, TupleExprs.createConstVar(RDF.FIRST), childVar);
        Var nextListVar;
        if (i == childCount - 1) {
            nextListVar = TupleExprs.createConstVar(RDF.NIL);
        } else {
            nextListVar = createAnonVar();
        }
        graphPattern.addRequiredSP(listVar, TupleExprs.createConstVar(RDF.REST), nextListVar);
        listVar = nextListVar;
    }
    return rootListVar;
}
Also used : ValueExpr(org.eclipse.rdf4j.query.algebra.ValueExpr) Var(org.eclipse.rdf4j.query.algebra.Var)

Example 39 with Var

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

the class TupleExprBuilder method visit.

@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;
}
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 40 with Var

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

the class TupleExprBuilder method processOrderClause.

private TupleExpr processOrderClause(ASTOrderClause orderNode, TupleExpr tupleExpr, Group group) throws VisitorException {
    if (orderNode != null) {
        @SuppressWarnings("unchecked") List<OrderElem> orderElements = (List<OrderElem>) orderNode.jjtAccept(this, null);
        for (OrderElem orderElem : orderElements) {
            // retrieve any aggregate operators from the order element.
            AggregateCollector collector = new AggregateCollector();
            collector.meet(orderElem);
            Extension extension = new Extension();
            for (AggregateOperator operator : collector.getOperators()) {
                Var var = createAnonVar();
                // replace occurrence of the operator in the order condition
                // with the variable.
                AggregateOperatorReplacer replacer = new AggregateOperatorReplacer(operator, var);
                replacer.meet(orderElem);
                // create an extension linking the operator to the variable
                // name.
                String alias = var.getName();
                ExtensionElem pe = new ExtensionElem(operator, alias);
                extension.addElement(pe);
                // add the aggregate operator to the group.
                GroupElem ge = new GroupElem(alias, operator);
                group.addGroupElement(ge);
            }
            if (!extension.getElements().isEmpty()) {
                extension.setArg(tupleExpr);
                tupleExpr = extension;
            }
        }
        tupleExpr = new Order(tupleExpr, orderElements);
    }
    return tupleExpr;
}
Also used : Order(org.eclipse.rdf4j.query.algebra.Order) Var(org.eclipse.rdf4j.query.algebra.Var) GroupElem(org.eclipse.rdf4j.query.algebra.GroupElem) OrderElem(org.eclipse.rdf4j.query.algebra.OrderElem) ExtensionElem(org.eclipse.rdf4j.query.algebra.ExtensionElem) Extension(org.eclipse.rdf4j.query.algebra.Extension) AggregateOperator(org.eclipse.rdf4j.query.algebra.AggregateOperator) List(java.util.List) ArrayList(java.util.ArrayList) ProjectionElemList(org.eclipse.rdf4j.query.algebra.ProjectionElemList)

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