RYA-34 fixing inference with mongo db
Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/efcae829 Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/efcae829 Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/efcae829 Branch: refs/heads/develop Commit: efcae829c97e78b122b0d27586dd2a74e00005c3 Parents: c4d44eb Author: pujav65 <[email protected]> Authored: Mon Feb 29 15:15:52 2016 -0500 Committer: Aaron Mihalik <[email protected]> Committed: Mon Mar 14 14:40:47 2016 -0400 ---------------------------------------------------------------------- .../mvm/rya/sail/config/RyaSailFactory.java | 39 +- .../external/AccumuloIndexSetTest2.java | 804 +++++++++++++++++++ .../PrecompJoinOptimizerIntegrationTest.java | 484 +++++++++++ .../src/main/java/MongoRyaDirectExample.java | 40 +- .../inference/InferenceEngine.java | 1 + 5 files changed, 1350 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/efcae829/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java b/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java index f4f770a..bc11a79 100644 --- a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java +++ b/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java @@ -1,5 +1,11 @@ package mvm.rya.sail.config; +import org.apache.accumulo.core.client.AccumuloException; +import org.apache.accumulo.core.client.AccumuloSecurityException; +import org.apache.accumulo.core.client.Connector; +import org.apache.hadoop.conf.Configuration; +import org.openrdf.sail.Sail; + /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -23,49 +29,48 @@ package mvm.rya.sail.config; import mvm.rya.accumulo.AccumuloRdfConfiguration; import mvm.rya.accumulo.AccumuloRyaDAO; import mvm.rya.api.RdfCloudTripleStoreConfiguration; +import mvm.rya.api.persist.RyaDAO; import mvm.rya.api.persist.RyaDAOException; import mvm.rya.indexing.accumulo.ConfigUtils; import mvm.rya.mongodb.MongoDBRdfConfiguration; import mvm.rya.mongodb.MongoDBRyaDAO; import mvm.rya.rdftriplestore.RdfCloudTripleStore; - -import org.apache.accumulo.core.client.AccumuloException; -import org.apache.accumulo.core.client.AccumuloSecurityException; -import org.apache.accumulo.core.client.Connector; -import org.apache.hadoop.conf.Configuration; -import org.openrdf.sail.Sail; +import mvm.rya.rdftriplestore.inference.InferenceEngine; +import mvm.rya.rdftriplestore.inference.InferenceEngineException; public class RyaSailFactory { public static Sail getInstance(Configuration conf) throws AccumuloException, - AccumuloSecurityException, RyaDAOException { + AccumuloSecurityException, RyaDAOException, InferenceEngineException { return getRyaSail(conf); } - private static Sail getRyaSail(Configuration config) throws AccumuloException, AccumuloSecurityException, RyaDAOException { + private static Sail getRyaSail(Configuration config) throws AccumuloException, AccumuloSecurityException, RyaDAOException, InferenceEngineException { RdfCloudTripleStore store = new RdfCloudTripleStore(); + RyaDAO crdfdao = null; + RdfCloudTripleStoreConfiguration conf; if (ConfigUtils.getUseMongo(config)) { - MongoDBRdfConfiguration conf = new MongoDBRdfConfiguration(config); + conf = new MongoDBRdfConfiguration(config); conf.setTablePrefix(config.get(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX)); ConfigUtils.setIndexers(conf); - MongoDBRyaDAO crdfdao = new MongoDBRyaDAO(conf); + crdfdao = new MongoDBRyaDAO((MongoDBRdfConfiguration)conf); crdfdao.init(); conf.setDisplayQueryPlan(true); store.setRyaDAO(crdfdao); } else { Connector connector = ConfigUtils.getConnector(config); - AccumuloRyaDAO crdfdao = new AccumuloRyaDAO(); - crdfdao.setConnector(connector); + crdfdao = new AccumuloRyaDAO(); + ((AccumuloRyaDAO)crdfdao).setConnector(connector); - AccumuloRdfConfiguration conf = new AccumuloRdfConfiguration(config); + conf = new AccumuloRdfConfiguration(config); conf.setTablePrefix(config.get(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX)); // sets // TablePrefixLayoutStrategy ConfigUtils.setIndexers(conf); @@ -75,6 +80,14 @@ public class RyaSailFactory { crdfdao.init(); store.setRyaDAO(crdfdao); } + + if (conf.isInfer()){ + InferenceEngine inferenceEngine = new InferenceEngine(); + inferenceEngine.setConf(conf); + inferenceEngine.setRyaDAO(crdfdao); + inferenceEngine.init(); + store.setInferenceEngine(inferenceEngine); + } return store; } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/efcae829/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloIndexSetTest2.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloIndexSetTest2.java b/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloIndexSetTest2.java new file mode 100644 index 0000000..54beecd --- /dev/null +++ b/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloIndexSetTest2.java @@ -0,0 +1,804 @@ +package mvm.rya.indexing.external; + +/* + * 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. + */ + + +import java.util.Arrays; +import java.util.List; + +import junit.framework.Assert; +import mvm.rya.accumulo.AccumuloRdfConfiguration; +import mvm.rya.api.persist.RyaDAOException; +import mvm.rya.indexing.RyaSailFactory; +import mvm.rya.indexing.accumulo.ConfigUtils; +import mvm.rya.indexing.external.tupleSet.AccumuloIndexSet; +import mvm.rya.rdftriplestore.inference.InferenceEngineException; + +import org.apache.accumulo.core.client.AccumuloException; +import org.apache.accumulo.core.client.AccumuloSecurityException; +import org.apache.accumulo.core.client.Connector; +import org.apache.accumulo.core.client.MutationsRejectedException; +import org.apache.accumulo.core.client.TableExistsException; +import org.apache.accumulo.core.client.TableNotFoundException; +import org.apache.accumulo.core.client.mock.MockInstance; +import org.apache.accumulo.core.client.security.tokens.PasswordToken; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.openrdf.model.URI; +import org.openrdf.model.impl.LiteralImpl; +import org.openrdf.model.impl.URIImpl; +import org.openrdf.model.vocabulary.RDF; +import org.openrdf.model.vocabulary.RDFS; +import org.openrdf.query.BindingSet; +import org.openrdf.query.MalformedQueryException; +import org.openrdf.query.QueryEvaluationException; +import org.openrdf.query.QueryLanguage; +import org.openrdf.query.QueryResultHandlerException; +import org.openrdf.query.TupleQueryResultHandler; +import org.openrdf.query.TupleQueryResultHandlerException; +import org.openrdf.repository.RepositoryException; +import org.openrdf.repository.sail.SailRepository; +import org.openrdf.repository.sail.SailRepositoryConnection; +import org.openrdf.sail.Sail; +import org.openrdf.sail.SailException; + +public class AccumuloIndexSetTest2 { + + private SailRepositoryConnection conn; + private SailRepository repo; + private Connector accCon; + String tablePrefix = "table_"; + AccumuloRdfConfiguration conf; + URI sub, sub2, obj, obj2, subclass, subclass2, talksTo; + + @Before + public void init() throws RepositoryException, TupleQueryResultHandlerException, QueryEvaluationException, + MalformedQueryException, AccumuloException, AccumuloSecurityException, TableExistsException, + RyaDAOException, InferenceEngineException { + + conf = new AccumuloRdfConfiguration(); + conf.set(ConfigUtils.USE_PCJ, "true"); + conf.set(ConfigUtils.USE_MOCK_INSTANCE, "true"); + conf.set(ConfigUtils.CLOUDBASE_INSTANCE, "instance"); + conf.setTablePrefix(tablePrefix); + conf.setPcjTables(Arrays.asList("table1", "table2")); + + Sail sail = RyaSailFactory.getInstance(conf); + repo = new SailRepository(sail); + repo.initialize(); + conn = repo.getConnection(); + + sub = new URIImpl("uri:entity"); + subclass = new URIImpl("uri:class"); + obj = new URIImpl("uri:obj"); + talksTo = new URIImpl("uri:talksTo"); + + conn.add(sub, RDF.TYPE, subclass); + conn.add(sub, RDFS.LABEL, new LiteralImpl("label")); + conn.add(sub, talksTo, obj); + + sub2 = new URIImpl("uri:entity2"); + subclass2 = new URIImpl("uri:class2"); + obj2 = new URIImpl("uri:obj2"); + + conn.add(sub2, RDF.TYPE, subclass2); + conn.add(sub2, RDFS.LABEL, new LiteralImpl("label2")); + conn.add(sub2, talksTo, obj2); + + accCon = new MockInstance("instance").getConnector("root", new PasswordToken("".getBytes())); + accCon.tableOperations().create("table1"); + accCon.tableOperations().create("table2"); + + } + + @After + public void close() throws RepositoryException, AccumuloException, AccumuloSecurityException, + TableNotFoundException { + + conf = null; + conn.close(); + accCon.tableOperations().delete(tablePrefix + "spo"); + accCon.tableOperations().delete(tablePrefix + "po"); + accCon.tableOperations().delete(tablePrefix + "osp"); + + if (accCon.tableOperations().exists("table1")) { + accCon.tableOperations().delete("table1"); + } + + if (accCon.tableOperations().exists("table2")) { + accCon.tableOperations().delete("table2"); + } + + } + + @Test + public void testEvaluateTwoIndexTwoVarOrder2() throws RepositoryException, MalformedQueryException, SailException, + QueryEvaluationException, MutationsRejectedException, TableNotFoundException, + TupleQueryResultHandlerException { + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + String indexSparqlString = ""// + + "SELECT ?c ?e ?l " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?e ?o ?l " // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String queryString = ""// + + "SELECT ?e ?c ?l ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "// + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, "table1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, "table2"); + + CountingResultHandler crh = new CountingResultHandler(); + + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(2, crh.getCount()); + + } + + @Test + public void testEvaluateTwoIndexTwoVarInvalidOrder() throws RepositoryException, MalformedQueryException, + SailException, QueryEvaluationException, MutationsRejectedException, TableNotFoundException, + TupleQueryResultHandlerException { + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + String indexSparqlString = ""// + + "SELECT ?e ?c ?l " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?e ?o ?l " // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String queryString = ""// + + "SELECT ?e ?c ?l ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "// + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, "table1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, "table2"); + + CountingResultHandler crh = new CountingResultHandler(); + + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(2, crh.getCount()); + + } + + @Test + public void testEvaluateTwoIndexThreeVarOrder1() throws MalformedQueryException, SailException, + QueryEvaluationException, MutationsRejectedException, TableNotFoundException, RepositoryException, + TupleQueryResultHandlerException { + + URI superclass = new URIImpl("uri:superclass"); + URI superclass2 = new URIImpl("uri:superclass2"); + + conn.add(subclass, RDF.TYPE, superclass); + conn.add(subclass2, RDF.TYPE, superclass2); + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + String indexSparqlString = ""// + + "SELECT ?c ?e ?l " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?e ?c ?l ?f ?o" // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + String queryString = ""// + + "SELECT ?e ?c ?l ?f ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, "table1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, "table2"); + + CountingResultHandler crh = new CountingResultHandler(); + + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(2, crh.getCount()); + + } + + // @Test + public void testEvaluateTwoIndexThreeVarsDiffLabel() throws RepositoryException, MalformedQueryException, + SailException, QueryEvaluationException, MutationsRejectedException, TableNotFoundException, + TupleQueryResultHandlerException { + + URI superclass = new URIImpl("uri:superclass"); + URI superclass2 = new URIImpl("uri:superclass2"); + conn.add(subclass, RDF.TYPE, superclass); + conn.add(subclass2, RDF.TYPE, superclass2); + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + // TODO Auto-generated method stub + String indexSparqlString = ""// + + "SELECT ?dog ?pig ?owl " // + + "{" // + + " ?pig a ?dog . "// + + " ?pig <http://www.w3.org/2000/01/rdf-schema#label> ?owl "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?e ?c ?l ?f ?o" // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + String queryString = ""// + + "SELECT ?e ?c ?l ?f ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, "table1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, "table2"); + + CountingResultHandler crh = new CountingResultHandler(); + + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(2, crh.getCount()); + + } + + @Test + public void testEvaluateTwoIndexThreeVarOrder2() throws RepositoryException, MalformedQueryException, + SailException, QueryEvaluationException, MutationsRejectedException, TableNotFoundException, + TupleQueryResultHandlerException { + + URI superclass = new URIImpl("uri:superclass"); + URI superclass2 = new URIImpl("uri:superclass2"); + + conn.add(subclass, RDF.TYPE, superclass); + conn.add(subclass2, RDF.TYPE, superclass2); + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + // TODO Auto-generated method stub + String indexSparqlString = ""// + + "SELECT ?c ?e ?l " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?o ?f ?e ?c ?l " // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + String queryString = ""// + + "SELECT ?e ?c ?l ?f ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, "table1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, "table2"); + + CountingResultHandler crh = new CountingResultHandler(); + + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(2, crh.getCount()); + + } + + @Test + public void testEvaluateTwoIndexThreeVarOrder3ThreeBindingSet() throws TupleQueryResultHandlerException, + QueryEvaluationException, MalformedQueryException, RepositoryException, SailException, + MutationsRejectedException, TableNotFoundException { + + URI sub3 = new URIImpl("uri:entity3"); + URI subclass3 = new URIImpl("uri:class3"); + URI obj3 = new URIImpl("uri:obj3"); + + URI superclass = new URIImpl("uri:superclass"); + URI superclass2 = new URIImpl("uri:superclass2"); + URI superclass3 = new URIImpl("uri:superclass3"); + + conn.add(sub3, RDF.TYPE, subclass3); + conn.add(sub3, RDFS.LABEL, new LiteralImpl("label3")); + conn.add(sub3, talksTo, obj3); + + conn.add(subclass, RDF.TYPE, superclass); + conn.add(subclass2, RDF.TYPE, superclass2); + conn.add(subclass3, RDF.TYPE, superclass3); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + conn.add(obj3, RDFS.LABEL, new LiteralImpl("label3")); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + String indexSparqlString = ""// + + "SELECT ?c ?e ?l " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?o ?f ?l ?e ?c " // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + String queryString = ""// + + "SELECT ?e ?c ?l ?f ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, "table1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, "table2"); + + CountingResultHandler crh = new CountingResultHandler(); + + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(3, crh.getCount()); + + } + + @Test + public void testEvaluateTwoIndexThreeVarOrder5ThreeBindingSet() throws MalformedQueryException, SailException, + QueryEvaluationException, MutationsRejectedException, TableNotFoundException, RepositoryException, + TupleQueryResultHandlerException { + + URI sub3 = new URIImpl("uri:entity3"); + URI subclass3 = new URIImpl("uri:class3"); + URI obj3 = new URIImpl("uri:obj3"); + + URI superclass = new URIImpl("uri:superclass"); + URI superclass2 = new URIImpl("uri:superclass2"); + URI superclass3 = new URIImpl("uri:superclass3"); + + conn.add(sub3, RDF.TYPE, subclass3); + conn.add(sub3, RDFS.LABEL, new LiteralImpl("label3")); + conn.add(sub3, talksTo, obj3); + + conn.add(subclass, RDF.TYPE, superclass); + conn.add(subclass2, RDF.TYPE, superclass2); + conn.add(subclass3, RDF.TYPE, superclass3); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + conn.add(obj3, RDFS.LABEL, new LiteralImpl("label3")); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + // TODO Auto-generated method stub + String indexSparqlString = ""// + + "SELECT ?c ?e ?l " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?o ?f ?e ?l ?c " // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + String queryString = ""// + + "SELECT ?e ?c ?l ?f ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, "table1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, "table2"); + + CountingResultHandler crh = new CountingResultHandler(); + + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(3, crh.getCount()); + + } + + @Test + public void testEvaluateTwoIndexThreeVarOrder4ThreeBindingSet() throws MalformedQueryException, SailException, + QueryEvaluationException, MutationsRejectedException, TableNotFoundException, RepositoryException, + TupleQueryResultHandlerException { + + URI sub3 = new URIImpl("uri:entity3"); + URI subclass3 = new URIImpl("uri:class3"); + URI obj3 = new URIImpl("uri:obj3"); + + URI superclass = new URIImpl("uri:superclass"); + URI superclass2 = new URIImpl("uri:superclass2"); + URI superclass3 = new URIImpl("uri:superclass3"); + + conn.add(sub3, RDF.TYPE, subclass3); + conn.add(sub3, RDFS.LABEL, new LiteralImpl("label3")); + conn.add(sub3, talksTo, obj3); + + conn.add(subclass, RDF.TYPE, superclass); + conn.add(subclass2, RDF.TYPE, superclass2); + conn.add(subclass3, RDF.TYPE, superclass3); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + conn.add(obj3, RDFS.LABEL, new LiteralImpl("label3")); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + // TODO Auto-generated method stub + String indexSparqlString = ""// + + "SELECT ?c ?e ?l " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?o ?f ?c ?e ?l " // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + String queryString = ""// + + "SELECT ?e ?c ?l ?f ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, "table1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, "table2"); + + CountingResultHandler crh = new CountingResultHandler(); + + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(3, crh.getCount()); + + } + + @Test + public void testEvaluateTwoIndexThreeVarOrder6ThreeBindingSet() throws MalformedQueryException, SailException, + QueryEvaluationException, MutationsRejectedException, TableNotFoundException, RepositoryException, + TupleQueryResultHandlerException { + + URI sub3 = new URIImpl("uri:entity3"); + URI subclass3 = new URIImpl("uri:class3"); + URI obj3 = new URIImpl("uri:obj3"); + + URI superclass = new URIImpl("uri:superclass"); + URI superclass2 = new URIImpl("uri:superclass2"); + URI superclass3 = new URIImpl("uri:superclass3"); + + conn.add(sub3, RDF.TYPE, subclass3); + conn.add(sub3, RDFS.LABEL, new LiteralImpl("label3")); + conn.add(sub3, talksTo, obj3); + + conn.add(subclass, RDF.TYPE, superclass); + conn.add(subclass2, RDF.TYPE, superclass2); + conn.add(subclass3, RDF.TYPE, superclass3); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + conn.add(obj3, RDFS.LABEL, new LiteralImpl("label3")); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + String indexSparqlString = ""// + + "SELECT ?c ?e ?l " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?c ?l ?e ?o ?f " // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + String queryString = ""// + + "SELECT ?e ?c ?l ?f ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, "table1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, "table2"); + + CountingResultHandler crh = new CountingResultHandler(); + + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(3, crh.getCount()); + + } + + @Test + public void testEvaluateTwoIndexThreeVarOrder7ThreeBindingSet() throws MalformedQueryException, SailException, + QueryEvaluationException, MutationsRejectedException, TableNotFoundException, RepositoryException, + TupleQueryResultHandlerException { + + URI sub3 = new URIImpl("uri:entity3"); + URI subclass3 = new URIImpl("uri:class3"); + URI obj3 = new URIImpl("uri:obj3"); + + URI superclass = new URIImpl("uri:superclass"); + URI superclass2 = new URIImpl("uri:superclass2"); + URI superclass3 = new URIImpl("uri:superclass3"); + + conn.add(sub3, RDF.TYPE, subclass3); + conn.add(sub3, RDFS.LABEL, new LiteralImpl("label3")); + conn.add(sub3, talksTo, obj3); + + conn.add(subclass, RDF.TYPE, superclass); + conn.add(subclass2, RDF.TYPE, superclass2); + conn.add(subclass3, RDF.TYPE, superclass3); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + conn.add(obj3, RDFS.LABEL, new LiteralImpl("label3")); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + String indexSparqlString = ""// + + "SELECT ?c ?e ?l " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?o ?l ?c ?e ?f " // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + String queryString = ""// + + "SELECT ?e ?c ?l ?f ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, "table1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, "table2"); + + CountingResultHandler crh = new CountingResultHandler(); + + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(3, crh.getCount()); + + } + + @Test + public void testEvaluateOneIndex() throws RepositoryException, MalformedQueryException, SailException, + QueryEvaluationException, MutationsRejectedException, TableNotFoundException, + TupleQueryResultHandlerException { + + String indexSparqlString = ""// + + "SELECT ?dog ?pig ?duck " // + + "{" // + + " ?pig a ?dog . "// + + " ?pig <http://www.w3.org/2000/01/rdf-schema#label> ?duck "// + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, "table1"); + + CountingResultHandler crh = new CountingResultHandler(); + + conn.prepareTupleQuery(QueryLanguage.SPARQL, indexSparqlString).evaluate(crh); + + Assert.assertEquals(2, crh.getCount()); + + } + + @Test + public void testEvaluateTwoIndexThreeVarOrder3() throws RepositoryException, MalformedQueryException, + SailException, QueryEvaluationException, MutationsRejectedException, TableNotFoundException, + TupleQueryResultHandlerException { + + URI superclass = new URIImpl("uri:superclass"); + URI superclass2 = new URIImpl("uri:superclass2"); + + conn.add(subclass, RDF.TYPE, superclass); + conn.add(subclass2, RDF.TYPE, superclass2); + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + String indexSparqlString = ""// + + "SELECT ?dog ?pig ?duck " // + + "{" // + + " ?pig a ?dog . "// + + " ?pig <http://www.w3.org/2000/01/rdf-schema#label> ?duck "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?o ?f ?e ?c ?l " // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + String queryString = ""// + + "SELECT ?e ?c ?l ?f ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l. "// + + " ?c a ?f . " // + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, "table1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, "table2"); + + CountingResultHandler crh = new CountingResultHandler(); + + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(2, crh.getCount()); + + } + + public static class CountingResultHandler implements TupleQueryResultHandler { + private int count = 0; + + public int getCount() { + return count; + } + + public void resetCount() { + this.count = 0; + } + + @Override + public void startQueryResult(List<String> arg0) throws TupleQueryResultHandlerException { + } + + @Override + public void handleSolution(BindingSet arg0) throws TupleQueryResultHandlerException { + count++; + } + + @Override + public void endQueryResult() throws TupleQueryResultHandlerException { + } + + @Override + public void handleBoolean(boolean arg0) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleLinks(List<String> arg0) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + } + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/efcae829/extras/indexing/src/test/java/mvm/rya/indexing/external/PrecompJoinOptimizerIntegrationTest.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/external/PrecompJoinOptimizerIntegrationTest.java b/extras/indexing/src/test/java/mvm/rya/indexing/external/PrecompJoinOptimizerIntegrationTest.java index 4eaa279..dff310a 100644 --- a/extras/indexing/src/test/java/mvm/rya/indexing/external/PrecompJoinOptimizerIntegrationTest.java +++ b/extras/indexing/src/test/java/mvm/rya/indexing/external/PrecompJoinOptimizerIntegrationTest.java @@ -22,8 +22,15 @@ package mvm.rya.indexing.external; import java.util.List; import mvm.rya.api.persist.RyaDAOException; +<<<<<<< HEAD import mvm.rya.indexing.external.tupleSet.PcjTables.PcjException; import mvm.rya.indexing.external.tupleSet.PcjTables.PcjVarOrderFactory; +======= +import mvm.rya.indexing.RyaSailFactory; +import mvm.rya.indexing.accumulo.ConfigUtils; +import mvm.rya.indexing.external.tupleSet.AccumuloIndexSet; +import mvm.rya.rdftriplestore.inference.InferenceEngineException; +>>>>>>> RYA-34 fixing inference with mongo db import org.apache.accumulo.core.client.AccumuloException; import org.apache.accumulo.core.client.AccumuloSecurityException; @@ -492,4 +499,481 @@ public class PrecompJoinOptimizerIntegrationTest { } } +======= + private SailRepositoryConnection conn; + private SailRepository repo; + private Connector accCon; + String tablePrefix = "table_"; + AccumuloRdfConfiguration conf; + URI sub, sub2, obj,obj2,subclass, subclass2, talksTo; + + + + + @Before + public void init() throws RepositoryException, TupleQueryResultHandlerException, QueryEvaluationException, MalformedQueryException, + AccumuloException, AccumuloSecurityException, TableExistsException, RyaDAOException, InferenceEngineException { + + conf = new AccumuloRdfConfiguration(); + conf.set(ConfigUtils.USE_PCJ, "true"); + conf.set(ConfigUtils.USE_MOCK_INSTANCE,"true"); + conf.set(ConfigUtils.CLOUDBASE_INSTANCE, "instance"); + conf.setTablePrefix(tablePrefix); + + Sail sail = RyaSailFactory.getInstance(conf); + repo = new SailRepository(sail); + repo.initialize(); + conn = repo.getConnection(); + + sub = new URIImpl("uri:entity"); + subclass = new URIImpl("uri:class"); + obj = new URIImpl("uri:obj"); + talksTo = new URIImpl("uri:talksTo"); + + conn.add(sub, RDF.TYPE, subclass); + conn.add(sub, RDFS.LABEL, new LiteralImpl("label")); + conn.add(sub, talksTo, obj); + + sub2 = new URIImpl("uri:entity2"); + subclass2 = new URIImpl("uri:class2"); + obj2 = new URIImpl("uri:obj2"); + + conn.add(sub2, RDF.TYPE, subclass2); + conn.add(sub2, RDFS.LABEL, new LiteralImpl("label2")); + conn.add(sub2, talksTo, obj2); + + accCon = new MockInstance("instance").getConnector("root",new PasswordToken("".getBytes())); + + } + + + @After + public void close() throws RepositoryException, AccumuloException, AccumuloSecurityException, TableNotFoundException { + + conf = null; + conn.close(); + accCon.tableOperations().delete(tablePrefix + "spo"); + accCon.tableOperations().delete(tablePrefix + "po"); + accCon.tableOperations().delete(tablePrefix + "osp"); + } + + + + @Test + public void testEvaluateSingeIndex() throws TupleQueryResultHandlerException, QueryEvaluationException, + MalformedQueryException, RepositoryException, AccumuloException, + AccumuloSecurityException, TableExistsException, RyaDAOException, SailException, TableNotFoundException { + + if (accCon.tableOperations().exists(tablePrefix + "INDEX1")) { + accCon.tableOperations().delete(tablePrefix + "INDEX1"); + } + accCon.tableOperations().create(tablePrefix + "INDEX1"); + + String indexSparqlString = ""// + + "SELECT ?e ?l ?c " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + AccumuloIndexSet ais = new AccumuloIndexSet(indexSparqlString, conn, accCon, tablePrefix + "INDEX1"); + + + String queryString = ""// + + "SELECT ?e ?c ?l ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "// + + " ?e <uri:talksTo> ?o . "// + + "}";// + + CountingResultHandler crh = new CountingResultHandler(); + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + +// Scanner scan = accCon.createScanner(tablePrefix + "spo", new Authorizations("U")); +// +// for(Entry<Key,Value> e: scan) { +// System.out.println(e.getKey().getRow()); +// } + + Assert.assertEquals(2, crh.getCount()); + + + } + + + + + + + @Test + public void testEvaluateTwoIndexTwoVarOrder1() throws AccumuloException, AccumuloSecurityException, + TableExistsException, RepositoryException, MalformedQueryException, SailException, QueryEvaluationException, + TableNotFoundException, TupleQueryResultHandlerException, RyaDAOException { + + if (accCon.tableOperations().exists(tablePrefix + "INDEX1")) { + accCon.tableOperations().delete(tablePrefix + "INDEX1"); + } + + if (accCon.tableOperations().exists(tablePrefix + "INDEX2")) { + accCon.tableOperations().delete(tablePrefix + "INDEX2"); + } + + accCon.tableOperations().create(tablePrefix + "INDEX1"); + accCon.tableOperations().create(tablePrefix + "INDEX2"); + + + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + + + String indexSparqlString = ""// + + "SELECT ?e ?l ?c " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?e ?o ?l " // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String queryString = ""// + + "SELECT ?e ?c ?l ?o " // + + "{" // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "// + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, tablePrefix + "INDEX1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, tablePrefix + "INDEX2"); + + CountingResultHandler crh = new CountingResultHandler(); + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(2, crh.getCount()); + + + + + } + + + @Test + public void testEvaluateSingeFilterIndex() throws TupleQueryResultHandlerException, QueryEvaluationException, + MalformedQueryException, RepositoryException, AccumuloException, + AccumuloSecurityException, TableExistsException, RyaDAOException, SailException, TableNotFoundException { + + if (accCon.tableOperations().exists(tablePrefix + "INDEX1")) { + accCon.tableOperations().delete(tablePrefix + "INDEX1"); + } + accCon.tableOperations().create(tablePrefix + "INDEX1"); + + String indexSparqlString = ""// + + "SELECT ?e ?l ?c " // + + "{" // + + " Filter(?e = <uri:entity>) " // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + AccumuloIndexSet ais = new AccumuloIndexSet(indexSparqlString, conn, accCon, tablePrefix + "INDEX1"); + + + String queryString = ""// + + "SELECT ?e ?c ?l ?o " // + + "{" // + + " Filter(?e = <uri:entity>) " // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "// + + " ?e <uri:talksTo> ?o . "// + + "}";// + + CountingResultHandler crh = new CountingResultHandler(); + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(1, crh.getCount()); + + + } + + + + + @Test + public void testEvaluateSingeFilterWithUnion() throws TupleQueryResultHandlerException, QueryEvaluationException, + MalformedQueryException, RepositoryException, AccumuloException, + AccumuloSecurityException, TableExistsException, RyaDAOException, SailException, TableNotFoundException { + + if (accCon.tableOperations().exists(tablePrefix + "INDEX2")) { + accCon.tableOperations().delete(tablePrefix + "INDEX2"); + } + accCon.tableOperations().create(tablePrefix + "INDEX2"); + + String indexSparqlString2 = ""// + + "SELECT ?e ?l ?c " // + + "{" // + + " Filter(?l = \"label2\") " // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, tablePrefix + "INDEX2"); + + + String queryString = ""// + + "SELECT ?e ?c ?o ?m ?l" // + + "{" // + + " Filter(?l = \"label2\") " // + + " ?e <uri:talksTo> ?o . "// + + " { ?e a ?c . ?e <http://www.w3.org/2000/01/rdf-schema#label> ?m }"// + + " UNION { ?e a ?c . ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l }"// + + "}";// + + CountingResultHandler crh = new CountingResultHandler(); + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(1, crh.getCount()); + + + } + + + + @Test + public void testEvaluateSingeFilterWithLeftJoin() throws TupleQueryResultHandlerException, QueryEvaluationException, + MalformedQueryException, RepositoryException, AccumuloException, + AccumuloSecurityException, TableExistsException, RyaDAOException, SailException, TableNotFoundException { + + if (accCon.tableOperations().exists(tablePrefix + "INDEX1")) { + accCon.tableOperations().delete(tablePrefix + "INDEX1"); + } + accCon.tableOperations().create(tablePrefix + "INDEX1"); + + String indexSparqlString1 = ""// + + "SELECT ?e ?l ?c " // + + "{" // + + " Filter(?l = \"label3\") " // + + " ?e a ?c . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + + URI sub3 = new URIImpl("uri:entity3"); + URI subclass3 = new URIImpl("uri:class3"); + conn.add(sub3, RDF.TYPE, subclass3); + conn.add(sub3,RDFS.LABEL, new LiteralImpl("label3")); + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString1, conn, accCon, tablePrefix + "INDEX1"); + + String queryString = ""// + + "SELECT ?e ?c ?o ?m ?l" // + + "{" // + + " Filter(?l = \"label3\") " // + + " ?e a ?c . " // + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . " // + + " OPTIONAL { ?e <uri:talksTo> ?o . ?e <http://www.w3.org/2000/01/rdf-schema#label> ?m }"// + + "}";// + + CountingResultHandler crh = new CountingResultHandler(); + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(1, crh.getCount()); + + + } + + + + + + + + @Test + public void testEvaluateTwoIndexUnionFilter() throws AccumuloException, AccumuloSecurityException, + TableExistsException, RepositoryException, MalformedQueryException, SailException, QueryEvaluationException, + TableNotFoundException, TupleQueryResultHandlerException, RyaDAOException { + + if (accCon.tableOperations().exists(tablePrefix + "INDEX1")) { + accCon.tableOperations().delete(tablePrefix + "INDEX1"); + } + + if (accCon.tableOperations().exists(tablePrefix + "INDEX2")) { + accCon.tableOperations().delete(tablePrefix + "INDEX2"); + } + + accCon.tableOperations().create(tablePrefix + "INDEX1"); + accCon.tableOperations().create(tablePrefix + "INDEX2"); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + conn.add(sub, RDF.TYPE, obj); + conn.add(sub2, RDF.TYPE, obj2); + + + String indexSparqlString = ""// + + "SELECT ?e ?l ?o " // + + "{" // + + " Filter(?l = \"label2\") " // + + " ?e a ?o . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?e ?l ?o " // + + "{" // + + " Filter(?l = \"label2\") " // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String queryString = ""// + + "SELECT ?c ?e ?l ?o " // + + "{" // + + " Filter(?l = \"label2\") " // + + " ?e a ?c . "// + + " { ?e a ?o . ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l }"// + + " UNION { ?e <uri:talksTo> ?o . ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l }"// + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, tablePrefix + "INDEX1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, tablePrefix + "INDEX2"); + + CountingResultHandler crh = new CountingResultHandler(); + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + + Assert.assertEquals(6, crh.getCount()); + + + + } + + + + + + @Test + public void testEvaluateTwoIndexLeftJoinUnionFilter() throws AccumuloException, AccumuloSecurityException, + TableExistsException, RepositoryException, MalformedQueryException, SailException, QueryEvaluationException, + TableNotFoundException, TupleQueryResultHandlerException, RyaDAOException { + + if (accCon.tableOperations().exists(tablePrefix + "INDEX1")) { + accCon.tableOperations().delete(tablePrefix + "INDEX1"); + } + + if (accCon.tableOperations().exists(tablePrefix + "INDEX2")) { + accCon.tableOperations().delete(tablePrefix + "INDEX2"); + } + + accCon.tableOperations().create(tablePrefix + "INDEX1"); + accCon.tableOperations().create(tablePrefix + "INDEX2"); + + conn.add(obj, RDFS.LABEL, new LiteralImpl("label")); + conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2")); + conn.add(sub, RDF.TYPE, obj); + conn.add(sub2, RDF.TYPE, obj2); + + URI livesIn = new URIImpl("uri:livesIn"); + URI city = new URIImpl("uri:city"); + URI city2 = new URIImpl("uri:city2"); + URI city3 = new URIImpl("uri:city3"); + conn.add(sub,livesIn,city); + conn.add(sub2,livesIn,city2); + conn.add(sub2,livesIn,city3); + conn.add(sub,livesIn,city3); + + + String indexSparqlString = ""// + + "SELECT ?e ?l ?o " // + + "{" // + + " ?e a ?o . "// + + " ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String indexSparqlString2 = ""// + + "SELECT ?e ?l ?o " // + + "{" // + + " ?e <uri:talksTo> ?o . "// + + " ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l "// + + "}";// + + String queryString = ""// + + "SELECT ?c ?e ?l ?o " // + + "{" // + + " Filter(?c = <uri:city3>) " // + + " ?e <uri:livesIn> ?c . "// + + " OPTIONAL{{ ?e a ?o . ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l }"// + + " UNION { ?e <uri:talksTo> ?o . ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l }}"// + + "}";// + + AccumuloIndexSet ais1 = new AccumuloIndexSet(indexSparqlString, conn, accCon, tablePrefix + "INDEX1"); + AccumuloIndexSet ais2 = new AccumuloIndexSet(indexSparqlString2, conn, accCon, tablePrefix + "INDEX2"); + + CountingResultHandler crh = new CountingResultHandler(); + conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh); + +// Scanner scan = accCon.createScanner(tablePrefix + "spo", new Authorizations("U")); +// +// for(Entry<Key,Value> e: scan) { +// System.out.println(e.getKey().getRow()); +// } + + Assert.assertEquals(6, crh.getCount()); + + + + } + + + + + public static class CountingResultHandler implements TupleQueryResultHandler { + private int count = 0; + + public int getCount() { + return count; + } + + public void resetCount() { + this.count = 0; + } + + @Override + public void startQueryResult(List<String> arg0) throws TupleQueryResultHandlerException { + } + + + @Override + public void handleSolution(BindingSet arg0) throws TupleQueryResultHandlerException { + System.out.println(arg0); + count++; + System.out.println("Count is " + count); + } + + @Override + public void endQueryResult() throws TupleQueryResultHandlerException { + } + + @Override + public void handleBoolean(boolean arg0) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + + @Override + public void handleLinks(List<String> arg0) throws QueryResultHandlerException { + // TODO Auto-generated method stub + + } + } + + + + + } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/efcae829/extras/indexingExample/src/main/java/MongoRyaDirectExample.java ---------------------------------------------------------------------- diff --git a/extras/indexingExample/src/main/java/MongoRyaDirectExample.java b/extras/indexingExample/src/main/java/MongoRyaDirectExample.java index 7946afc..d42d96a 100644 --- a/extras/indexingExample/src/main/java/MongoRyaDirectExample.java +++ b/extras/indexingExample/src/main/java/MongoRyaDirectExample.java @@ -23,7 +23,8 @@ import mvm.rya.api.RdfCloudTripleStoreConfiguration; import mvm.rya.indexing.accumulo.ConfigUtils; import mvm.rya.indexing.accumulo.geo.GeoConstants; import mvm.rya.mongodb.MongoDBRdfConfiguration; -import mvm.rya.sail.config.RyaSailFactory; +import mvm.rya.rdftriplestore.RdfCloudTripleStore; +import mvm.rya.rdftriplestore.inference.InferenceEngineException; import org.apache.commons.lang.Validate; import org.apache.hadoop.conf.Configuration; @@ -75,11 +76,12 @@ public class MongoRyaDirectExample { long start = System.currentTimeMillis(); log.info("Running SPARQL Example: Add and Delete"); -// testAddAndDelete(conn); -// testAddAndDeleteNoContext(conn); -// testAddNamespaces(conn); -// testAddPointAndWithinSearch(conn); + testAddAndDelete(conn); + testAddAndDeleteNoContext(conn); + testAddNamespaces(conn); + testAddPointAndWithinSearch(conn); testAddAndFreeTextSearchWithPCJ(conn); + testInfer(conn, sail); log.info("TIME: " + (System.currentTimeMillis() - start) / 1000.); } finally { @@ -304,6 +306,34 @@ public class MongoRyaDirectExample { Validate.isTrue(resultHandler.getCount() == 0); } + + public static void testInfer(SailRepositoryConnection conn, Sail sail) throws MalformedQueryException, RepositoryException, + UpdateExecutionException, QueryEvaluationException, TupleQueryResultHandlerException, InferenceEngineException { + + // Add data + String query = "INSERT DATA\n"// + + "{ \n"// + + " <http://acme.com/people/Mike> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <urn:type1>. " + + " <urn:type1> <http://www.w3.org/2000/01/rdf-schema#subClassOf> <urn:superclass>. }"; + + log.info("Performing Query"); + + Update update = conn.prepareUpdate(QueryLanguage.SPARQL, query); + update.execute(); + + // refresh the graph for inferencing (otherwise there is a five minute wait) + ((RdfCloudTripleStore) sail).getInferenceEngine().refreshGraph(); + + query = "select ?s { ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <urn:superclass> . }"; + CountingResultHandler resultHandler = new CountingResultHandler(); + TupleQuery tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, query); + tupleQuery.evaluate(resultHandler); + log.info("Result count : " + resultHandler.getCount()); + + Validate.isTrue(resultHandler.getCount() == 1); + + resultHandler.resetCount(); + } public static void testAddNamespaces(SailRepositoryConnection conn) throws MalformedQueryException, RepositoryException, UpdateExecutionException, QueryEvaluationException, TupleQueryResultHandlerException { http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/efcae829/sail/src/main/java/mvm/rya/rdftriplestore/inference/InferenceEngine.java ---------------------------------------------------------------------- diff --git a/sail/src/main/java/mvm/rya/rdftriplestore/inference/InferenceEngine.java b/sail/src/main/java/mvm/rya/rdftriplestore/inference/InferenceEngine.java index f4ed420..0e2e930 100644 --- a/sail/src/main/java/mvm/rya/rdftriplestore/inference/InferenceEngine.java +++ b/sail/src/main/java/mvm/rya/rdftriplestore/inference/InferenceEngine.java @@ -79,6 +79,7 @@ public class InferenceEngine { checkArgument(ryaDAO.isInitialized(), "RdfDao is not initialized"); if (schedule) { + refreshGraph(); timer = new Timer(InferenceEngine.class.getName()); timer.scheduleAtFixedRate(new TimerTask() {
