http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/AccumuloPcjSerialzerTest.java ---------------------------------------------------------------------- diff --git a/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/AccumuloPcjSerialzerTest.java b/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/AccumuloPcjSerialzerTest.java new file mode 100644 index 0000000..5011adf --- /dev/null +++ b/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/AccumuloPcjSerialzerTest.java @@ -0,0 +1,175 @@ +package org.apache.rya.indexing.pcj.storage.accumulo; + +import static org.junit.Assert.assertEquals; + +import org.apache.rya.indexing.pcj.storage.accumulo.AccumuloPcjSerializer; +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetConverter; +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetConverter.BindingSetConversionException; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; +import org.junit.Test; +import org.openrdf.model.impl.LiteralImpl; +import org.openrdf.model.impl.URIImpl; +import org.openrdf.query.BindingSet; +import org.openrdf.query.algebra.evaluation.QueryBindingSet; +import org.openrdf.query.impl.MapBindingSet; + +/* + * 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 mvm.rya.api.resolver.RyaTypeResolverException; + +/** + * Tests the methods of {@link AccumuloPcjSerialzer}. + */ +public class AccumuloPcjSerialzerTest { + + /** + * The BindingSet has fewer Bindings than there are variables in the variable + * order, but they are all in the variable order. This is the case where + * the missing bindings were optional. + */ + @Test + public void serialize_bindingsSubsetOfVarOrder() throws BindingSetConversionException { + // Setup the Binding Set. + final MapBindingSet originalBindingSet = new MapBindingSet(); + originalBindingSet.addBinding("x", new URIImpl("http://a")); + originalBindingSet.addBinding("y", new URIImpl("http://b")); + + // Setup the variable order. + final VariableOrder varOrder = new VariableOrder("x", "a", "y", "b"); + + // Create the byte[] representation of the BindingSet. + BindingSetConverter<byte[]> converter = new AccumuloPcjSerializer(); + byte[] serialized = converter.convert(originalBindingSet, varOrder); + + // Deserialize the byte[] back into the binding set. + BindingSet deserialized = converter.convert(serialized, varOrder); + + // Ensure the deserialized value matches the original. + assertEquals(originalBindingSet, deserialized); + } + + /** + * The BindingSet has a Binding whose name is not in the variable order. + * This is illegal. + */ + @Test(expected = IllegalArgumentException.class) + public void serialize_bindingNotInVariableOrder() throws RyaTypeResolverException, BindingSetConversionException { + // Setup the Binding Set. + final MapBindingSet originalBindingSet = new MapBindingSet(); + originalBindingSet.addBinding("x", new URIImpl("http://a")); + originalBindingSet.addBinding("y", new URIImpl("http://b")); + originalBindingSet.addBinding("z", new URIImpl("http://d")); + + // Setup the variable order. + final VariableOrder varOrder = new VariableOrder("x", "y"); + + // Create the byte[] representation of the BindingSet. This will throw an exception. + BindingSetConverter<byte[]> converter = new AccumuloPcjSerializer(); + converter.convert(originalBindingSet, varOrder); + } + + @Test + public void basicShortUriBsTest() throws BindingSetConversionException { + final QueryBindingSet bs = new QueryBindingSet(); + bs.addBinding("X",new URIImpl("http://uri1")); + bs.addBinding("Y",new URIImpl("http://uri2")); + final VariableOrder varOrder = new VariableOrder("X","Y"); + + BindingSetConverter<byte[]> converter = new AccumuloPcjSerializer(); + final byte[] byteVal = converter.convert(bs, varOrder); + final BindingSet newBs = converter.convert(byteVal, varOrder); + assertEquals(bs, newBs); + } + + @Test + public void basicLongUriBsTest() throws BindingSetConversionException { + final QueryBindingSet bs = new QueryBindingSet(); + bs.addBinding("X",new URIImpl("http://uri1")); + bs.addBinding("Y",new URIImpl("http://uri2")); + bs.addBinding("Z",new URIImpl("http://uri3")); + bs.addBinding("A",new URIImpl("http://uri4")); + bs.addBinding("B",new URIImpl("http://uri5")); + final VariableOrder varOrder = new VariableOrder("X","Y","Z","A","B"); + + BindingSetConverter<byte[]> converter = new AccumuloPcjSerializer(); + final byte[] byteVal = converter.convert(bs, varOrder); + final BindingSet newBs = converter.convert(byteVal, varOrder); + assertEquals(bs, newBs); + } + + @Test + public void basicShortStringLiteralBsTest() throws BindingSetConversionException { + final QueryBindingSet bs = new QueryBindingSet(); + bs.addBinding("X",new LiteralImpl("literal1")); + bs.addBinding("Y",new LiteralImpl("literal2")); + final VariableOrder varOrder = new VariableOrder("X","Y"); + + BindingSetConverter<byte[]> converter = new AccumuloPcjSerializer(); + final byte[] byteVal = converter.convert(bs, varOrder); + final BindingSet newBs = converter.convert(byteVal, varOrder); + assertEquals(bs, newBs); + } + + @Test + public void basicShortMixLiteralBsTest() throws BindingSetConversionException { + final QueryBindingSet bs = new QueryBindingSet(); + bs.addBinding("X",new LiteralImpl("literal1")); + bs.addBinding("Y",new LiteralImpl("5", new URIImpl("http://www.w3.org/2001/XMLSchema#integer"))); + final VariableOrder varOrder = new VariableOrder("X","Y"); + + BindingSetConverter<byte[]> converter = new AccumuloPcjSerializer(); + final byte[] byteVal = converter.convert(bs, varOrder); + final BindingSet newBs = converter.convert(byteVal, varOrder); + assertEquals(bs, newBs); + } + + @Test + public void basicLongMixLiteralBsTest() throws BindingSetConversionException { + final QueryBindingSet bs = new QueryBindingSet(); + bs.addBinding("X",new LiteralImpl("literal1")); + bs.addBinding("Y",new LiteralImpl("5", new URIImpl("http://www.w3.org/2001/XMLSchema#integer"))); + bs.addBinding("Z",new LiteralImpl("5.0", new URIImpl("http://www.w3.org/2001/XMLSchema#double"))); + bs.addBinding("W",new LiteralImpl("1000", new URIImpl("http://www.w3.org/2001/XMLSchema#long"))); + final VariableOrder varOrder = new VariableOrder("W","X","Y","Z"); + + BindingSetConverter<byte[]> converter = new AccumuloPcjSerializer(); + final byte[] byteVal = converter.convert(bs, varOrder); + final BindingSet newBs = converter.convert(byteVal, varOrder); + assertEquals(bs, newBs); + } + + @Test + public void basicMixUriLiteralBsTest() throws BindingSetConversionException { + final QueryBindingSet bs = new QueryBindingSet(); + bs.addBinding("X",new LiteralImpl("literal1")); + bs.addBinding("Y",new LiteralImpl("5", new URIImpl("http://www.w3.org/2001/XMLSchema#integer"))); + bs.addBinding("Z",new LiteralImpl("5.0", new URIImpl("http://www.w3.org/2001/XMLSchema#double"))); + bs.addBinding("W",new LiteralImpl("1000", new URIImpl("http://www.w3.org/2001/XMLSchema#long"))); + bs.addBinding("A",new URIImpl("http://uri1")); + bs.addBinding("B",new URIImpl("http://uri2")); + bs.addBinding("C",new URIImpl("http://uri3")); + final VariableOrder varOrder = new VariableOrder("A","W","X","Y","Z","B","C"); + + BindingSetConverter<byte[]> converter = new AccumuloPcjSerializer(); + final byte[] byteVal = converter.convert(bs, varOrder); + final BindingSet newBs = converter.convert(byteVal, varOrder); + assertEquals(bs, newBs); + } +} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/BindingSetStringConverterTest.java ---------------------------------------------------------------------- diff --git a/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/BindingSetStringConverterTest.java b/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/BindingSetStringConverterTest.java new file mode 100644 index 0000000..e01e7de --- /dev/null +++ b/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/BindingSetStringConverterTest.java @@ -0,0 +1,311 @@ +/* + * 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 org.apache.rya.indexing.pcj.storage.accumulo; + +import static org.junit.Assert.assertEquals; + +import java.math.BigDecimal; +import java.math.BigInteger; + +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetConverter; +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetConverter.BindingSetConversionException; +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetStringConverter; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; +import org.junit.Test; +import org.openrdf.model.impl.BooleanLiteralImpl; +import org.openrdf.model.impl.DecimalLiteralImpl; +import org.openrdf.model.impl.IntegerLiteralImpl; +import org.openrdf.model.impl.URIImpl; +import org.openrdf.query.BindingSet; +import org.openrdf.query.impl.MapBindingSet; + +/** + * Tests the methods of {@link BindingSetStringConverter}. + */ +public class BindingSetStringConverterTest { + + @Test + public void toString_URIs() throws BindingSetConversionException { + // Setup the binding set that will be converted. + final MapBindingSet originalBindingSet = new MapBindingSet(); + originalBindingSet.addBinding("x", new URIImpl("http://a")); + originalBindingSet.addBinding("y", new URIImpl("http://b")); + originalBindingSet.addBinding("z", new URIImpl("http://c")); + + // Convert it to a String. + final VariableOrder varOrder = new VariableOrder("y", "z", "x"); + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + final String bindingSetString = converter.convert(originalBindingSet, varOrder); + + // Ensure it converted to the expected result.l + final String expected = + "http://b<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://c<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://a<<~>>http://www.w3.org/2001/XMLSchema#anyURI"; + + assertEquals(expected, bindingSetString); + } + + @Test + public void toString_Decimal() throws BindingSetConversionException { + // Setup the binding set that will be converted. + final MapBindingSet originalBindingSet = new MapBindingSet(); + originalBindingSet.addBinding("x", new DecimalLiteralImpl(new BigDecimal(2.5))); + + // Convert it to a String. + final VariableOrder varOrder = new VariableOrder("x"); + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + final String bindingSetString = converter.convert(originalBindingSet, varOrder); + + // Ensure it converted to the expected result. + final String expected = "2.5<<~>>http://www.w3.org/2001/XMLSchema#decimal"; + assertEquals(expected, bindingSetString); + } + + @Test + public void toString_Boolean() throws BindingSetConversionException { + // Setup the binding set that will be converted. + final MapBindingSet originalBindingSet = new MapBindingSet(); + originalBindingSet.addBinding("x", new BooleanLiteralImpl(true)); + + // Convert it to a String. + final VariableOrder varOrder = new VariableOrder("x"); + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + final String bindingSetString = converter.convert(originalBindingSet, varOrder); + + // Ensure it converted to the expected result. + final String expected = "true<<~>>http://www.w3.org/2001/XMLSchema#boolean"; + assertEquals(expected, bindingSetString); + } + + @Test + public void toString_Integer() throws BindingSetConversionException { + // Setup the binding set that will be converted. + final MapBindingSet originalBindingSet = new MapBindingSet(); + originalBindingSet.addBinding("x", new IntegerLiteralImpl(BigInteger.valueOf(5))); + + // Convert it to a String. + final VariableOrder varOrder = new VariableOrder("x"); + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + final String bindingSetString = converter.convert(originalBindingSet, varOrder); + + // Ensure it converted to the expected result. + final String expected = "5<<~>>http://www.w3.org/2001/XMLSchema#integer"; + assertEquals(expected, bindingSetString); + } + + /** + * All of the Bindings in the BindingSet exactly match the variable order. + * This is the simplest case and is legal. + */ + @Test + public void toString_bindingsMatchVarOrder() throws BindingSetConversionException { + // Setup the Binding Set. + final MapBindingSet originalBindingSet = new MapBindingSet(); + originalBindingSet.addBinding("x", new URIImpl("http://a")); + originalBindingSet.addBinding("y", new URIImpl("http://b")); + + // Setup the variable order. + final VariableOrder varOrder = new VariableOrder("x", "y"); + + // Create the String representation of the BindingSet. + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + final String bindingSetString = converter.convert(originalBindingSet, varOrder); + + // Ensure the expected value was created. + final String expected = + "http://a<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://b<<~>>http://www.w3.org/2001/XMLSchema#anyURI"; + assertEquals(expected, bindingSetString); + } + + /** + * The BindingSet has fewer Bindings than there are variables in the variable + * order, but they are all in the variable order. This is the case where + * the missing bindings were optional. + */ + @Test + public void toString_bindingsSubsetOfVarOrder() throws BindingSetConversionException { + // Setup the Binding Set. + final MapBindingSet originalBindingSet = new MapBindingSet(); + originalBindingSet.addBinding("x", new URIImpl("http://a")); + originalBindingSet.addBinding("y", new URIImpl("http://b")); + + // Setup the variable order. + final VariableOrder varOrder = new VariableOrder("x", "a", "y", "b"); + + // Create the String representation of the BindingSet. + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + final String bindingSetString = converter.convert(originalBindingSet, varOrder); + + // Ensure the expected value was created. + final String expected = + "http://a<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + BindingSetStringConverter.NULL_VALUE_STRING + ":::" + + "http://b<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + BindingSetStringConverter.NULL_VALUE_STRING; + assertEquals(expected, bindingSetString); + } + + /** + * The BindingSet has a Binding whose name is not in the variable order. + * This is illegal. + */ + @Test(expected = IllegalArgumentException.class) + public void toString_bindingNotInVariableOrder() throws BindingSetConversionException { + // Setup the Binding Set. + final MapBindingSet originalBindingSet = new MapBindingSet(); + originalBindingSet.addBinding("x", new URIImpl("http://a")); + originalBindingSet.addBinding("y", new URIImpl("http://b")); + originalBindingSet.addBinding("z", new URIImpl("http://d")); + + // Setup the variable order. + final VariableOrder varOrder = new VariableOrder("x", "y"); + + // Create the String representation of the BindingSet. This will throw an exception. + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + converter.convert(originalBindingSet, varOrder); + } + + @Test + public void fromString() throws BindingSetConversionException { + // Setup the String that will be converted. + final String bindingSetString = + "http://b<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://c<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://a<<~>>http://www.w3.org/2001/XMLSchema#anyURI"; + + // Convert it to a BindingSet + final VariableOrder varOrder = new VariableOrder("y", "z", "x"); + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + final BindingSet bindingSet = converter.convert(bindingSetString, varOrder); + + // Ensure it converted to the expected result. + final MapBindingSet expected = new MapBindingSet(); + expected.addBinding("x", new URIImpl("http://a")); + expected.addBinding("y", new URIImpl("http://b")); + expected.addBinding("z", new URIImpl("http://c")); + + assertEquals(expected, bindingSet); + } + + /** + * Ensures that when a binding set is converted from a String back to a + * BindingSet, null values do not get converted into Bindings. + */ + @Test + public void fromString_nullValues() throws BindingSetConversionException { + // Setup the String that will be converted. + final String bindingSetString = + "http://value 1<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + BindingSetStringConverter.NULL_VALUE_STRING + ":::" + + "http://value 2<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + BindingSetStringConverter.NULL_VALUE_STRING; + + // Convert it to a BindingSet + final VariableOrder varOrder = new VariableOrder("x", "a", "y", "b"); + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + final BindingSet bindingSet = converter.convert(bindingSetString, varOrder); + + // Ensure it converted to the expected reuslt. + final MapBindingSet expected = new MapBindingSet(); + expected.addBinding("x", new URIImpl("http://value 1")); + expected.addBinding("y", new URIImpl("http://value 2")); + + assertEquals(expected, bindingSet); + } + + @Test + public void fromString_Decimal() throws BindingSetConversionException { + // Setup the String that will be converted. + final String bindingSetString = "2.5<<~>>http://www.w3.org/2001/XMLSchema#decimal"; + + // Convert it to a BindingSet + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + final BindingSet bindingSet = converter.convert(bindingSetString, new VariableOrder("x")); + + // Ensure it converted to the expected result. + final MapBindingSet expected = new MapBindingSet(); + expected.addBinding("x", new DecimalLiteralImpl(new BigDecimal(2.5))); + + assertEquals(expected, bindingSet); + } + + @Test + public void fromString_Boolean() throws BindingSetConversionException { + // Setup the String that will be converted. + final String bindingSetString = "true<<~>>http://www.w3.org/2001/XMLSchema#boolean"; + + // Convert it to a BindingSet + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + final BindingSet bindingSet = converter.convert(bindingSetString, new VariableOrder("x")); + + // Ensure it converted to the expected result. + final MapBindingSet expected = new MapBindingSet(); + expected.addBinding("x", new BooleanLiteralImpl(true)); + + assertEquals(expected, bindingSet); + } + + @Test + public void fromString_Integer() throws BindingSetConversionException { + // Setup the String that will be converted. + final String bindingSetString = "5<<~>>http://www.w3.org/2001/XMLSchema#integer"; + + // Convert it to a BindingSet + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + final BindingSet bindingSet = converter.convert(bindingSetString, new VariableOrder("x")); + + // Ensure it converted to the expected result. + final MapBindingSet expected = new MapBindingSet(); + expected.addBinding("x", new IntegerLiteralImpl(BigInteger.valueOf(5))); + + assertEquals(expected, bindingSet); + } + + @Test(expected = IllegalArgumentException.class) + public void fromString_varOrderTooShort() throws BindingSetConversionException { + // Setup the String that will be converted. + final String bindingSetString = + "http://a<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://b<<~>>http://www.w3.org/2001/XMLSchema#anyURI"; + + // This variable order is too short. + final VariableOrder varOrder = new VariableOrder("x"); + + // The conversion should throw an exception. + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + converter.convert(bindingSetString, varOrder); + } + + @Test(expected = IllegalArgumentException.class) + public void fromString_varOrderTooLong() throws BindingSetConversionException { + // Setup the String that will be converted. + final String bindingSetString = + "http://a<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://b<<~>>http://www.w3.org/2001/XMLSchema#anyURI"; + + // This variable order is too long. + final VariableOrder varOrder = new VariableOrder("x", "y", "z"); + + // The conversion should throw an exception. + final BindingSetConverter<String> converter = new BindingSetStringConverter(); + converter.convert(bindingSetString, varOrder); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/PcjTablesIntegrationTests.java ---------------------------------------------------------------------- diff --git a/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/PcjTablesIntegrationTests.java b/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/PcjTablesIntegrationTests.java new file mode 100644 index 0000000..5d6fa54 --- /dev/null +++ b/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/PcjTablesIntegrationTests.java @@ -0,0 +1,546 @@ +package org.apache.rya.indexing.pcj.storage.accumulo; + +/* + * 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 static com.google.common.base.Preconditions.checkNotNull; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.File; +import java.io.IOException; +import java.util.HashSet; +import java.util.Map.Entry; +import java.util.Set; + +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.Instance; +import org.apache.accumulo.core.client.Scanner; +import org.apache.accumulo.core.client.TableNotFoundException; +import org.apache.accumulo.core.client.ZooKeeperInstance; +import org.apache.accumulo.core.client.security.tokens.PasswordToken; +import org.apache.accumulo.core.data.Key; +import org.apache.accumulo.core.data.Value; +import org.apache.accumulo.core.security.Authorizations; +import org.apache.accumulo.minicluster.MiniAccumuloCluster; +import org.apache.hadoop.io.Text; +import org.apache.log4j.Logger; +import org.apache.rya.indexing.pcj.storage.PcjException; +import org.apache.rya.indexing.pcj.storage.PcjMetadata; +import org.apache.rya.indexing.pcj.storage.PrecomputedJoinStorage.PCJStorageException; +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetConverter.BindingSetConversionException; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.openrdf.model.Statement; +import org.openrdf.model.impl.LiteralImpl; +import org.openrdf.model.impl.NumericLiteralImpl; +import org.openrdf.model.impl.StatementImpl; +import org.openrdf.model.impl.URIImpl; +import org.openrdf.model.vocabulary.XMLSchema; +import org.openrdf.query.BindingSet; +import org.openrdf.query.impl.MapBindingSet; +import org.openrdf.repository.RepositoryConnection; +import org.openrdf.repository.RepositoryException; + +import com.google.common.base.Optional; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; +import com.google.common.io.Files; + +import mvm.rya.accumulo.AccumuloRdfConfiguration; +import mvm.rya.accumulo.AccumuloRyaDAO; +import mvm.rya.api.RdfCloudTripleStoreConfiguration; +import mvm.rya.rdftriplestore.RdfCloudTripleStore; +import mvm.rya.rdftriplestore.RyaSailRepository; + +/** + * Performs integration test using {@link MiniAccumuloCluster} to ensure the + * functions of {@link PcjTables} work within a cluster setting. + */ +public class PcjTablesIntegrationTests { + private static final Logger log = Logger.getLogger(PcjTablesIntegrationTests.class); + + private static final String USE_MOCK_INSTANCE = ".useMockInstance"; + private static final String CLOUDBASE_INSTANCE = "sc.cloudbase.instancename"; + private static final String CLOUDBASE_USER = "sc.cloudbase.username"; + private static final String CLOUDBASE_PASSWORD = "sc.cloudbase.password"; + + private static final AccumuloPcjSerializer converter = new AccumuloPcjSerializer(); + + protected static final String RYA_TABLE_PREFIX = "demo_"; + + // Rya data store and connections. + protected MiniAccumuloCluster accumulo = null; + protected static Connector accumuloConn = null; + protected RyaSailRepository ryaRepo = null; + protected RepositoryConnection ryaConn = null; + + @Before + public void setupMiniResources() throws IOException, InterruptedException, AccumuloException, AccumuloSecurityException, RepositoryException { + // Initialize the Mini Accumulo that will be used to store Triples and get a connection to it. + accumulo = startMiniAccumulo(); + + // Setup the Rya library to use the Mini Accumulo. + ryaRepo = setupRya(accumulo); + ryaConn = ryaRepo.getConnection(); + } + + /** + * Ensure that when a new PCJ table is created, it is initialized with the + * correct metadata values. + * <p> + * The method being tested is {@link PcjTables#createPcjTable(Connector, String, Set, String)} + */ + @Test + public void createPcjTable() throws PcjException { + final String sparql = + "SELECT ?name ?age " + + "{" + + "FILTER(?age < 30) ." + + "?name <http://hasAge> ?age." + + "?name <http://playsSport> \"Soccer\" " + + "}"; + + // Create a PCJ table in the Mini Accumulo. + final String pcjTableName = new PcjTableNameFactory().makeTableName(RYA_TABLE_PREFIX, "testPcj"); + final Set<VariableOrder> varOrders = new ShiftVarOrderFactory().makeVarOrders(new VariableOrder("name;age")); + final PcjTables pcjs = new PcjTables(); + pcjs.createPcjTable(accumuloConn, pcjTableName, varOrders, sparql); + + // Fetch the PcjMetadata and ensure it has the correct values. + final PcjMetadata pcjMetadata = pcjs.getPcjMetadata(accumuloConn, pcjTableName); + + // Ensure the metadata matches the expected value. + final PcjMetadata expected = new PcjMetadata(sparql, 0L, varOrders); + assertEquals(expected, pcjMetadata); + } + + /** + * Ensure when results have been written to the PCJ table that they are in Accumulo. + * <p> + * The method being tested is {@link PcjTables#addResults(Connector, String, java.util.Collection)} + */ + @Test + public void addResults() throws PcjException, TableNotFoundException, BindingSetConversionException { + final String sparql = + "SELECT ?name ?age " + + "{" + + "FILTER(?age < 30) ." + + "?name <http://hasAge> ?age." + + "?name <http://playsSport> \"Soccer\" " + + "}"; + + // Create a PCJ table in the Mini Accumulo. + final String pcjTableName = new PcjTableNameFactory().makeTableName(RYA_TABLE_PREFIX, "testPcj"); + final Set<VariableOrder> varOrders = new ShiftVarOrderFactory().makeVarOrders(new VariableOrder("name;age")); + final PcjTables pcjs = new PcjTables(); + pcjs.createPcjTable(accumuloConn, pcjTableName, varOrders, sparql); + + // Add a few results to the PCJ table. + final MapBindingSet alice = new MapBindingSet(); + alice.addBinding("name", new URIImpl("http://Alice")); + alice.addBinding("age", new NumericLiteralImpl(14, XMLSchema.INTEGER)); + + final MapBindingSet bob = new MapBindingSet(); + bob.addBinding("name", new URIImpl("http://Bob")); + bob.addBinding("age", new NumericLiteralImpl(16, XMLSchema.INTEGER)); + + final MapBindingSet charlie = new MapBindingSet(); + charlie.addBinding("name", new URIImpl("http://Charlie")); + charlie.addBinding("age", new NumericLiteralImpl(12, XMLSchema.INTEGER)); + + final Set<BindingSet> results = Sets.<BindingSet>newHashSet(alice, bob, charlie); + pcjs.addResults(accumuloConn, pcjTableName, Sets.<VisibilityBindingSet>newHashSet( + new VisibilityBindingSet(alice), + new VisibilityBindingSet(bob), + new VisibilityBindingSet(charlie))); + + // Make sure the cardinality was updated. + final PcjMetadata metadata = pcjs.getPcjMetadata(accumuloConn, pcjTableName); + assertEquals(3, metadata.getCardinality()); + + // Scan Accumulo for the stored results. + final Multimap<String, BindingSet> fetchedResults = loadPcjResults(accumuloConn, pcjTableName); + + // Ensure the expected results match those that were stored. + final Multimap<String, BindingSet> expectedResults = HashMultimap.create(); + expectedResults.putAll("name;age", results); + expectedResults.putAll("age;name", results); + assertEquals(expectedResults, fetchedResults); + } + + /** + * Ensure when results are already stored in Rya, that we are able to populate + * the PCJ table for a new SPARQL query using those results. + * <p> + * The method being tested is: {@link PcjTables#populatePcj(Connector, String, RepositoryConnection, String)} + */ + @Test + public void populatePcj() throws RepositoryException, PcjException, TableNotFoundException, BindingSetConversionException { + // Load some Triples into Rya. + final Set<Statement> triples = new HashSet<>(); + triples.add( new StatementImpl(new URIImpl("http://Alice"), new URIImpl("http://hasAge"), new NumericLiteralImpl(14, XMLSchema.INTEGER)) ); + triples.add( new StatementImpl(new URIImpl("http://Alice"), new URIImpl("http://playsSport"), new LiteralImpl("Soccer")) ); + triples.add( new StatementImpl(new URIImpl("http://Bob"), new URIImpl("http://hasAge"), new NumericLiteralImpl(16, XMLSchema.INTEGER)) ); + triples.add( new StatementImpl(new URIImpl("http://Bob"), new URIImpl("http://playsSport"), new LiteralImpl("Soccer")) ); + triples.add( new StatementImpl(new URIImpl("http://Charlie"), new URIImpl("http://hasAge"), new NumericLiteralImpl(12, XMLSchema.INTEGER)) ); + triples.add( new StatementImpl(new URIImpl("http://Charlie"), new URIImpl("http://playsSport"), new LiteralImpl("Soccer")) ); + triples.add( new StatementImpl(new URIImpl("http://Eve"), new URIImpl("http://hasAge"), new NumericLiteralImpl(43, XMLSchema.INTEGER)) ); + triples.add( new StatementImpl(new URIImpl("http://Eve"), new URIImpl("http://playsSport"), new LiteralImpl("Soccer")) ); + + for(final Statement triple : triples) { + ryaConn.add(triple); + } + + // Create a PCJ table that will include those triples in its results. + final String sparql = + "SELECT ?name ?age " + + "{" + + "FILTER(?age < 30) ." + + "?name <http://hasAge> ?age." + + "?name <http://playsSport> \"Soccer\" " + + "}"; + + final String pcjTableName = new PcjTableNameFactory().makeTableName(RYA_TABLE_PREFIX, "testPcj"); + final Set<VariableOrder> varOrders = new ShiftVarOrderFactory().makeVarOrders(new VariableOrder("name;age")); + final PcjTables pcjs = new PcjTables(); + pcjs.createPcjTable(accumuloConn, pcjTableName, varOrders, sparql); + + // Populate the PCJ table using a Rya connection. + pcjs.populatePcj(accumuloConn, pcjTableName, ryaConn); + + // Scan Accumulo for the stored results. + final Multimap<String, BindingSet> fetchedResults = loadPcjResults(accumuloConn, pcjTableName); + + // Make sure the cardinality was updated. + final PcjMetadata metadata = pcjs.getPcjMetadata(accumuloConn, pcjTableName); + assertEquals(3, metadata.getCardinality()); + + // Ensure the expected results match those that were stored. + final MapBindingSet alice = new MapBindingSet(); + alice.addBinding("name", new URIImpl("http://Alice")); + alice.addBinding("age", new NumericLiteralImpl(14, XMLSchema.INTEGER)); + + final MapBindingSet bob = new MapBindingSet(); + bob.addBinding("name", new URIImpl("http://Bob")); + bob.addBinding("age", new NumericLiteralImpl(16, XMLSchema.INTEGER)); + + final MapBindingSet charlie = new MapBindingSet(); + charlie.addBinding("name", new URIImpl("http://Charlie")); + charlie.addBinding("age", new NumericLiteralImpl(12, XMLSchema.INTEGER)); + + final Set<BindingSet> results = Sets.<BindingSet>newHashSet(alice, bob, charlie); + + final Multimap<String, BindingSet> expectedResults = HashMultimap.create(); + expectedResults.putAll("name;age", results); + expectedResults.putAll("age;name", results); + assertEquals(expectedResults, fetchedResults); + } + + /** + * Ensure the method that creates a new PCJ table, scans Rya for matches, and + * stores them in the PCJ table works. + * <p> + * The method being tested is: {@link PcjTables#createAndPopulatePcj(RepositoryConnection, Connector, String, String, String[], Optional)} + */ + @Test + public void createAndPopulatePcj() throws RepositoryException, PcjException, TableNotFoundException, BindingSetConversionException { + // Load some Triples into Rya. + final Set<Statement> triples = new HashSet<>(); + triples.add( new StatementImpl(new URIImpl("http://Alice"), new URIImpl("http://hasAge"), new NumericLiteralImpl(14, XMLSchema.INTEGER)) ); + triples.add( new StatementImpl(new URIImpl("http://Alice"), new URIImpl("http://playsSport"), new LiteralImpl("Soccer")) ); + triples.add( new StatementImpl(new URIImpl("http://Bob"), new URIImpl("http://hasAge"), new NumericLiteralImpl(16, XMLSchema.INTEGER)) ); + triples.add( new StatementImpl(new URIImpl("http://Bob"), new URIImpl("http://playsSport"), new LiteralImpl("Soccer")) ); + triples.add( new StatementImpl(new URIImpl("http://Charlie"), new URIImpl("http://hasAge"), new NumericLiteralImpl(12, XMLSchema.INTEGER)) ); + triples.add( new StatementImpl(new URIImpl("http://Charlie"), new URIImpl("http://playsSport"), new LiteralImpl("Soccer")) ); + triples.add( new StatementImpl(new URIImpl("http://Eve"), new URIImpl("http://hasAge"), new NumericLiteralImpl(43, XMLSchema.INTEGER)) ); + triples.add( new StatementImpl(new URIImpl("http://Eve"), new URIImpl("http://playsSport"), new LiteralImpl("Soccer")) ); + + for(final Statement triple : triples) { + ryaConn.add(triple); + } + + // Create a PCJ table that will include those triples in its results. + final String sparql = + "SELECT ?name ?age " + + "{" + + "FILTER(?age < 30) ." + + "?name <http://hasAge> ?age." + + "?name <http://playsSport> \"Soccer\" " + + "}"; + + final String pcjTableName = new PcjTableNameFactory().makeTableName(RYA_TABLE_PREFIX, "testPcj"); + + // Create and populate the PCJ table. + final PcjTables pcjs = new PcjTables(); + pcjs.createAndPopulatePcj(ryaConn, accumuloConn, pcjTableName, sparql, new String[]{"name", "age"}, Optional.<PcjVarOrderFactory>absent()); + + // Make sure the cardinality was updated. + final PcjMetadata metadata = pcjs.getPcjMetadata(accumuloConn, pcjTableName); + assertEquals(3, metadata.getCardinality()); + + // Scan Accumulo for the stored results. + final Multimap<String, BindingSet> fetchedResults = loadPcjResults(accumuloConn, pcjTableName); + + // Ensure the expected results match those that were stored. + final MapBindingSet alice = new MapBindingSet(); + alice.addBinding("name", new URIImpl("http://Alice")); + alice.addBinding("age", new NumericLiteralImpl(14, XMLSchema.INTEGER)); + + final MapBindingSet bob = new MapBindingSet(); + bob.addBinding("name", new URIImpl("http://Bob")); + bob.addBinding("age", new NumericLiteralImpl(16, XMLSchema.INTEGER)); + + final MapBindingSet charlie = new MapBindingSet(); + charlie.addBinding("name", new URIImpl("http://Charlie")); + charlie.addBinding("age", new NumericLiteralImpl(12, XMLSchema.INTEGER)); + + final Set<BindingSet> results = Sets.<BindingSet>newHashSet(alice, bob, charlie); + + final Multimap<String, BindingSet> expectedResults = HashMultimap.create(); + expectedResults.putAll("name;age", results); + expectedResults.putAll("age;name", results); + + assertEquals(expectedResults, fetchedResults); + } + + @Test + public void listPcjs() throws PCJStorageException { + // Set up the table names that will be used. + final String instance1 = "instance1_"; + final String instance2 = "instance2_"; + + final String instance1_table1 = new PcjTableNameFactory().makeTableName(instance1, "table1"); + final String instance1_table2 = new PcjTableNameFactory().makeTableName(instance1, "table2"); + final String instance1_table3 = new PcjTableNameFactory().makeTableName(instance1, "table3"); + + final String instance2_table1 = new PcjTableNameFactory().makeTableName(instance2, "table1"); + + // Create the PCJ Tables that are in instance 1 and instance 2. + final Set<VariableOrder> varOrders = Sets.<VariableOrder>newHashSet( new VariableOrder("x") ); + final String sparql = "SELECT x WHERE ?x <http://isA> <http://Food>"; + + final PcjTables pcjs = new PcjTables(); + pcjs.createPcjTable(accumuloConn, instance1_table1, varOrders, sparql); + pcjs.createPcjTable(accumuloConn, instance1_table2, varOrders, sparql); + pcjs.createPcjTable(accumuloConn, instance1_table3, varOrders, sparql); + + pcjs.createPcjTable(accumuloConn, instance2_table1, varOrders, sparql); + + // Ensure all of the names have been stored for instance 1 and 2. + final Set<String> expected1 = Sets.newHashSet(instance1_table1, instance1_table2, instance1_table3); + final Set<String> instance1Tables = Sets.newHashSet( pcjs.listPcjTables(accumuloConn, instance1) ); + assertEquals(expected1, instance1Tables); + + final Set<String> expected2 = Sets.newHashSet(instance2_table1); + final Set<String> instance2Tables = Sets.newHashSet( pcjs.listPcjTables(accumuloConn, instance2) ); + assertEquals(expected2, instance2Tables); + } + + @Test + public void purge() throws PCJStorageException { + final String sparql = + "SELECT ?name ?age " + + "{" + + "FILTER(?age < 30) ." + + "?name <http://hasAge> ?age." + + "?name <http://playsSport> \"Soccer\" " + + "}"; + + // Create a PCJ table in the Mini Accumulo. + final String pcjTableName = new PcjTableNameFactory().makeTableName(RYA_TABLE_PREFIX, "testPcj"); + final Set<VariableOrder> varOrders = new ShiftVarOrderFactory().makeVarOrders(new VariableOrder("name;age")); + final PcjTables pcjs = new PcjTables(); + pcjs.createPcjTable(accumuloConn, pcjTableName, varOrders, sparql); + + // Add a few results to the PCJ table. + final MapBindingSet alice = new MapBindingSet(); + alice.addBinding("name", new URIImpl("http://Alice")); + alice.addBinding("age", new NumericLiteralImpl(14, XMLSchema.INTEGER)); + + final MapBindingSet bob = new MapBindingSet(); + bob.addBinding("name", new URIImpl("http://Bob")); + bob.addBinding("age", new NumericLiteralImpl(16, XMLSchema.INTEGER)); + + final MapBindingSet charlie = new MapBindingSet(); + charlie.addBinding("name", new URIImpl("http://Charlie")); + charlie.addBinding("age", new NumericLiteralImpl(12, XMLSchema.INTEGER)); + + pcjs.addResults(accumuloConn, pcjTableName, Sets.<VisibilityBindingSet>newHashSet( + new VisibilityBindingSet(alice), + new VisibilityBindingSet(bob), + new VisibilityBindingSet(charlie))); + + // Make sure the cardinality was updated. + PcjMetadata metadata = pcjs.getPcjMetadata(accumuloConn, pcjTableName); + assertEquals(3, metadata.getCardinality()); + + // Purge the data. + pcjs.purgePcjTable(accumuloConn, pcjTableName); + + // Make sure the cardinality was updated to 0. + metadata = pcjs.getPcjMetadata(accumuloConn, pcjTableName); + assertEquals(0, metadata.getCardinality()); + } + + @Test + public void dropPcj() throws PCJStorageException { + // Create a PCJ index. + final String tableName = new PcjTableNameFactory().makeTableName(RYA_TABLE_PREFIX, "thePcj"); + final Set<VariableOrder> varOrders = Sets.<VariableOrder>newHashSet( new VariableOrder("x") ); + final String sparql = "SELECT x WHERE ?x <http://isA> <http://Food>"; + + final PcjTables pcjs = new PcjTables(); + pcjs.createPcjTable(accumuloConn, tableName, varOrders, sparql); + + // Fetch its metadata to show that it has actually been created. + final PcjMetadata expectedMetadata = new PcjMetadata(sparql, 0L, varOrders); + PcjMetadata metadata = pcjs.getPcjMetadata(accumuloConn, tableName); + assertEquals(expectedMetadata, metadata); + + // Drop it. + pcjs.dropPcjTable(accumuloConn, tableName); + + // Show the metadata is no longer present. + PCJStorageException tableDoesNotExistException = null; + try { + metadata = pcjs.getPcjMetadata(accumuloConn, tableName); + } catch(final PCJStorageException e) { + tableDoesNotExistException = e; + } + assertNotNull(tableDoesNotExistException); + } + + /** + * Scan accumulo for the results that are stored in a PCJ table. The + * multimap stores a set of deserialized binding sets that were in the PCJ + * table for every variable order that is found in the PCJ metadata. + */ + private static Multimap<String, BindingSet> loadPcjResults(final Connector accumuloConn, final String pcjTableName) throws PcjException, TableNotFoundException, BindingSetConversionException { + final Multimap<String, BindingSet> fetchedResults = HashMultimap.create(); + + // Get the variable orders the data was written to. + final PcjTables pcjs = new PcjTables(); + final PcjMetadata pcjMetadata = pcjs.getPcjMetadata(accumuloConn, pcjTableName); + + // Scan Accumulo for the stored results. + for(final VariableOrder varOrder : pcjMetadata.getVarOrders()) { + final Scanner scanner = accumuloConn.createScanner(pcjTableName, new Authorizations()); + scanner.fetchColumnFamily( new Text(varOrder.toString()) ); + + for(final Entry<Key, Value> entry : scanner) { + final byte[] serializedResult = entry.getKey().getRow().getBytes(); + final BindingSet result = converter.convert(serializedResult, varOrder); + fetchedResults.put(varOrder.toString(), result); + } + } + + return fetchedResults; + } + + @After + public void shutdownMiniResources() { + if(ryaConn != null) { + try { + log.info("Shutting down Rya Connection."); + ryaConn.close(); + log.info("Rya Connection shut down."); + } catch(final Exception e) { + log.error("Could not shut down the Rya Connection.", e); + } + } + + if(ryaRepo != null) { + try { + log.info("Shutting down Rya Repo."); + ryaRepo.shutDown(); + log.info("Rya Repo shut down."); + } catch(final Exception e) { + log.error("Could not shut down the Rya Repo.", e); + } + } + + if(accumulo != null) { + try { + log.info("Shutting down the Mini Accumulo being used as a Rya store."); + accumulo.stop(); + log.info("Mini Accumulo being used as a Rya store shut down."); + } catch(final Exception e) { + log.error("Could not shut down the Mini Accumulo.", e); + } + } + } + + /** + * Setup a Mini Accumulo cluster that uses a temporary directory to store its data. + * + * @return A Mini Accumulo cluster. + */ + private static MiniAccumuloCluster startMiniAccumulo() throws IOException, InterruptedException, AccumuloException, AccumuloSecurityException { + final File miniDataDir = Files.createTempDir(); + + // Setup and start the Mini Accumulo. + final MiniAccumuloCluster accumulo = new MiniAccumuloCluster(miniDataDir, "password"); + accumulo.start(); + + // Store a connector to the Mini Accumulo. + final Instance instance = new ZooKeeperInstance(accumulo.getInstanceName(), accumulo.getZooKeepers()); + accumuloConn = instance.getConnector("root", new PasswordToken("password")); + + return accumulo; + } + + /** + * Format a Mini Accumulo to be a Rya repository. + * + * @param accumulo - The Mini Accumulo cluster Rya will sit on top of. (not null) + * @return The Rya repository sitting on top of the Mini Accumulo. + */ + private static RyaSailRepository setupRya(final MiniAccumuloCluster accumulo) throws AccumuloException, AccumuloSecurityException, RepositoryException { + checkNotNull(accumulo); + + // Setup the Rya Repository that will be used to create Repository Connections. + final RdfCloudTripleStore ryaStore = new RdfCloudTripleStore(); + final AccumuloRyaDAO crdfdao = new AccumuloRyaDAO(); + crdfdao.setConnector(accumuloConn); + + // Setup Rya configuration values. + final AccumuloRdfConfiguration conf = new AccumuloRdfConfiguration(); + conf.setTablePrefix("demo_"); + conf.setDisplayQueryPlan(true); + + conf.setBoolean(USE_MOCK_INSTANCE, true); + conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, RYA_TABLE_PREFIX); + conf.set(CLOUDBASE_USER, "root"); + conf.set(CLOUDBASE_PASSWORD, "password"); + conf.set(CLOUDBASE_INSTANCE, accumulo.getInstanceName()); + + crdfdao.setConf(conf); + ryaStore.setRyaDAO(crdfdao); + + final RyaSailRepository ryaRepo = new RyaSailRepository(ryaStore); + ryaRepo.initialize(); + + return ryaRepo; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/PcjTablesTests.java ---------------------------------------------------------------------- diff --git a/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/PcjTablesTests.java b/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/PcjTablesTests.java new file mode 100644 index 0000000..e16aab9 --- /dev/null +++ b/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/PcjTablesTests.java @@ -0,0 +1,84 @@ +package org.apache.rya.indexing.pcj.storage.accumulo; + +/* + * 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 static org.junit.Assert.assertEquals; + +import java.util.Set; + +import org.apache.rya.indexing.pcj.storage.PcjMetadata; +import org.apache.rya.indexing.pcj.storage.accumulo.PcjTables; +import org.apache.rya.indexing.pcj.storage.accumulo.ShiftVarOrderFactory; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; +import org.junit.Test; + +import com.google.common.collect.Sets; + +/** + * Tests the classes and methods of {@link PcjTables}. + */ +public class PcjTablesTests { + + @Test + public void variableOrder_hashCode() { + assertEquals(new VariableOrder("a", "b", "C").hashCode(), new VariableOrder("a", "b", "C").hashCode()); + } + + @Test + public void variableOrder_equals() { + assertEquals(new VariableOrder("a", "b", "C"), new VariableOrder("a", "b", "C")); + } + + @Test + public void variableOrder_fromString() { + assertEquals(new VariableOrder("a", "b", "c"), new VariableOrder("a;b;c")); + } + + @Test + public void variableORder_toString() { + assertEquals("a;b;c", new VariableOrder("a", "b", "c").toString()); + } + + @Test + public void pcjMetadata_hashCode() { + PcjMetadata meta1 = new PcjMetadata("A SPARQL string.", 5, Sets.newHashSet(new VariableOrder("a", "b", "c"), new VariableOrder("d", "e", "f"))); + PcjMetadata meta2 = new PcjMetadata("A SPARQL string.", 5, Sets.newHashSet(new VariableOrder("a", "b", "c"), new VariableOrder("d", "e", "f"))); + assertEquals(meta1.hashCode(), meta2.hashCode()); + } + + @Test + public void pcjMetadata_equals() { + PcjMetadata meta1 = new PcjMetadata("A SPARQL string.", 5, Sets.newHashSet(new VariableOrder("a", "b", "c"), new VariableOrder("d", "e", "f"))); + PcjMetadata meta2 = new PcjMetadata("A SPARQL string.", 5, Sets.newHashSet(new VariableOrder("a", "b", "c"), new VariableOrder("d", "e", "f"))); + assertEquals(meta1, meta2); + } + + @Test + public void shiftVarOrdersFactory() { + Set<VariableOrder> expected = Sets.newHashSet( + new VariableOrder("a;b;c"), + new VariableOrder("b;c;a"), + new VariableOrder("c;a;b")); + + Set<VariableOrder> varOrders = new ShiftVarOrderFactory().makeVarOrders(new VariableOrder("a;b;c")); + assertEquals(expected, varOrders); + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSetStringConverterTest.java ---------------------------------------------------------------------- diff --git a/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSetStringConverterTest.java b/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSetStringConverterTest.java new file mode 100644 index 0000000..9adb8f2 --- /dev/null +++ b/extras/rya.indexing.pcj/src/test/java/org/apache/rya/indexing/pcj/storage/accumulo/VisibilityBindingSetStringConverterTest.java @@ -0,0 +1,133 @@ +/* + * 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 org.apache.rya.indexing.pcj.storage.accumulo; + +import static org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSetStringConverter.VISIBILITY_DELIM; +import static org.junit.Assert.assertEquals; + +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetConverter.BindingSetConversionException; +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetStringConverter; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSet; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSetStringConverter; +import org.junit.Test; +import org.openrdf.model.impl.URIImpl; +import org.openrdf.query.BindingSet; +import org.openrdf.query.impl.MapBindingSet; + +/** + * Tests the methods of {@link BindingSetStringConverter}. + */ +public class VisibilityBindingSetStringConverterTest { + @Test + public void toString_URIs() throws BindingSetConversionException { + // Setup the binding set that will be converted. + final MapBindingSet originalBindingSet = new MapBindingSet(); + originalBindingSet.addBinding("x", new URIImpl("http://a")); + originalBindingSet.addBinding("y", new URIImpl("http://b")); + originalBindingSet.addBinding("z", new URIImpl("http://c")); + + final VisibilityBindingSet visiSet = new VisibilityBindingSet(originalBindingSet, "A&B&C"); + + // Convert it to a String. + final VariableOrder varOrder = new VariableOrder("y", "z", "x"); + final VisibilityBindingSetStringConverter converter = new VisibilityBindingSetStringConverter(); + final String bindingSetString = converter.convert(visiSet, varOrder); + + // Ensure it converted to the expected result.l + final String expected = + "http://b<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://c<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://a<<~>>http://www.w3.org/2001/XMLSchema#anyURI" + + VISIBILITY_DELIM + "A&B&C"; + + assertEquals(expected, bindingSetString); + } + + @Test + public void fromString() throws BindingSetConversionException { + // Setup the String that will be converted. + final String bindingSetString = + "http://b<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://c<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://a<<~>>http://www.w3.org/2001/XMLSchema#anyURI" + + VISIBILITY_DELIM + "A&B"; + + // Convert it to a BindingSet + final VariableOrder varOrder = new VariableOrder("y", "z", "x"); + final VisibilityBindingSetStringConverter converter = new VisibilityBindingSetStringConverter(); + final BindingSet bindingSet = converter.convert(bindingSetString, varOrder); + + // Ensure it converted to the expected result. + final MapBindingSet expected = new MapBindingSet(); + expected.addBinding("z", new URIImpl("http://c")); + expected.addBinding("y", new URIImpl("http://b")); + expected.addBinding("x", new URIImpl("http://a")); + final VisibilityBindingSet visiSet = new VisibilityBindingSet(expected, "A&B"); + + assertEquals(visiSet, bindingSet); + } + + @Test + public void toString_URIs_noVisi() throws BindingSetConversionException { + // Setup the binding set that will be converted. + final MapBindingSet originalBindingSet = new MapBindingSet(); + originalBindingSet.addBinding("x", new URIImpl("http://a")); + originalBindingSet.addBinding("y", new URIImpl("http://b")); + originalBindingSet.addBinding("z", new URIImpl("http://c")); + + final VisibilityBindingSet visiSet = new VisibilityBindingSet(originalBindingSet); + + // Convert it to a String. + final VariableOrder varOrder = new VariableOrder("y", "z", "x"); + final VisibilityBindingSetStringConverter converter = new VisibilityBindingSetStringConverter(); + final String bindingSetString = converter.convert(visiSet, varOrder); + + // Ensure it converted to the expected result.l + final String expected = + "http://b<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://c<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://a<<~>>http://www.w3.org/2001/XMLSchema#anyURI"; + + assertEquals(expected, bindingSetString); + } + + @Test + public void fromString_noVisi() throws BindingSetConversionException { + // Setup the String that will be converted. + final String bindingSetString = + "http://b<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://c<<~>>http://www.w3.org/2001/XMLSchema#anyURI:::" + + "http://a<<~>>http://www.w3.org/2001/XMLSchema#anyURI"; + + // Convert it to a BindingSet + final VariableOrder varOrder = new VariableOrder("y", "z", "x"); + final VisibilityBindingSetStringConverter converter = new VisibilityBindingSetStringConverter(); + final BindingSet bindingSet = converter.convert(bindingSetString, varOrder); + + // Ensure it converted to the expected result. + final MapBindingSet expected = new MapBindingSet(); + expected.addBinding("z", new URIImpl("http://c")); + expected.addBinding("y", new URIImpl("http://b")); + expected.addBinding("x", new URIImpl("http://a")); + final VisibilityBindingSet visiSet = new VisibilityBindingSet(expected); + + assertEquals(visiSet, bindingSet); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.api/pom.xml ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.api/pom.xml b/extras/rya.pcj.fluo/pcj.fluo.api/pom.xml index 292121d..7b88b5a 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.api/pom.xml +++ b/extras/rya.pcj.fluo/pcj.fluo.api/pom.xml @@ -44,5 +44,9 @@ under the License. <groupId>org.apache.rya</groupId> <artifactId>rya.pcj.fluo.app</artifactId> </dependency> + <dependency> + <groupId>org.apache.rya</groupId> + <artifactId>rya.sail</artifactId> + </dependency> </dependencies> </project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.api/src/main/java/org/apache/rya/indexing/pcj/fluo/api/CreatePcj.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.api/src/main/java/org/apache/rya/indexing/pcj/fluo/api/CreatePcj.java b/extras/rya.pcj.fluo/pcj.fluo.api/src/main/java/org/apache/rya/indexing/pcj/fluo/api/CreatePcj.java index 58e2f9a..0a4885c 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.api/src/main/java/org/apache/rya/indexing/pcj/fluo/api/CreatePcj.java +++ b/extras/rya.pcj.fluo/pcj.fluo.api/src/main/java/org/apache/rya/indexing/pcj/fluo/api/CreatePcj.java @@ -36,6 +36,12 @@ import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryMetadataDAO; import org.apache.rya.indexing.pcj.fluo.app.query.SparqlFluoQueryBuilder; import org.apache.rya.indexing.pcj.fluo.app.query.SparqlFluoQueryBuilder.NodeIds; import org.apache.rya.indexing.pcj.fluo.app.query.StatementPatternMetadata; +import org.apache.rya.indexing.pcj.storage.PcjException; +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetStringConverter; +import org.apache.rya.indexing.pcj.storage.accumulo.PcjTableNameFactory; +import org.apache.rya.indexing.pcj.storage.accumulo.PcjTables; +import org.apache.rya.indexing.pcj.storage.accumulo.ShiftVarOrderFactory; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; import org.openrdf.query.Binding; import org.openrdf.query.BindingSet; import org.openrdf.query.MalformedQueryException; @@ -50,12 +56,6 @@ import org.openrdf.sail.SailException; import info.aduna.iteration.CloseableIteration; import io.fluo.api.client.FluoClient; import io.fluo.api.types.TypedTransaction; -import mvm.rya.indexing.external.tupleSet.BindingSetStringConverter; -import mvm.rya.indexing.external.tupleSet.PcjTables; -import mvm.rya.indexing.external.tupleSet.PcjTables.PcjException; -import mvm.rya.indexing.external.tupleSet.PcjTables.PcjTableNameFactory; -import mvm.rya.indexing.external.tupleSet.PcjTables.ShiftVarOrderFactory; -import mvm.rya.indexing.external.tupleSet.PcjTables.VariableOrder; import mvm.rya.rdftriplestore.RyaSailRepository; /** http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.api/src/main/java/org/apache/rya/indexing/pcj/fluo/api/GetPcjMetadata.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.api/src/main/java/org/apache/rya/indexing/pcj/fluo/api/GetPcjMetadata.java b/extras/rya.pcj.fluo/pcj.fluo.api/src/main/java/org/apache/rya/indexing/pcj/fluo/api/GetPcjMetadata.java index 88c7930..e904afa 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.api/src/main/java/org/apache/rya/indexing/pcj/fluo/api/GetPcjMetadata.java +++ b/extras/rya.pcj.fluo/pcj.fluo.api/src/main/java/org/apache/rya/indexing/pcj/fluo/api/GetPcjMetadata.java @@ -27,13 +27,13 @@ import java.util.Map; import org.apache.accumulo.core.client.Connector; import org.apache.rya.indexing.pcj.fluo.app.StringTypeLayer; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryColumns; +import org.apache.rya.indexing.pcj.storage.PcjException; +import org.apache.rya.indexing.pcj.storage.PcjMetadata; +import org.apache.rya.indexing.pcj.storage.accumulo.PcjTables; import io.fluo.api.client.FluoClient; import io.fluo.api.data.Bytes; import io.fluo.api.types.TypedSnapshot; -import mvm.rya.indexing.external.tupleSet.PcjTables; -import mvm.rya.indexing.external.tupleSet.PcjTables.PcjException; -import mvm.rya.indexing.external.tupleSet.PcjTables.PcjMetadata; /** * Get {@link PcjMetadata} for queries that are managed by the Fluo app. http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/pom.xml ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/pom.xml b/extras/rya.pcj.fluo/pcj.fluo.app/pom.xml index b591e07..54001b1 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/pom.xml +++ b/extras/rya.pcj.fluo/pcj.fluo.app/pom.xml @@ -41,13 +41,7 @@ under the License. <!-- Rya Runtime Dependencies. --> <dependency> <groupId>org.apache.rya</groupId> - <artifactId>rya.indexing</artifactId> - <exclusions> - <exclusion> - <artifactId>slf4j-log4j12</artifactId> - <groupId>org.slf4j</groupId> - </exclusion> - </exclusions> + <artifactId>rya.indexing.pcj</artifactId> </dependency> <!-- 3rd Party Runtime Dependencies. --> http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/FilterResultUpdater.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/FilterResultUpdater.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/FilterResultUpdater.java index fc88a3c..8583eb5 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/FilterResultUpdater.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/FilterResultUpdater.java @@ -25,6 +25,10 @@ import javax.annotation.ParametersAreNonnullByDefault; import org.apache.rya.indexing.pcj.fluo.app.query.FilterMetadata; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryColumns; +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetStringConverter; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSet; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSetStringConverter; import org.openrdf.model.Resource; import org.openrdf.model.Statement; import org.openrdf.model.URI; @@ -50,10 +54,6 @@ import io.fluo.api.data.Bytes; import io.fluo.api.data.Column; import io.fluo.api.types.Encoder; import io.fluo.api.types.StringEncoder; -import mvm.rya.indexing.accumulo.VisibilityBindingSet; -import mvm.rya.indexing.external.tupleSet.BindingSetStringConverter; -import mvm.rya.indexing.external.tupleSet.PcjTables.VariableOrder; -import mvm.rya.indexing.external.tupleSet.VisibilityBindingSetStringConverter; /** * Updates the results of a Filter node when its child has added a new Binding http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/JoinResultUpdater.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/JoinResultUpdater.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/JoinResultUpdater.java index 700d0fb..8439360 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/JoinResultUpdater.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/JoinResultUpdater.java @@ -33,6 +33,11 @@ import javax.annotation.ParametersAreNonnullByDefault; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryColumns; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryMetadataDAO; import org.apache.rya.indexing.pcj.fluo.app.query.JoinMetadata; +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetConverter.BindingSetConversionException; +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetStringConverter; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSet; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSetStringConverter; import org.openrdf.query.Binding; import org.openrdf.query.BindingSet; import org.openrdf.query.impl.MapBindingSet; @@ -51,11 +56,6 @@ import io.fluo.api.iterator.ColumnIterator; import io.fluo.api.iterator.RowIterator; import io.fluo.api.types.Encoder; import io.fluo.api.types.StringEncoder; -import mvm.rya.indexing.accumulo.VisibilityBindingSet; -import mvm.rya.indexing.external.tupleSet.BindingSetConverter.BindingSetConversionException; -import mvm.rya.indexing.external.tupleSet.BindingSetStringConverter; -import mvm.rya.indexing.external.tupleSet.PcjTables.VariableOrder; -import mvm.rya.indexing.external.tupleSet.VisibilityBindingSetStringConverter; /** * Updates the results of a Join node when one of its children has added a http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/QueryResultUpdater.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/QueryResultUpdater.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/QueryResultUpdater.java index 8e0a6fe..0c57985 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/QueryResultUpdater.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/QueryResultUpdater.java @@ -25,6 +25,10 @@ import javax.annotation.ParametersAreNonnullByDefault; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryColumns; import org.apache.rya.indexing.pcj.fluo.app.query.QueryMetadata; +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetStringConverter; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSet; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSetStringConverter; import org.openrdf.query.Binding; import org.openrdf.query.impl.MapBindingSet; @@ -33,10 +37,6 @@ import io.fluo.api.data.Bytes; import io.fluo.api.data.Column; import io.fluo.api.types.Encoder; import io.fluo.api.types.StringEncoder; -import mvm.rya.indexing.accumulo.VisibilityBindingSet; -import mvm.rya.indexing.external.tupleSet.BindingSetStringConverter; -import mvm.rya.indexing.external.tupleSet.PcjTables.VariableOrder; -import mvm.rya.indexing.external.tupleSet.VisibilityBindingSetStringConverter; /** * Updates the results of a Query node when one of its children has added a http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/IncrementalResultExporter.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/IncrementalResultExporter.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/IncrementalResultExporter.java index c2c031c..d93bae2 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/IncrementalResultExporter.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/IncrementalResultExporter.java @@ -20,8 +20,9 @@ package org.apache.rya.indexing.pcj.fluo.app.export; import javax.annotation.ParametersAreNonnullByDefault; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSet; + import io.fluo.api.types.TypedTransactionBase; -import mvm.rya.indexing.accumulo.VisibilityBindingSet; /** * Exports a single Binding Set that is a new result for a SPARQL query to some http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/rya/RyaResultExporter.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/rya/RyaResultExporter.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/rya/RyaResultExporter.java index 5c8c719..f9af15c 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/rya/RyaResultExporter.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/rya/RyaResultExporter.java @@ -25,12 +25,12 @@ import java.util.Collections; import org.apache.accumulo.core.client.Connector; import org.apache.rya.indexing.pcj.fluo.app.export.IncrementalResultExporter; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryColumns; +import org.apache.rya.indexing.pcj.storage.PcjException; +import org.apache.rya.indexing.pcj.storage.accumulo.PcjTables; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSet; import io.fluo.api.data.Bytes; import io.fluo.api.types.TypedTransactionBase; -import mvm.rya.indexing.accumulo.VisibilityBindingSet; -import mvm.rya.indexing.external.tupleSet.PcjTables; -import mvm.rya.indexing.external.tupleSet.PcjTables.PcjException; /** * Incrementally exports SPARQL query results to Accumulo PCJ tables as they are defined by Rya. http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/rya/RyaResultExporterFactory.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/rya/RyaResultExporterFactory.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/rya/RyaResultExporterFactory.java index fd63314..6550f66 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/rya/RyaResultExporterFactory.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/export/rya/RyaResultExporterFactory.java @@ -28,11 +28,11 @@ import org.apache.accumulo.core.client.ZooKeeperInstance; import org.apache.accumulo.core.client.security.tokens.PasswordToken; import org.apache.rya.indexing.pcj.fluo.app.export.IncrementalResultExporter; import org.apache.rya.indexing.pcj.fluo.app.export.IncrementalResultExporterFactory; +import org.apache.rya.indexing.pcj.storage.accumulo.PcjTables; import com.google.common.base.Optional; import io.fluo.api.observer.Observer.Context; -import mvm.rya.indexing.external.tupleSet.PcjTables; /** * Creates instances of {@link RyaResultExporter}. http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/BindingSetUpdater.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/BindingSetUpdater.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/BindingSetUpdater.java index 9bd0148..06fca0a 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/BindingSetUpdater.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/BindingSetUpdater.java @@ -31,6 +31,8 @@ import org.apache.rya.indexing.pcj.fluo.app.query.FilterMetadata; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryMetadataDAO; import org.apache.rya.indexing.pcj.fluo.app.query.JoinMetadata; import org.apache.rya.indexing.pcj.fluo.app.query.QueryMetadata; +import org.apache.rya.indexing.pcj.storage.accumulo.BindingSetConverter.BindingSetConversionException; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSet; import io.fluo.api.client.TransactionBase; import io.fluo.api.data.Bytes; @@ -39,8 +41,6 @@ import io.fluo.api.types.Encoder; import io.fluo.api.types.StringEncoder; import io.fluo.api.types.TypedObserver; import io.fluo.api.types.TypedTransactionBase; -import mvm.rya.indexing.accumulo.VisibilityBindingSet; -import mvm.rya.indexing.external.tupleSet.BindingSetConverter.BindingSetConversionException; /** * Notified when the results of a node have been updated to include a new Binding http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/FilterObserver.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/FilterObserver.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/FilterObserver.java index fb15934..ea1f3a0 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/FilterObserver.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/FilterObserver.java @@ -24,12 +24,12 @@ import org.apache.rya.indexing.pcj.fluo.app.BindingSetRow; import org.apache.rya.indexing.pcj.fluo.app.query.FilterMetadata; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryColumns; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryMetadataDAO; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSet; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSetStringConverter; import org.openrdf.query.BindingSet; import io.fluo.api.client.TransactionBase; -import mvm.rya.indexing.accumulo.VisibilityBindingSet; -import mvm.rya.indexing.external.tupleSet.PcjTables.VariableOrder; -import mvm.rya.indexing.external.tupleSet.VisibilityBindingSetStringConverter; /** * Notified when the results of a Filter have been updated to include a new http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/JoinObserver.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/JoinObserver.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/JoinObserver.java index a8cd0df..dbde885 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/JoinObserver.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/JoinObserver.java @@ -24,12 +24,12 @@ import org.apache.rya.indexing.pcj.fluo.app.BindingSetRow; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryColumns; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryMetadataDAO; import org.apache.rya.indexing.pcj.fluo.app.query.JoinMetadata; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSet; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSetStringConverter; import org.openrdf.query.BindingSet; import io.fluo.api.client.TransactionBase; -import mvm.rya.indexing.accumulo.VisibilityBindingSet; -import mvm.rya.indexing.external.tupleSet.PcjTables.VariableOrder; -import mvm.rya.indexing.external.tupleSet.VisibilityBindingSetStringConverter; /** * Notified when the results of a Join have been updated to include a new http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/QueryResultObserver.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/QueryResultObserver.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/QueryResultObserver.java index fe4dc56..bc9da29 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/QueryResultObserver.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/QueryResultObserver.java @@ -29,6 +29,9 @@ import org.apache.rya.indexing.pcj.fluo.app.export.rya.RyaResultExporterFactory; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryColumns; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryMetadataDAO; import org.apache.rya.indexing.pcj.fluo.app.query.QueryMetadata; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSet; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSetStringConverter; import com.google.common.base.Optional; import com.google.common.collect.ImmutableSet; @@ -39,9 +42,6 @@ import io.fluo.api.types.Encoder; import io.fluo.api.types.StringEncoder; import io.fluo.api.types.TypedObserver; import io.fluo.api.types.TypedTransactionBase; -import mvm.rya.indexing.accumulo.VisibilityBindingSet; -import mvm.rya.indexing.external.tupleSet.PcjTables.VariableOrder; -import mvm.rya.indexing.external.tupleSet.VisibilityBindingSetStringConverter; /** * Performs incremental result exporting to the configured destinations. http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/StatementPatternObserver.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/StatementPatternObserver.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/StatementPatternObserver.java index 7b1e510..4694371 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/StatementPatternObserver.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/StatementPatternObserver.java @@ -24,12 +24,12 @@ import org.apache.rya.indexing.pcj.fluo.app.BindingSetRow; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryColumns; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryMetadataDAO; import org.apache.rya.indexing.pcj.fluo.app.query.StatementPatternMetadata; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSet; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSetStringConverter; import org.openrdf.query.BindingSet; import io.fluo.api.client.TransactionBase; -import mvm.rya.indexing.accumulo.VisibilityBindingSet; -import mvm.rya.indexing.external.tupleSet.PcjTables.VariableOrder; -import mvm.rya.indexing.external.tupleSet.VisibilityBindingSetStringConverter; /** * Notified when the results of a Statement Pattern have been updated to include http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/TripleObserver.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/TripleObserver.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/TripleObserver.java index 496c0ed..4feb752 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/TripleObserver.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/TripleObserver.java @@ -31,6 +31,9 @@ import org.apache.rya.indexing.pcj.fluo.app.StringTypeLayer; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryColumns; import org.apache.rya.indexing.pcj.fluo.app.query.FluoQueryMetadataDAO; import org.apache.rya.indexing.pcj.fluo.app.query.StatementPatternMetadata; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSet; +import org.apache.rya.indexing.pcj.storage.accumulo.VisibilityBindingSetStringConverter; import com.google.common.collect.Maps; @@ -44,9 +47,6 @@ import io.fluo.api.types.Encoder; import io.fluo.api.types.StringEncoder; import io.fluo.api.types.TypedObserver; import io.fluo.api.types.TypedTransactionBase; -import mvm.rya.indexing.accumulo.VisibilityBindingSet; -import mvm.rya.indexing.external.tupleSet.PcjTables.VariableOrder; -import mvm.rya.indexing.external.tupleSet.VisibilityBindingSetStringConverter; /** * An observer that matches new Triples to the Statement Patterns that are part http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/14073a23/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/query/CommonNodeMetadata.java ---------------------------------------------------------------------- diff --git a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/query/CommonNodeMetadata.java b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/query/CommonNodeMetadata.java index b559037..aeace2c 100644 --- a/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/query/CommonNodeMetadata.java +++ b/extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/query/CommonNodeMetadata.java @@ -24,11 +24,10 @@ import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.concurrent.Immutable; import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.rya.indexing.pcj.storage.accumulo.VariableOrder; import com.google.common.base.Objects; -import mvm.rya.indexing.external.tupleSet.PcjTables.VariableOrder; - /** * Metadata that is common to all nodes that are part of a query. */
