Search in sources :

Example 1 with TextOutput

use of org.apache.jena.sparql.resultset.TextOutput in project jena by apache.

the class TestSemanticEquivalence method testAsAlgebra.

/**
     * Tests whether an algebra expression gives the same results when run both
     * with and without a given optimizer
     * 
     * @param algStr
     *            Algebra
     * @param ds
     *            Dataset
     * @param opt
     *            Optimizer
     * @param expected
     *            Expected number of results
     */
public static void testAsAlgebra(String algStr, Dataset ds, Symbol opt, int expected) {
    Op op = SSE.parseOp(algStr);
    List<String> vars = new ArrayList<>();
    for (Var v : OpVars.visibleVars(op)) {
        vars.add(v.getName());
    }
    // Track current state
    boolean isEnabled = ARQ.isTrue(opt);
    boolean isDisabled = ARQ.isFalse(opt);
    try {
        // Run first without optimization
        ARQ.set(opt, false);
        QueryEngineMain engine = new QueryEngineMain(op, ds.asDatasetGraph(), BindingFactory.binding(), ARQ.getContext());
        QueryIterator iter = engine.eval(op, ds.asDatasetGraph(), BindingFactory.binding(), ARQ.getContext());
        ResultSetRewindable rs = ResultSetFactory.makeRewindable(new ResultSetStream(vars, ModelFactory.createDefaultModel(), iter));
        if (expected != rs.size()) {
            System.err.println("Non-optimized results not as expected");
            TextOutput output = new TextOutput((SerializationContext) null);
            output.format(System.out, rs);
            rs.reset();
        }
        Assert.assertEquals(expected, rs.size());
        iter.close();
        // Run with optimization
        ARQ.set(opt, true);
        engine = new QueryEngineMain(op, ds.asDatasetGraph(), BindingFactory.binding(), ARQ.getContext());
        QueryIterator iterOpt = engine.eval(op, ds.asDatasetGraph(), BindingFactory.binding(), ARQ.getContext());
        ResultSetRewindable rsOpt = ResultSetFactory.makeRewindable(new ResultSetStream(vars, ModelFactory.createDefaultModel(), iterOpt));
        if (expected != rsOpt.size()) {
            System.err.println("Optimized results not as expected");
            TextOutput output = new TextOutput((SerializationContext) null);
            output.format(System.out, rsOpt);
            rsOpt.reset();
        }
        Assert.assertEquals(expected, rsOpt.size());
        iterOpt.close();
        Assert.assertTrue(ResultSetCompare.isomorphic(rs, rsOpt));
    } finally {
        // Restore previous state
        if (isEnabled) {
            ARQ.set(opt, true);
        } else if (isDisabled) {
            ARQ.set(opt, false);
        } else {
            ARQ.unset(opt);
        }
    }
}
Also used : TextOutput(org.apache.jena.sparql.resultset.TextOutput) Op(org.apache.jena.sparql.algebra.Op) QueryEngineMain(org.apache.jena.sparql.engine.main.QueryEngineMain) QueryIterator(org.apache.jena.sparql.engine.QueryIterator) Var(org.apache.jena.sparql.core.Var) ArrayList(java.util.ArrayList) ResultSetStream(org.apache.jena.sparql.engine.ResultSetStream)

Example 2 with TextOutput

use of org.apache.jena.sparql.resultset.TextOutput in project jena by apache.

the class TestSemanticEquivalence method test.

/**
     * Tests whether a query gives the same results when run both with and
     * without a given optimizer
     * 
     * @param queryStr
     *            Query
     * @param ds
     *            Dataset
     * @param opt
     *            Optimizer
     * @param expected
     *            Expected number of results
     */
public static void test(String queryStr, Dataset ds, Symbol opt, int expected) {
    Query q = QueryFactory.create(queryStr);
    if (!q.isSelectType())
        Assert.fail("Only SELECT queries are testable with this method");
    Op op = Algebra.compile(q);
    // Track current state
    boolean isEnabled = ARQ.isTrue(opt);
    boolean isDisabled = ARQ.isFalse(opt);
    try {
        // Run first without optimization
        ARQ.set(opt, false);
        ResultSetRewindable rs;
        try (QueryExecution qe = QueryExecutionFactory.create(q, ds)) {
            rs = ResultSetFactory.makeRewindable(qe.execSelect());
            if (expected != rs.size()) {
                System.err.println("Non-optimized results not as expected");
                TextOutput output = new TextOutput((SerializationContext) null);
                output.format(System.out, rs);
                rs.reset();
            }
            Assert.assertEquals(expected, rs.size());
        }
        // Run with optimization
        ARQ.set(opt, true);
        ResultSetRewindable rsOpt;
        try (QueryExecution qeOpt = QueryExecutionFactory.create(q, ds)) {
            rsOpt = ResultSetFactory.makeRewindable(qeOpt.execSelect());
            if (expected != rsOpt.size()) {
                System.err.println("Optimized results not as expected");
                TextOutput output = new TextOutput((SerializationContext) null);
                output.format(System.out, rsOpt);
                rsOpt.reset();
            }
            Assert.assertEquals(expected, rsOpt.size());
        }
        Assert.assertTrue(ResultSetCompare.isomorphic(rs, rsOpt));
    } finally {
        // Restore previous state
        if (isEnabled) {
            ARQ.set(opt, true);
        } else if (isDisabled) {
            ARQ.set(opt, false);
        } else {
            ARQ.unset(opt);
        }
    }
}
Also used : TextOutput(org.apache.jena.sparql.resultset.TextOutput) Op(org.apache.jena.sparql.algebra.Op)

Aggregations

Op (org.apache.jena.sparql.algebra.Op)2 TextOutput (org.apache.jena.sparql.resultset.TextOutput)2 ArrayList (java.util.ArrayList)1 Var (org.apache.jena.sparql.core.Var)1 QueryIterator (org.apache.jena.sparql.engine.QueryIterator)1 ResultSetStream (org.apache.jena.sparql.engine.ResultSetStream)1 QueryEngineMain (org.apache.jena.sparql.engine.main.QueryEngineMain)1