All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bigdata.rdf.sparql.ast.eval.TestDefaultGraphs Maven / Gradle / Ivy

There is a newer version: 2.1.4
Show newest version
/**

Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016.  All rights reserved.

Contact:
     SYSTAP, LLC DBA Blazegraph
     2501 Calvert ST NW #106
     Washington, DC 20008
     [email protected]

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
/*
 * Created on Nov 19, 2011
 */

package com.bigdata.rdf.sparql.ast.eval;

import com.bigdata.bop.BOp;
import com.bigdata.bop.IPredicate;
import com.bigdata.bop.PipelineOp;
import com.bigdata.bop.ap.filter.BOpResolver;
import com.bigdata.bop.join.AccessPathJoinAnnotations;
import com.bigdata.bop.rdf.filter.NativeDistinctFilter;
import com.bigdata.rdf.sparql.ast.ASTContainer;
import com.bigdata.rdf.spo.SPOPredicate;

/**
 * Unit tests for default graph semantics ported from the old
 * TestDefaultGraphAccessPath class. The data set for these tests is:
 * 
 * 
 * :c1 {
 *   :john :loves :mary .
 * }
 * :c2 {
 *   :mary :loves :paul .
 * }
 * :c4 {
 *   :paul :loves :sam .
 * }
 * 
* * @author Bryan Thompson * @version $Id$ */ public class TestDefaultGraphs extends AbstractDataDrivenSPARQLTestCase { /** * */ public TestDefaultGraphs() { } /** * @param name */ public TestDefaultGraphs(String name) { super(name); } /** * No graphs in the defaultGraphs set (none of the specified graphs in the * default graph exist in the database). * *
     * SELECT ?s ?p ?o
     * FROM :c0
     * WHERE {
     *     ?s ?p ?o
     * }
     * 
*/ public void test_defaultGraphs_01a() throws Exception { if(!store.isQuads()) return; new TestHelper( "default-graphs-01a",// testURI "default-graphs-01a.rq", // queryURI "default-graphs-01.trig", // dataURI "default-graphs-01a.srx" // resultURI ).runTest(); } /** * One graph in the defaultGraphs set. *

* Note: This case gets handled specially. */ public void test_defaultGraphs_01b() throws Exception { if(!store.isQuads()) return; new TestHelper( "default-graphs-01b",// testURI "default-graphs-01b.rq", // queryURI "default-graphs-01.trig", // dataURI "default-graphs-01b.srx" // resultURI ).runTest(); } /** * Two graphs in the defaultGraphs set. */ public void test_defaultGraphs_01c() throws Exception { if(!store.isQuads()) return; new TestHelper( "default-graphs-01c",// testURI "default-graphs-01c.rq", // queryURI "default-graphs-01.trig", // dataURI "default-graphs-01c.srx" // resultURI ).runTest(); } /** * Two graphs in the defaultGraphs set, but the query uses a more restricted * bindings (john is bound as the subject). */ public void test_defaultGraphs_01d() throws Exception { if(!store.isQuads()) return; new TestHelper( "default-graphs-01d",// testURI "default-graphs-01d.rq", // queryURI "default-graphs-01.trig", // dataURI "default-graphs-01d.srx" // resultURI ).runTest(); } /** * Two graphs in the defaultGraphs set, but the query uses a more restricted * bindings (mary is bound as the subject). */ public void test_defaultGraphs_01e() throws Exception { if(!store.isQuads()) return; new TestHelper( "default-graphs-01e",// testURI "default-graphs-01e.rq", // queryURI "default-graphs-01.trig", // dataURI "default-graphs-01e.srx" // resultURI ).runTest(); } /** * Two graphs in the defaultGraphs set, but the query uses a more restricted * bindings (mary is bound as the object). */ public void test_defaultGraphs_01f() throws Exception { if(!store.isQuads()) return; new TestHelper( "default-graphs-01f",// testURI "default-graphs-01f.rq", // queryURI "default-graphs-01.trig", // dataURI "default-graphs-01f.srx" // resultURI ).runTest(); } /** * Query with more restricted bindings (john is bound as the subject and * paul is bound as the object, so there are no solutions). */ public void test_defaultGraphs_01g() throws Exception { if(!store.isQuads()) return; new TestHelper( "default-graphs-01g",// testURI "default-graphs-01g.rq", // queryURI "default-graphs-01.trig", // dataURI "default-graphs-01g.srx" // resultURI ).runTest(); } /** * Default graph is null (that is, it is not specified at the SPARQL level * or at the protocol level and therefore defaults to addressing ALL graphs * in the kb instance). *

* Note: This case gets handled specially. */ public void test_defaultGraphs_01h() throws Exception { if(!store.isQuads()) return; new TestHelper( "default-graphs-01h",// testURI "default-graphs-01h.rq", // queryURI "default-graphs-01.trig", // dataURI "default-graphs-01h.srx" // resultURI ).runTest(); } /** * Default graph is null (that is, it is not specified at the SPARQL level * or at the protocol level and therefore defaults to addressing ALL graphs * in the kb instance). In addition, we have a query hint disabling the * default graph access filter. * * Given that there are no duplicate triples (i.e., no triple resides in * more than one named graph), this query still gives us the correct result. * We also check that there is no distinct filter in the query plan. */ public void test_defaultGraphs_01i() throws Exception { if(!store.isQuads()) return; final ASTContainer astContainer = new TestHelper( "default-graphs-01i",// testURI "default-graphs-01i.rq", // queryURI "default-graphs-01.trig", // dataURI "default-graphs-01i.srx" // resultURI ).runTest(); final PipelineOp queryPlan = astContainer.getQueryPlan(); final BOp pipelineJoin = queryPlan.get(0); final SPOPredicate spoPred = (SPOPredicate)pipelineJoin.annotations().get(AccessPathJoinAnnotations.PREDICATE); final Object filter = spoPred.annotations().get(IPredicate.Annotations.ACCESS_PATH_FILTER); // distinct filter disabled via query hint assertFalse(filter instanceof NativeDistinctFilter); } /** * We add another, duplicate triple to the dataset, namely: * :c5 { :paul :loves :sam . } (which already occurs in :c4) and submit a * simple query extracting all triples (without query hint). This test * ensures that, in the standard configuration, the distinct filter is * applied and our result contains the triple only once. * We also check that there is a distinct filter in the query plan. */ public void test_defaultGraphs_01j() throws Exception { if(!store.isQuads()) return; final ASTContainer astContainer = new TestHelper( "default-graphs-01j",// testURI "default-graphs-01j.rq", // queryURI "default-graphs-01jk.trig", // dataURI "default-graphs-01j.srx" // resultURI ).runTest(); final PipelineOp queryPlan = astContainer.getQueryPlan(); final BOp pipelineJoin = queryPlan.get(0); final SPOPredicate spoPred = (SPOPredicate)pipelineJoin.annotations().get(AccessPathJoinAnnotations.PREDICATE); final Object filter = spoPred.annotations().get(IPredicate.Annotations.ACCESS_PATH_FILTER); // distinct filter must be enabled by default assertTrue(filter.toString().contains("DistinctFilter()")); } /** * We add another, duplicate triple to the dataset, namely: * :c5 { :paul :loves :sam . } (which already occurs in :c4) and submit a * simple query extracting all triples with query hint disabling the default * path access filter. Consequently, we get the wrong result, with the triple * above being contained twice in the result. */ public void test_defaultGraphs_01k() throws Exception { if(!store.isQuads()) return; final ASTContainer astContainer = new TestHelper( "default-graphs-01k",// testURI "default-graphs-01k.rq", // queryURI "default-graphs-01jk.trig", // dataURI "default-graphs-01k.srx" // resultURI ).runTest(); final PipelineOp queryPlan = astContainer.getQueryPlan(); final BOp pipelineJoin = queryPlan.get(0); final SPOPredicate spoPred = (SPOPredicate)pipelineJoin.annotations().get(AccessPathJoinAnnotations.PREDICATE); final Object filter = spoPred.annotations().get(IPredicate.Annotations.ACCESS_PATH_FILTER); // distinct filter disabled via query hint assertFalse(filter instanceof NativeDistinctFilter); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy