Search in sources :

Example 1 with VarExprList

use of org.apache.jena.sparql.core.VarExprList in project jena by apache.

the class TestOptimizer method combine_extend_01.

@Test
public void combine_extend_01() {
    Op extend = OpExtend.create(OpTable.unit(), new VarExprList(Var.alloc("x"), new NodeValueInteger(1)));
    extend = OpExtend.create(extend, new VarExprList(Var.alloc("y"), new NodeValueInteger(2)));
    String opExpectedString = StrUtils.strjoinNL("(extend ((?x 1) (?y 2))", "  (table unit))");
    check(extend, new TransformExtendCombine(), opExpectedString);
}
Also used : Op(org.apache.jena.sparql.algebra.Op) NodeValueInteger(org.apache.jena.sparql.expr.nodevalue.NodeValueInteger) VarExprList(org.apache.jena.sparql.core.VarExprList) Test(org.junit.Test)

Example 2 with VarExprList

use of org.apache.jena.sparql.core.VarExprList in project jena by apache.

the class TestOptimizer method combine_assign_03.

@Test
public void combine_assign_03() {
    Op assign = OpAssign.create(OpTable.unit(), new VarExprList(Var.alloc("x"), new NodeValueInteger(1)));
    assign = OpAssign.create(assign, new VarExprList(Var.alloc("x"), new NodeValueInteger(2)));
    String opExpectedString = StrUtils.strjoinNL("(assign ((?x 2))", "  (assign ((?x 1))", "    (table unit)))");
    check(assign, new TransformExtendCombine(), opExpectedString);
}
Also used : Op(org.apache.jena.sparql.algebra.Op) NodeValueInteger(org.apache.jena.sparql.expr.nodevalue.NodeValueInteger) VarExprList(org.apache.jena.sparql.core.VarExprList) Test(org.junit.Test)

Example 3 with VarExprList

use of org.apache.jena.sparql.core.VarExprList in project jena by apache.

the class SelectHandler method addAll.

/**
 * Add all the variables from the select handler variable.
 *
 * @param selectHandler The select handler to copy the variables from.
 */
public void addAll(SelectHandler selectHandler) {
    setReduced(selectHandler.query.isReduced());
    setDistinct(selectHandler.query.isDistinct());
    query.setQueryResultStar(selectHandler.query.isQueryResultStar());
    VarExprList shProjectVars = selectHandler.query.getProject();
    VarExprList qProjectVars = query.getProject();
    for (Var var : shProjectVars.getVars()) {
        // make sure there are no duplicates
        if (!qProjectVars.contains(var)) {
            qProjectVars.add(var, shProjectVars.getExpr(var));
        }
    }
    aggHandler.addAll(selectHandler.aggHandler);
}
Also used : Var(org.apache.jena.sparql.core.Var) VarExprList(org.apache.jena.sparql.core.VarExprList)

Example 4 with VarExprList

use of org.apache.jena.sparql.core.VarExprList in project jena by apache.

the class OpRewriter method visit.

@Override
public void visit(OpGroup opGroup) {
    opGroup.getSubOp().visit(this);
    ExprRewriter expRewriter = new ExprRewriter(values);
    VarExprList groupVars = rewrite(opGroup.getGroupVars());
    List<ExprAggregator> aggregators = new ArrayList<>();
    for (ExprAggregator ea : opGroup.getAggregators()) {
        ea.visit(expRewriter);
        aggregators.add((ExprAggregator) expRewriter.pop());
    }
    push(new OpGroup(pop(), groupVars, aggregators));
}
Also used : OpGroup(org.apache.jena.sparql.algebra.op.OpGroup) ArrayList(java.util.ArrayList) ExprAggregator(org.apache.jena.sparql.expr.ExprAggregator) VarExprList(org.apache.jena.sparql.core.VarExprList)

Example 5 with VarExprList

use of org.apache.jena.sparql.core.VarExprList in project jena by apache.

the class TransformFilterImplicitJoin method safeToTransform.

private static boolean safeToTransform(List<Pair<Var, Var>> joins, Collection<Var> varsEquality, Op op) {
    // Structure as a visitor?
    if (op instanceof OpBGP || op instanceof OpQuadPattern)
        return true;
    if (op instanceof OpFilter) {
        OpFilter opf = (OpFilter) op;
        return safeToTransform(joins, varsEquality, opf.getSubOp());
    }
    // are very rarely so deep that it matters.
    if (op instanceof OpSequence) {
        OpN opN = (OpN) op;
        for (Op subOp : opN.getElements()) {
            if (!safeToTransform(joins, varsEquality, subOp))
                return false;
        }
        return true;
    }
    if (op instanceof OpJoin) {
        Op2 op2 = (Op2) op;
        return safeToTransform(joins, varsEquality, op2.getLeft()) && safeToTransform(joins, varsEquality, op2.getRight());
    }
    if (op instanceof OpUnion) {
        // True only if for any pairs that affect the pattern both variables occur
        Set<Var> fixedVars = OpVars.fixedVars(op);
        for (Pair<Var, Var> pair : joins) {
            if (fixedVars.contains(pair.getLeft()) && !fixedVars.contains(pair.getRight()))
                return false;
            if (!fixedVars.contains(pair.getLeft()) && fixedVars.contains(pair.getRight()))
                return false;
        }
        return true;
    }
    // Not safe unless filter variables are mentioned on the LHS.
    if (op instanceof OpConditional || op instanceof OpLeftJoin) {
        Op2 opleftjoin = (Op2) op;
        if (!safeToTransform(joins, varsEquality, opleftjoin.getLeft()) || !safeToTransform(joins, varsEquality, opleftjoin.getRight()))
            return false;
        // Not only must the left and right be safe to transform,
        // but the equality variable must be known to be always set.
        // If the varsLeft are disjoint from assigned vars,
        // we may be able to push assign down right
        // (this generalises the unit table case specialcase1)
        // Needs more investigation.
        Op opLeft = opleftjoin.getLeft();
        Set<Var> varsLeft = OpVars.visibleVars(opLeft);
        if (varsLeft.containsAll(varsEquality))
            return true;
        return false;
    }
    if (op instanceof OpGraph) {
        OpGraph opg = (OpGraph) op;
        return safeToTransform(joins, varsEquality, opg.getSubOp());
    }
    // Subquery - assume scope rewriting has already been applied.
    if (op instanceof OpModifier) {
        // ORDER BY?
        OpModifier opMod = (OpModifier) op;
        if (opMod instanceof OpProject) {
            OpProject opProject = (OpProject) op;
            // AS-ification.
            for (Var v : opProject.getVars()) {
                if (varsEquality.contains(v))
                    return false;
            }
        }
        return safeToTransform(joins, varsEquality, opMod.getSubOp());
    }
    if (op instanceof OpGroup) {
        OpGroup opGroup = (OpGroup) op;
        VarExprList varExprList = opGroup.getGroupVars();
        return safeToTransform(varsEquality, varExprList) && safeToTransform(joins, varsEquality, opGroup.getSubOp());
    }
    if (op instanceof OpTable) {
        OpTable opTable = (OpTable) op;
        if (opTable.isJoinIdentity())
            return true;
    }
    return false;
}
Also used : Op(org.apache.jena.sparql.algebra.Op) Var(org.apache.jena.sparql.core.Var) VarExprList(org.apache.jena.sparql.core.VarExprList)

Aggregations

VarExprList (org.apache.jena.sparql.core.VarExprList)56 Var (org.apache.jena.sparql.core.Var)26 Test (org.junit.Test)15 Op (org.apache.jena.sparql.algebra.Op)12 ContractTest (org.xenei.junit.contract.ContractTest)12 Query (org.apache.jena.query.Query)10 Expr (org.apache.jena.sparql.expr.Expr)8 ExprVar (org.apache.jena.sparql.expr.ExprVar)7 NodeValueInteger (org.apache.jena.sparql.expr.nodevalue.NodeValueInteger)7 E_Random (org.apache.jena.sparql.expr.E_Random)6 QueryParseException (org.apache.jena.query.QueryParseException)3 ExprAggregator (org.apache.jena.sparql.expr.ExprAggregator)3 Node (org.apache.jena.graph.Node)2 StringReader (java.io.StringReader)1 ArrayList (java.util.ArrayList)1 Map (java.util.Map)1 ExprRewriter (org.apache.jena.arq.querybuilder.rewriters.ExprRewriter)1 SortCondition (org.apache.jena.query.SortCondition)1 OpAssign (org.apache.jena.sparql.algebra.op.OpAssign)1 OpExtend (org.apache.jena.sparql.algebra.op.OpExtend)1