Package com.hp.hpl.jena.sparql.algebra.optimize

Source Code of com.hp.hpl.jena.sparql.algebra.optimize.TestOptimizer

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.hp.hpl.jena.sparql.algebra.optimize;

import org.junit.Test ;
import org.openjena.atlas.junit.BaseTest ;

import com.hp.hpl.jena.query.ARQ ;
import com.hp.hpl.jena.query.Query ;
import com.hp.hpl.jena.query.QueryFactory ;
import com.hp.hpl.jena.sparql.algebra.Algebra ;
import com.hp.hpl.jena.sparql.algebra.Op ;
import com.hp.hpl.jena.sparql.sse.SSE ;

public class TestOptimizer extends BaseTest
{
    // A lot of the optimizer is tested by using the scripted queries.
   
    @Test public void query_rename_01()
    {
        String queryString = 
            "SELECT ?x { ?s ?p ?o . { SELECT ?v { ?x ?y ?v {SELECT ?w { ?a ?y ?w }}} LIMIT 50 } }" ;
        String opExpectedString =
            "(project (?x)\n" +
            "  (join\n" +
            "    (bgp (triple ?s ?p ?o))\n" +
            "    (slice _ 50\n" +
            "      (project (?v)\n" +
            "        (join\n" +
            "          (bgp (triple ?/x ?/y ?v))\n" +
            "          (project (?/w)\n" +
            "            (bgp (triple ?//a ?//y ?/w))))))))";
        check(queryString, opExpectedString) ;
    }


    @Test public void query_rename_02()
    {
        String queryString =
            "SELECT ?x { ?s ?p ?o . { SELECT ?v { ?x ?y ?v {SELECT * { ?a ?y ?w }}} LIMIT 50 } }" 
        String opExpectedString =
            "(project (?x)\n" +
            "  (join\n" +
            "    (bgp (triple ?s ?p ?o))\n" +
            "    (slice _ 50\n" +
            "      (project (?v)\n" +
            "        (sequence\n" +
            "          (bgp (triple ?/x ?/y ?v))\n" +
            "          (bgp (triple ?/a ?/y ?/w)))))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void query_rename_03()
    {
        String queryString = "SELECT ?x { ?s ?p ?o . { SELECT * { ?x ?y ?v {SELECT ?w { ?a ?y ?w }}} LIMIT 50 } }"
        String opExpectedString =
            "(project (?x)\n" +
            "  (join\n" +
            "    (bgp (triple ?s ?p ?o))\n" +
            "    (slice _ 50\n" +
            "      (join\n" +
            "        (bgp (triple ?x ?y ?v))\n" +
            "        (project (?w)\n" +
            "          (bgp (triple ?/a ?/y ?w)))))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void query_rename_04()
    {
        String queryString = "SELECT * { ?s ?p ?o . { SELECT ?v { ?x ?y ?v {SELECT ?w { ?a ?y ?w }}} LIMIT 50 } }"
        String opExpectedString =
            "(join\n" +
            "  (bgp (triple ?s ?p ?o))\n" +
            "  (slice _ 50\n" +
            "    (project (?v)\n" +
            "      (join\n" +
            "        (bgp (triple ?/x ?/y ?v))\n" +
            "        (project (?/w)\n" +
            "          (bgp (triple ?//a ?//y ?/w)))))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void query_rename_05()
    {
        String queryString = "SELECT ?v { ?s ?p ?o . { SELECT ?v { ?x ?y ?v {SELECT ?w { ?a ?y ?w }}} LIMIT 50 } }"   
        String opExpectedString =
            "(project (?v)\n" +
            "  (join\n" +
            "    (bgp (triple ?s ?p ?o))\n" +
            "    (slice _ 50\n" +
            "      (project (?v)\n" +
            "        (join\n" +
            "          (bgp (triple ?/x ?/y ?v))\n" +
            "          (project (?/w)\n" +
            "            (bgp (triple ?//a ?//y ?/w))))))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void query_rename_06()
    {
        String queryString = "SELECT ?w { ?s ?p ?o . { SELECT ?w { ?x ?y ?v {SELECT ?w { ?a ?y ?w }}} } } LIMIT 50"
        String opExpectedString =
            "(slice _ 50\n" +
            "  (project (?w)\n" +
            "    (join\n" +
            "      (bgp (triple ?s ?p ?o))\n" +
            "      (project (?w)\n" +
            "        (join\n" +
            "          (bgp (triple ?/x ?/y ?/v))\n" +
            "          (project (?w)\n" +
            "            (bgp (triple ?//a ?//y ?w))))))))\n" +
            "" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void query_rename_07()
    {
        String queryString = "SELECT * { ?s ?p ?o . { SELECT ?w { ?x ?y ?v }}}" 
        String opExpectedString =
            "(join\n" +
            "  (bgp (triple ?s ?p ?o))\n" +
            "  (project (?w)\n" +
            "    (bgp (triple ?/x ?/y ?/v))))" ;
        check(queryString, opExpectedString) ;
    }
   
    @Test public void slice_order_to_topn_01()
    {
        assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
        String queryString = "SELECT * { ?s ?p ?o } ORDER BY ?p ?o LIMIT 42" 
        String opExpectedString =
            "(top (42 ?p ?o)\n" +
            "  (bgp (triple ?s ?p ?o)))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void slice_order_to_topn_02()
    {
        assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
        String queryString = "SELECT * { ?s ?p ?o } ORDER BY ?p ?o LIMIT 4242" 
        String opExpectedString =
          "(slice _ 4242\n" +
          "  (order (?p ?o)\n" +
            "    (bgp (triple ?s ?p ?o))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void slice_order_to_topn_03()
    {
        assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
        String queryString = "SELECT * { ?s ?p ?o } ORDER BY ?p ?o OFFSET 4242 LIMIT 10" 
        String opExpectedString =
            "(slice 4242 10\n" +
            "  (order (?p ?o)\n" +
            "    (bgp (triple ?s ?p ?o))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void slice_order_to_topn_04()
    {
        try {
            ARQ.setFalse(ARQ.optTopNSorting) ;
            assertTrue(ARQ.isFalse(ARQ.optTopNSorting)) ;
            String queryString = "SELECT * { ?s ?p ?o } ORDER BY ?p ?o LIMIT 42" 
            String opExpectedString =
                "(slice _ 42\n" +
                "  (order (?p ?o)\n" +
                "    (bgp (triple ?s ?p ?o))))" ;
            check(queryString, opExpectedString) ;
        } finally {
            ARQ.unset(ARQ.optTopNSorting) ;
        }
    }

    @Test public void slice_order_to_topn_05()
    {
        assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
        String queryString = "SELECT DISTINCT * { ?s ?p ?o } ORDER BY ?p ?o LIMIT 42" 
        String opExpectedString =
            "(top (42 ?p ?o)\n" +
            "  (distinct\n" +
            "     (bgp (triple ?s ?p ?o))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void slice_order_to_topn_06()
    {
        assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
        String queryString = "SELECT DISTINCT * { ?s ?p ?o } ORDER BY ?p ?o OFFSET 24 LIMIT 42" 
        String opExpectedString =
            "(slice 24 _\n" +
            "  (top (66 ?p ?o)\n" +
            "    (distinct\n" +
            "       (bgp (triple ?s ?p ?o)))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void slice_order_to_topn_07()
    {
        assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
        String queryString = "SELECT REDUCED * { ?s ?p ?o } ORDER BY ?p ?o LIMIT 42" 
        String opExpectedString =
            "(top (42 ?p ?o)\n" +
            "  (distinct\n" +
            "     (bgp (triple ?s ?p ?o))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void slice_order_to_topn_08()
    {
        assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
        String queryString = "SELECT DISTINCT * { ?s ?p ?o } ORDER BY ?p ?o LIMIT 4242" 
        String opExpectedString =
            "(slice _ 4242\n" +
            "  (reduced\n" +
            "    (order (?p ?o)\n" +
            "      (bgp (triple ?s ?p ?o)))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void slice_order_to_topn_09()
    {
        assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
        String queryString = "SELECT REDUCED * { ?s ?p ?o } ORDER BY ?p ?o LIMIT 4242" 
        String opExpectedString =
            "(slice _ 4242\n" +
            "  (reduced\n" +
            "    (order (?p ?o)\n" +
            "      (bgp (triple ?s ?p ?o)))))" ;
        check(queryString, opExpectedString) ;
    }
   
    @Test public void slice_order_to_topn_10()
    {
        assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
        String queryString = "SELECT * { ?s ?p ?o } ORDER BY ?p ?o OFFSET 1 LIMIT 5" 
        String opExpectedString =
            "(slice 1 _\n" +
            "  (top (6 ?p ?o)\n" +
            "    (bgp (triple ?s ?p ?o))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void slice_order_to_topn_11()
    {
        assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
        String queryString = "SELECT ?s { ?s ?p ?o } ORDER BY ?p ?o OFFSET 1 LIMIT 5" 
        String opExpectedString =
            "(slice 1 _\n" +
            "  (project (?s)\n" +
            "    (top (6 ?p ?o)\n" +
            "      (bgp (triple ?s ?p ?o)))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void slice_order_to_topn_12()
    {
        assertTrue(ARQ.isTrueOrUndef(ARQ.optTopNSorting)) ;
        String queryString = "SELECT ?s { ?s ?p ?o } ORDER BY ?p ?o LIMIT 42" 
        String opExpectedString =
            "(project (?s)\n" +
            "  (top (42 ?p ?o)\n" +
            "    (bgp (triple ?s ?p ?o))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void distinct_to_reduced_01()
    {
        assertTrue(ARQ.isTrueOrUndef(ARQ.optDistinctToReduced)) ;
        String queryString = "SELECT DISTINCT * { ?s ?p ?o } ORDER BY ?p ?o" 
        String opExpectedString =
            "(reduced\n" +
            "  (order (?p ?o)\n" +
            "    (bgp (triple ?s ?p ?o))))" ;
        check(queryString, opExpectedString) ;
    }

    @Test public void distinct_to_reduced_02()
    {
        try {
            ARQ.setFalse(ARQ.optDistinctToReduced) ;
            assertTrue(ARQ.isFalse(ARQ.optDistinctToReduced)) ;
            String queryString = "SELECT DISTINCT * { ?s ?p ?o } ORDER BY ?p ?o" 
            String opExpectedString =
                "(distinct\n" +
                "  (order (?p ?o)\n" +
                "    (bgp (triple ?s ?p ?o))))" ;
            check(queryString, opExpectedString) ;
        } finally {
            ARQ.unset(ARQ.optDistinctToReduced) ;
        }
    }
   
    private static void check(String queryString, String opExpectedString)
    {
        queryString = "PREFIX : <http://example/>\n"+queryString ;
        Query query = QueryFactory.create(queryString) ;
        Op opQuery = Algebra.compile(query) ;
        check(opQuery, opExpectedString) ;
    }

    private static void check(Op opToOptimize, String opExpectedString)
    {
        Op opOptimize = Algebra.optimize(opToOptimize) ;
        Op opExpected = SSE.parseOp(opExpectedString) ;
        assertEquals(opExpected, opOptimize) ;
    }
   
}
TOP

Related Classes of com.hp.hpl.jena.sparql.algebra.optimize.TestOptimizer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.