http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/external/tupleSet/AccumuloIndexSetTest.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/mvm/rya/indexing/external/tupleSet/AccumuloIndexSetTest.java
 
b/extras/indexing/src/test/java/mvm/rya/indexing/external/tupleSet/AccumuloIndexSetTest.java
index 9aac2d6..f18e61f 100644
--- 
a/extras/indexing/src/test/java/mvm/rya/indexing/external/tupleSet/AccumuloIndexSetTest.java
+++ 
b/extras/indexing/src/test/java/mvm/rya/indexing/external/tupleSet/AccumuloIndexSetTest.java
@@ -18,28 +18,16 @@
  */
 package mvm.rya.indexing.external.tupleSet;
 
-import info.aduna.iteration.CloseableIteration;
-
+import java.net.UnknownHostException;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import mvm.rya.accumulo.AccumuloRdfConfiguration;
-import mvm.rya.api.RdfCloudTripleStoreConfiguration;
-import mvm.rya.api.persist.RyaDAOException;
-import mvm.rya.api.resolver.RyaTypeResolverException;
-import mvm.rya.indexing.accumulo.ConfigUtils;
-import mvm.rya.indexing.external.PcjIntegrationTestingUtil;
-import mvm.rya.indexing.pcj.matching.QueryVariableNormalizer;
-import mvm.rya.rdftriplestore.RyaSailRepository;
-import mvm.rya.rdftriplestore.inference.InferenceEngineException;
-import mvm.rya.sail.config.RyaSailFactory;
-
 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.TableNotFoundException;
 import org.apache.accumulo.core.client.admin.TableOperations;
 import org.apache.hadoop.conf.Configuration;
@@ -56,13 +44,11 @@ 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.Binding;
 import org.openrdf.query.BindingSet;
 import org.openrdf.query.MalformedQueryException;
 import org.openrdf.query.QueryEvaluationException;
 import org.openrdf.query.algebra.Projection;
 import org.openrdf.query.algebra.evaluation.QueryBindingSet;
-import org.openrdf.query.impl.BindingImpl;
 import org.openrdf.query.parser.ParsedQuery;
 import org.openrdf.query.parser.sparql.SPARQLParser;
 import org.openrdf.repository.RepositoryConnection;
@@ -73,1827 +59,620 @@ import com.google.common.base.Optional;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
-public class AccumuloIndexSetTest {
-
-       protected static Connector accumuloConn = null;
-       protected RyaSailRepository ryaRepo = null;
-       protected RepositoryConnection ryaConn = null;
-       protected Configuration conf = getConf();
-       protected String prefix = "rya_";
-
-       @Before
-       public void init() throws AccumuloException, AccumuloSecurityException,
-                       RyaDAOException, RepositoryException, 
TableNotFoundException,
-                       InferenceEngineException {
-               accumuloConn = ConfigUtils.getConnector(conf);
-               final TableOperations ops = accumuloConn.tableOperations();
-               if (ops.exists(prefix + "INDEX_" + "testPcj")) {
-                       ops.delete(prefix + "INDEX_" + "testPcj");
-               }
-               if (ops.exists(prefix + "spo")) {
-                       ops.delete(prefix + "spo");
-               }
-               if (ops.exists(prefix + "po")) {
-                       ops.delete(prefix + "po");
-               }
-               if (ops.exists(prefix + "osp")) {
-                       ops.delete(prefix + "osp");
-               }
-               ryaRepo = new 
RyaSailRepository(RyaSailFactory.getInstance(conf));
-               ryaRepo.initialize();
-               ryaConn = ryaRepo.getConnection();
-       }
-
-       /**
-        * TODO doc
-        *
-        * @throws QueryEvaluationException
-        * @throws SailException
-        * @throws MalformedQueryException
-        * @throws AccumuloSecurityException
-        * @throws AccumuloException
-        */
-       @Test
-       public void accumuloIndexSetTestWithEmptyBindingSet()
-                       throws RepositoryException, PcjException, 
TableNotFoundException,
-                       RyaTypeResolverException, MalformedQueryException, 
SailException,
-                       QueryEvaluationException, AccumuloException, 
AccumuloSecurityException {
-               // 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);
-               }
-
-//             Scanner scanner = accumuloConn.createScanner(prefix + "spo",
-//                             new Authorizations("U","USA"));
-//             for (Map.Entry<Key, org.apache.accumulo.core.data.Value> e : 
scanner) {
-//                     System.out.println(e.getKey());
-//             }
-
-               // Create a PCJ table 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(
-                               prefix, "testPcj");
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age" },
-                               Optional.<PcjVarOrderFactory> absent());
-
-               final AccumuloIndexSet ais = new AccumuloIndexSet(conf, 
pcjTableName);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(new QueryBindingSet());
-               final Set<BindingSet> fetchedResults = new 
HashSet<BindingSet>();
-               while (results.hasNext()) {
-                       fetchedResults.add(results.next());
-               }
-               // Ensure the expected results match those that were stored.
-               final QueryBindingSet alice = new QueryBindingSet();
-               alice.addBinding("name", new URIImpl("http://Alice";));
-               alice.addBinding("age", new NumericLiteralImpl(14, 
XMLSchema.INTEGER));
-
-               final QueryBindingSet bob = new QueryBindingSet();
-               bob.addBinding("name", new URIImpl("http://Bob";));
-               bob.addBinding("age", new NumericLiteralImpl(16, 
XMLSchema.INTEGER));
-
-               final QueryBindingSet charlie = new QueryBindingSet();
-               charlie.addBinding("name", new URIImpl("http://Charlie";));
-               charlie.addBinding("age", new NumericLiteralImpl(12, 
XMLSchema.INTEGER));
-
-               final Set<BindingSet> expectedResults = Sets.<BindingSet> 
newHashSet(
-                               alice, bob, charlie);
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-       /**
-        * TODO doc
-        *
-        * @throws QueryEvaluationException
-        * @throws SailException
-        * @throws MalformedQueryException
-        * @throws AccumuloSecurityException
-        * @throws AccumuloException
-        */
-       @Test
-       public void accumuloIndexSetTestWithBindingSet()
-                       throws RepositoryException, PcjException, 
TableNotFoundException,
-                       RyaTypeResolverException, MalformedQueryException, 
SailException,
-                       QueryEvaluationException, AccumuloException, 
AccumuloSecurityException {
-               // 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 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(
-                               prefix, "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age" },
-                               Optional.<PcjVarOrderFactory> absent());
-
-               final AccumuloIndexSet ais = new AccumuloIndexSet(conf, 
pcjTableName);
-
-               final QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("name", new URIImpl("http://Alice";));
-               bs.addBinding("location", new URIImpl("http://Virginia";));
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bs);
-
-               bs.addBinding("age", new NumericLiteralImpl(14, 
XMLSchema.INTEGER));
-               Assert.assertEquals(bs, results.next());
-
-       }
-
-       @Test
-       public void accumuloIndexSetTestWithTwoBindingSets()
-                       throws RepositoryException, PcjException, 
TableNotFoundException,
-                       RyaTypeResolverException, MalformedQueryException, 
SailException,
-                       QueryEvaluationException, AccumuloException, 
AccumuloSecurityException {
-               // 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 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(
-                               prefix, "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age" },
-                               Optional.<PcjVarOrderFactory> absent());
-
-               final AccumuloIndexSet ais = new AccumuloIndexSet(conf, 
pcjTableName);
-
-               final QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("birthDate", new LiteralImpl("1983-03-17", new 
URIImpl(
-                               "http://www.w3.org/2001/XMLSchema#date";)));
-               bs.addBinding("name", new URIImpl("http://Alice";));
-
-               final QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("birthDate", new LiteralImpl("1983-04-18", new 
URIImpl(
-                               "http://www.w3.org/2001/XMLSchema#date";)));
-               bs2.addBinding("name", new URIImpl("http://Bob";));
-
-               final Set<BindingSet> bSets = Sets.<BindingSet> newHashSet(bs, 
bs2);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               final QueryBindingSet alice = new QueryBindingSet();
-               alice.addBinding("name", new URIImpl("http://Alice";));
-               alice.addBinding("age", new NumericLiteralImpl(14, 
XMLSchema.INTEGER));
-               alice.addBinding("birthDate", new LiteralImpl("1983-03-17",
-                               new 
URIImpl("http://www.w3.org/2001/XMLSchema#date";)));
-
-               final QueryBindingSet bob = new QueryBindingSet();
-               bob.addBinding("name", new URIImpl("http://Bob";));
-               bob.addBinding("age", new NumericLiteralImpl(16, 
XMLSchema.INTEGER));
-               bob.addBinding("birthDate", new LiteralImpl("1983-04-18", new 
URIImpl(
-                               "http://www.w3.org/2001/XMLSchema#date";)));
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       final BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(Sets.<BindingSet> newHashSet(alice, bob),
-                               fetchedResults);
-       }
-
-       @Test
-       public void accumuloIndexSetTestWithNoBindingSet()
-                       throws RepositoryException, PcjException, 
TableNotFoundException,
-                       RyaTypeResolverException, MalformedQueryException, 
SailException,
-                       QueryEvaluationException, AccumuloException, 
AccumuloSecurityException {
-               // 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 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(
-                               prefix, "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age" },
-                               Optional.<PcjVarOrderFactory> absent());
-
-               final AccumuloIndexSet ais = new AccumuloIndexSet(conf,
-                               pcjTableName);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(new HashSet<BindingSet>());
-
-               Assert.assertEquals(false, results.hasNext());
-
-       }
-
-       @Test
-       public void multipleCommonVarBindingTest() throws RepositoryException,
-                       PcjException, TableNotFoundException, 
RyaTypeResolverException,
-                       MalformedQueryException, SailException, 
QueryEvaluationException,
-                       AccumuloException, AccumuloSecurityException {
-               // 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 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(
-                               prefix, "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age" },
-                               Optional.<PcjVarOrderFactory> absent());
-
-               final AccumuloIndexSet ais = new AccumuloIndexSet(conf,
-                               pcjTableName);
-
-               final QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("birthDate", new LiteralImpl("1983-03-17", new 
URIImpl(
-                               "http://www.w3.org/2001/XMLSchema#date";)));
-               bs.addBinding("location", new URIImpl("http://Virginia";));
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bs);
-
-               final QueryBindingSet alice = new QueryBindingSet();
-               alice.addBinding("name", new URIImpl("http://Alice";));
-               alice.addBinding("age", new NumericLiteralImpl(14, 
XMLSchema.INTEGER));
-               alice.addAll(bs);
-
-               final QueryBindingSet bob = new QueryBindingSet();
-               bob.addBinding("name", new URIImpl("http://Bob";));
-               bob.addBinding("age", new NumericLiteralImpl(16, 
XMLSchema.INTEGER));
-               bob.addAll(bs);
-
-               final QueryBindingSet charlie = new QueryBindingSet();
-               charlie.addBinding("name", new URIImpl("http://Charlie";));
-               charlie.addBinding("age", new NumericLiteralImpl(12, 
XMLSchema.INTEGER));
-               charlie.addAll(bs);
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       fetchedResults.add(results.next());
-               }
-               Assert.assertEquals(3, fetchedResults.size());
-               Assert.assertEquals(Sets.<BindingSet> newHashSet(alice, bob, 
charlie),
-                               fetchedResults);
-       }
-
-       @Test
-       public void manyCommonVarBindingTest() throws RepositoryException,
-                       PcjException, TableNotFoundException, 
RyaTypeResolverException,
-                       MalformedQueryException, SailException, 
QueryEvaluationException,
-                       AccumuloException, AccumuloSecurityException {
-               // 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 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(
-                               prefix, "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age" },
-                               Optional.<PcjVarOrderFactory> absent());
-
-               final AccumuloIndexSet ais = new AccumuloIndexSet(conf,
-                               pcjTableName);
-
-               final QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("birthDate", new LiteralImpl("1983-03-17", new 
URIImpl(
-                               "http://www.w3.org/2001/XMLSchema#date";)));
-               bs.addBinding("location", new URIImpl("http://Virginia";));
-
-               final QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("birthDate", new LiteralImpl("1983-04-18", new 
URIImpl(
-                               "http://www.w3.org/2001/XMLSchema#date";)));
-               bs2.addBinding("location", new URIImpl("http://Georgia";));
-
-               final Set<BindingSet> bSets = Sets.<BindingSet> newHashSet(bs, 
bs2);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               final QueryBindingSet alice1 = new QueryBindingSet();
-               alice1.addBinding("name", new URIImpl("http://Alice";));
-               alice1.addBinding("age", new NumericLiteralImpl(14, 
XMLSchema.INTEGER));
-               alice1.addAll(bs);
-
-               final QueryBindingSet bob1 = new QueryBindingSet();
-               bob1.addBinding("name", new URIImpl("http://Bob";));
-               bob1.addBinding("age", new NumericLiteralImpl(16, 
XMLSchema.INTEGER));
-               bob1.addAll(bs);
-
-               final QueryBindingSet charlie1 = new QueryBindingSet();
-               charlie1.addBinding("name", new URIImpl("http://Charlie";));
-               charlie1.addBinding("age",
-                               new NumericLiteralImpl(12, XMLSchema.INTEGER));
-               charlie1.addAll(bs);
-
-               final QueryBindingSet alice2 = new QueryBindingSet();
-               alice2.addBinding("name", new URIImpl("http://Alice";));
-               alice2.addBinding("age", new NumericLiteralImpl(14, 
XMLSchema.INTEGER));
-               alice2.addAll(bs2);
-
-               final QueryBindingSet bob2 = new QueryBindingSet();
-               bob2.addBinding("name", new URIImpl("http://Bob";));
-               bob2.addBinding("age", new NumericLiteralImpl(16, 
XMLSchema.INTEGER));
-               bob2.addAll(bs2);
-
-               final QueryBindingSet charlie2 = new QueryBindingSet();
-               charlie2.addBinding("name", new URIImpl("http://Charlie";));
-               charlie2.addBinding("age",
-                               new NumericLiteralImpl(12, XMLSchema.INTEGER));
-               charlie2.addAll(bs2);
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       final BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(Sets.<BindingSet> newHashSet(alice1, bob1,
-                               charlie1, alice2, bob2, charlie2), 
fetchedResults);
-       }
-
-       @Test
-       public void variableNormalizationTest() throws RepositoryException,
-                       PcjException, TableNotFoundException, 
RyaTypeResolverException,
-                       MalformedQueryException, SailException, 
QueryEvaluationException,
-                       AccumuloException, AccumuloSecurityException {
-               // 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 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(
-                               prefix, "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age" },
-                               Optional.<PcjVarOrderFactory> absent());
-
-               final String sparql2 = "SELECT ?x ?y " + "{" + "FILTER(?y < 30) 
."
-                               + "?x <http://hasAge> ?y."
-                               + "?x <http://playsSport> \"Soccer\" " + "}";
-
-               final SPARQLParser p = new SPARQLParser();
-               final ParsedQuery pq = p.parseQuery(sparql2, null);
-
-               final Map<String, String> map = new HashMap<>();
-               map.put("x", "name");
-               map.put("y", "age");
-               final AccumuloIndexSet ais = new AccumuloIndexSet(conf,
-                               pcjTableName);
-               ais.setProjectionExpr((Projection) pq.getTupleExpr());
-               ais.setTableVarMap(map);
-               ais.setSupportedVariableOrderMap(Lists.<String> 
newArrayList("x;y",
-                               "y;x"));
-
-               final QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("birthDate", new LiteralImpl("1983-03-17", new 
URIImpl(
-                               "http://www.w3.org/2001/XMLSchema#date";)));
-               bs.addBinding("x", new URIImpl("http://Alice";));
-
-               final QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("birthDate", new LiteralImpl("1983-04-18", new 
URIImpl(
-                               "http://www.w3.org/2001/XMLSchema#date";)));
-               bs2.addBinding("x", new URIImpl("http://Bob";));
-
-               final Set<BindingSet> bSets = Sets.<BindingSet> newHashSet(bs, 
bs2);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               final QueryBindingSet alice = new QueryBindingSet();
-               alice.addBinding("x", new URIImpl("http://Alice";));
-               alice.addBinding("y", new NumericLiteralImpl(14, 
XMLSchema.INTEGER));
-               alice.addBinding("birthDate", new LiteralImpl("1983-03-17",
-                               new 
URIImpl("http://www.w3.org/2001/XMLSchema#date";)));
-
-               final QueryBindingSet bob = new QueryBindingSet();
-               bob.addBinding("x", new URIImpl("http://Bob";));
-               bob.addBinding("y", new NumericLiteralImpl(16, 
XMLSchema.INTEGER));
-               bob.addBinding("birthDate", new LiteralImpl("1983-04-18", new 
URIImpl(
-                               "http://www.w3.org/2001/XMLSchema#date";)));
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       final BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(Sets.<BindingSet> newHashSet(alice, bob),
-                               fetchedResults);
-       }
-
-       @Test
-       public void variableInstantiationTest() throws Exception {
-               // 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 will include those triples in its results.
-               final String sparql = "SELECT ?name ?age " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "?name <http://playsSport> \"Soccer\" " + "}";
-
-               final String pcjTableName = new 
PcjTableNameFactory().makeTableName(
-                               prefix, "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age" },
-                               Optional.<PcjVarOrderFactory> absent());
-
-               final String sparql2 = "SELECT ?x " + "{" + "?x <http://hasAge> 
16 ."
-                               + "?x <http://playsSport> \"Soccer\" " + "}";
-
-               final SPARQLParser p = new SPARQLParser();
-               final ParsedQuery pq1 = p.parseQuery(sparql, null);
-               final ParsedQuery pq2 = p.parseQuery(sparql2, null);
-
-               final AccumuloIndexSet ais = new AccumuloIndexSet(conf,
-                               pcjTableName);
-               ais.setProjectionExpr((Projection) QueryVariableNormalizer
-                               .getNormalizedIndex(pq2.getTupleExpr(), 
pq1.getTupleExpr())
-                               .get(0));
-
-               final QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("birthDate", new LiteralImpl("1983-03-17", new 
URIImpl(
-                               "http://www.w3.org/2001/XMLSchema#date";)));
-               bs.addBinding("x", new URIImpl("http://Alice";));
-
-               final QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("birthDate", new LiteralImpl("1983-04-18", new 
URIImpl(
-                               "http://www.w3.org/2001/XMLSchema#date";)));
-               bs2.addBinding("x", new URIImpl("http://Bob";));
-
-               final Set<BindingSet> bSets = Sets.<BindingSet> newHashSet(bs, 
bs2);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       final BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(Sets.<BindingSet> newHashSet(bs2), 
fetchedResults);
-       }
-
-       @Test
-       public void accumuloIndexSetTestAttemptJoinAccrossTypes() throws 
Exception {
-               // 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")));
-
-               for (final Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               final String sparql = "SELECT ?name ?age " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "?name <http://playsSport> \"Soccer\" " + "}";
-
-               final String pcjTableName = new 
PcjTableNameFactory().makeTableName(
-                               prefix, "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age" },
-                               Optional.<PcjVarOrderFactory> absent());
-               AccumuloIndexSet ais = new AccumuloIndexSet(conf, pcjTableName);
-
-               final QueryBindingSet bs1 = new QueryBindingSet();
-               bs1.addBinding("age", new LiteralImpl("16"));
-               final QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("age", new NumericLiteralImpl(14, 
XMLSchema.INTEGER));
-
-               final Set<BindingSet> bSets = Sets.<BindingSet> newHashSet(bs1, 
bs2);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       final BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               bs2.addBinding("name", new URIImpl("http://Alice";));
-               Assert.assertEquals(Sets.<BindingSet> newHashSet(bs2), 
fetchedResults);
-       }
-
-       @Test
-       public void optionalBindingSetTest() throws Exception {
-               // 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://Bob";), new 
URIImpl(
-                               "http://hasAge";), new NumericLiteralImpl(32, 
XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Bob";), new 
URIImpl(
-                               "http://playsSport";), new 
LiteralImpl("Soccer")));
-
-               for (final Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               final String sparql = "SELECT ?name ?age " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "?name <http://playsSport> \"Soccer\" " + "}";
-
-               final String pcjTableName = new 
PcjTableNameFactory().makeTableName(
-                               prefix, "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age" },
-                               Optional.<PcjVarOrderFactory> absent());
-               AccumuloIndexSet ais = new AccumuloIndexSet(conf, pcjTableName);
-
-               final QueryBindingSet bs1 = new QueryBindingSet();
-               bs1.addBinding("name", new URIImpl("http://Alice";));
-               final QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("name", new URIImpl("http://Bob";));
-               bs2.addBinding("age", new NumericLiteralImpl(16, 
XMLSchema.INTEGER));
-
-               final List<BindingSet> bSets = Lists
-                               .<BindingSet> newArrayList(bs1, bs2);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               Binding exBinding1 = new BindingImpl("age", new 
NumericLiteralImpl(14, XMLSchema.INTEGER));
-               Binding exBinding2 = new BindingImpl("name", new 
URIImpl("http://Alice";));
-               Binding exBinding5 = new BindingImpl("age", new 
NumericLiteralImpl(16, XMLSchema.INTEGER));
-               Binding exBinding6 = new BindingImpl("name", new 
URIImpl("http://Bob";));
-
-               QueryBindingSet pcjBs1 = new QueryBindingSet();
-               pcjBs1.addBinding(exBinding1);
-               pcjBs1.addBinding(exBinding2);
-
-               QueryBindingSet pcjBs2 = new QueryBindingSet();
-               pcjBs2.addBinding(exBinding5);
-               pcjBs2.addBinding(exBinding6);
-
-               Set<BindingSet> expectedResults = new HashSet<>();
-               expectedResults.add(pcjBs1);
-               expectedResults.add(pcjBs2);
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       final BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-       @Test
-       public void variableCommonVarOrderLenWithCrossProductTest()
-                       throws Exception {
-               // 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://Bob";), new 
URIImpl(
-                               "http://hasAge";), new NumericLiteralImpl(32, 
XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Bob";), new 
URIImpl(
-                               "http://playsSport";), new 
LiteralImpl("Soccer")));
-
-               for (final Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               final String sparql = "SELECT ?name ?age " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "?name <http://playsSport> \"Soccer\" " + "}";
-
-               final String pcjTableName = new 
PcjTableNameFactory().makeTableName(
-                               prefix, "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age" },
-                               Optional.<PcjVarOrderFactory> absent());
-               AccumuloIndexSet ais = new AccumuloIndexSet(conf, pcjTableName);
-
-               QueryBindingSet bs1 = new QueryBindingSet();
-               bs1.addBinding("name", new URIImpl("http://Alice";));
-               QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("name", new URIImpl("http://Bob";));
-               bs2.addBinding("age", new NumericLiteralImpl(16, 
XMLSchema.INTEGER));
-               QueryBindingSet bs3 = new QueryBindingSet();
-               bs3.addBinding("location", new URIImpl("http://Virginia";));
-
-               final List<BindingSet> bSets = Lists.<BindingSet> 
newArrayList(bs1,
-                               bs2, bs3);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               Binding exBinding1 = new BindingImpl("age", new 
NumericLiteralImpl(14, XMLSchema.INTEGER));
-               Binding exBinding2 = new BindingImpl("name", new 
URIImpl("http://Alice";));
-               Binding exBinding5 = new BindingImpl("age", new 
NumericLiteralImpl(16, XMLSchema.INTEGER));
-               Binding exBinding6 = new BindingImpl("name", new 
URIImpl("http://Bob";));
-               Binding exBinding3 = new BindingImpl("age", new 
NumericLiteralImpl(32, XMLSchema.INTEGER));
-               Binding exBinding4 = new BindingImpl("name", new 
URIImpl("http://Bob";));
-
-               QueryBindingSet pcjBs1 = new QueryBindingSet();
-               pcjBs1.addBinding(exBinding1);
-               pcjBs1.addBinding(exBinding2);
-
-               QueryBindingSet pcjBs2 = new QueryBindingSet();
-               pcjBs2.addBinding(exBinding5);
-               pcjBs2.addBinding(exBinding6);
-
-               QueryBindingSet pcjBs3 = new QueryBindingSet();
-               pcjBs3.addBinding(exBinding3);
-               pcjBs3.addBinding(exBinding4);
-
-               QueryBindingSet exBs1 = new QueryBindingSet(bs3);
-               exBs1.addAll(pcjBs1);
-               QueryBindingSet exBs2 = new QueryBindingSet(bs3);
-               exBs2.addAll(pcjBs2);
-               QueryBindingSet exBs3 = new QueryBindingSet(bs3);
-               exBs3.addAll(pcjBs3);
-
-               Set<BindingSet> expectedResults = new HashSet<>();
-               expectedResults.add(exBs1);
-               expectedResults.add(exBs2);
-               expectedResults.add(exBs3);
-               expectedResults.add(pcjBs1);
-               expectedResults.add(pcjBs2);
-
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-       @Test
-       public void 
variableCommonVarOrderLenCrossProductTestWithConstantInstantiation()
-                       throws Exception {
-               // 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://Bob";), new 
URIImpl(
-                               "http://hasAge";), new NumericLiteralImpl(32, 
XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Bob";), new 
URIImpl(
-                               "http://playsSport";), new 
LiteralImpl("Soccer")));
-
-               for (final Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               final String sparql = "SELECT ?name ?age " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "?name <http://playsSport> \"Soccer\" " + "}";
-
-               final String pcjTableName = new 
PcjTableNameFactory().makeTableName(
-                               prefix, "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age" },
-                               Optional.<PcjVarOrderFactory> absent());
-
-               final String sparql2 = "SELECT ?x " + "{" + "?x <http://hasAge> 
16 ."
-                               + "?x <http://playsSport> \"Soccer\" " + "}";
-
-               final SPARQLParser p = new SPARQLParser();
-               final ParsedQuery pq1 = p.parseQuery(sparql, null);
-               final ParsedQuery pq2 = p.parseQuery(sparql2, null);
-
-               final AccumuloIndexSet ais = new AccumuloIndexSet(conf,
-                               pcjTableName);
-               ais.setProjectionExpr((Projection) QueryVariableNormalizer
-                               .getNormalizedIndex(pq2.getTupleExpr(), 
pq1.getTupleExpr())
-                               .get(0));
-
-               QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("x", new URIImpl("http://Bob";));
-               QueryBindingSet bs3 = new QueryBindingSet();
-               bs3.addBinding("location", new URIImpl("http://Virginia";));
-
-               final List<BindingSet> bSets = Lists.<BindingSet> 
newArrayList(bs2, bs3);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               Binding exBinding6 = new BindingImpl("x", new 
URIImpl("http://Bob";));
-
-               QueryBindingSet pcjBs2 = new QueryBindingSet();
-               pcjBs2.addBinding(exBinding6);
-
-               QueryBindingSet exBs4 = new QueryBindingSet(bs3);
-               exBs4.addAll(pcjBs2);
-
-               Set<BindingSet> expectedResults = new HashSet<>();
-               expectedResults.add(exBs4);
-               expectedResults.add(pcjBs2);
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-
-
-       @Test
-       public void 
variableCommonVarOrderLenCrossProductTestWithConstantInstantiation2() throws 
Exception {
-               // Load some Triples into Rya.
-               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("Baseball")));
-               triples.add(new StatementImpl(new URIImpl("http://Bob";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(185,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Alice";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(125,
-                               XMLSchema.INTEGER)));
-
-               for (Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               String sparql = "SELECT ?name ?age ?sport ?weight " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "?name <http://playsSport> ?sport . "
-                               + "?name <http://hasWeight> ?weight " + "}";
-
-               String sparql2 = "SELECT ?x ?y ?z " + "{" + "?x <http://hasAge> 
?y."
-                               + "?x <http://playsSport> \"Baseball\" . "
-                               + "?x <http://hasWeight> ?z " + "}";
-
-               String pcjTableName = new 
PcjTableNameFactory().makeTableName(prefix,
-                               "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age", "sport",
-                                               "weight" }, 
Optional.<PcjVarOrderFactory> absent());
-
-               SPARQLParser p = new SPARQLParser();
-               ParsedQuery pq1 = p.parseQuery(sparql, null);
-               ParsedQuery pq2 = p.parseQuery(sparql2, null);
-
-               AccumuloIndexSet ais = new AccumuloIndexSet(conf, pcjTableName);
-               ais.setProjectionExpr((Projection) QueryVariableNormalizer
-                               .getNormalizedIndex(pq2.getTupleExpr(), 
pq1.getTupleExpr())
-                               .get(0));
-
-               QueryBindingSet bs1 = new QueryBindingSet();
-               bs1.addBinding("x", new URIImpl("http://Bob";));
-               QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("x", new URIImpl("http://Alice";));
-               bs2.addBinding("y", new NumericLiteralImpl(16, 
XMLSchema.INTEGER));
-               QueryBindingSet bs3 = new QueryBindingSet();
-               bs3.addBinding("location", new URIImpl("http://Virginia";));
-
-               final List<BindingSet> bSets = Lists.<BindingSet> 
newArrayList(bs1, bs2, bs3);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               Binding exBinding5 = new BindingImpl("y", new 
NumericLiteralImpl(16, XMLSchema.INTEGER));
-               Binding exBinding6 = new BindingImpl("x", new 
URIImpl("http://Bob";));
-               Binding exBinding8 = new BindingImpl("z", new 
NumericLiteralImpl(185, XMLSchema.INTEGER));
-
-               QueryBindingSet pcjBs2 = new QueryBindingSet();
-               pcjBs2.addBinding(exBinding5);
-               pcjBs2.addBinding(exBinding6);
-               pcjBs2.addBinding(exBinding8);
-
-               QueryBindingSet exBs4 = new QueryBindingSet(bs3);
-               exBs4.addAll(pcjBs2);
-
-               Set<BindingSet> expectedResults = new HashSet<>();
-               expectedResults.add(exBs4);
-               expectedResults.add(pcjBs2);
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-
-
-
-
-       @Test
-       public void partiallySupportedVarOrderTest() throws Exception {
-               // Load some Triples into Rya.
-               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("Baseball")));
-               triples.add(new StatementImpl(new URIImpl("http://Bob";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(185,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Alice";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(125,
-                               XMLSchema.INTEGER)));
-
-               for (Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               String sparql = "SELECT ?name ?age ?sport ?weight " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "?name <http://playsSport> ?sport . "
-                               + "?name <http://hasWeight> ?weight " + "}";
-
-               String pcjTableName = new 
PcjTableNameFactory().makeTableName(prefix,
-                               "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age", "sport",
-                                               "weight" }, 
Optional.<PcjVarOrderFactory> absent());
-               AccumuloIndexSet ais = new AccumuloIndexSet(conf, pcjTableName);
-
-               QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("name", new URIImpl("http://Bob";));
-               bs.addBinding("sport", new LiteralImpl("Baseball"));
-
-               final List<BindingSet> bSets = Lists.<BindingSet> 
newArrayList(bs);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               Binding exBinding5 = new BindingImpl("age", new 
NumericLiteralImpl(16, XMLSchema.INTEGER));
-               Binding exBinding6 = new BindingImpl("name", new 
URIImpl("http://Bob";));
-               Binding exBinding7 = new BindingImpl("sport", new 
LiteralImpl("Baseball"));
-               Binding exBinding8 = new BindingImpl("weight", new 
NumericLiteralImpl(185, XMLSchema.INTEGER));
-
-
-               QueryBindingSet pcjBs2 = new QueryBindingSet();
-               pcjBs2.addBinding(exBinding5);
-               pcjBs2.addBinding(exBinding6);
-               pcjBs2.addBinding(exBinding7);
-               pcjBs2.addBinding(exBinding8);
-
-               QueryBindingSet exBs3 = new QueryBindingSet(bs);
-               exBs3.addAll(pcjBs2);
-
-               Set<BindingSet> expectedResults = new HashSet<>();
-               expectedResults.add(exBs3);
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-       @Test
-       public void partiallySupportedVarOrderTestWithConstants() throws 
Exception {
-               // Load some Triples into Rya.
-               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("Baseball")));
-               triples.add(new StatementImpl(new URIImpl("http://Bob";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(185,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Alice";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(125,
-                               XMLSchema.INTEGER)));
-
-               for (Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               String sparql = "SELECT ?name ?age ?sport ?weight " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "?name <http://playsSport> ?sport . "
-                               + "?name <http://hasWeight> ?weight " + "}";
-
-               String sparql2 = "SELECT ?x ?y ?z " + "{" + "?x <http://hasAge> 
?y."
-                               + "?x <http://playsSport> \"Baseball\" . "
-                               + "?x <http://hasWeight> ?z " + "}";
-
-               String pcjTableName = new 
PcjTableNameFactory().makeTableName(prefix,
-                               "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age", "sport",
-                                               "weight" }, 
Optional.<PcjVarOrderFactory> absent());
-
-               SPARQLParser p = new SPARQLParser();
-               ParsedQuery pq1 = p.parseQuery(sparql, null);
-               ParsedQuery pq2 = p.parseQuery(sparql2, null);
-
-               AccumuloIndexSet ais = new AccumuloIndexSet(conf, pcjTableName);
-               ais.setProjectionExpr((Projection) QueryVariableNormalizer
-                               .getNormalizedIndex(pq2.getTupleExpr(), 
pq1.getTupleExpr())
-                               .get(0));
-
-               QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("x", new URIImpl("http://Bob";));
-
-               final List<BindingSet> bSets = Lists.<BindingSet> 
newArrayList(bs);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               Binding exBinding5 = new BindingImpl("y", new 
NumericLiteralImpl(16, XMLSchema.INTEGER));
-               Binding exBinding6 = new BindingImpl("x", new 
URIImpl("http://Bob";));
-               Binding exBinding8 = new BindingImpl("z", new 
NumericLiteralImpl(185, XMLSchema.INTEGER));
-
-
-               QueryBindingSet pcjBs2 = new QueryBindingSet();
-               pcjBs2.addBinding(exBinding5);
-               pcjBs2.addBinding(exBinding6);
-               pcjBs2.addBinding(exBinding8);
-
-               QueryBindingSet exBs3 = new QueryBindingSet(bs);
-               exBs3.addAll(pcjBs2);
-
-               Set<BindingSet> expectedResults = new HashSet<>();
-               expectedResults.add(exBs3);
-
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-
-
-
-
-
-       @Test
-       public void partiallySupportedConstantOrderNoBindingSet() throws 
Exception {
-               // Load some Triples into Rya.
-               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("Baseball")));
-               triples.add(new StatementImpl(new URIImpl("http://Bob";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(185,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Alice";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(125,
-                               XMLSchema.INTEGER)));
-
-               for (Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               String sparql = "SELECT ?name ?age ?sport ?weight " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "?name <http://playsSport> ?sport . "
-                               + "?name <http://hasWeight> ?weight " + "}";
-
-               String sparql2 = "SELECT ?y ?z " + "{"
-                               + "<http://Bob> <http://hasAge> ?y."
-                               + "<http://Bob> <http://playsSport> 
\"Baseball\" . "
-                               + "<http://Bob> <http://hasWeight> ?z " + "}";
-
-               String pcjTableName = new 
PcjTableNameFactory().makeTableName(prefix,
-                               "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age", "sport",
-                                               "weight" }, 
Optional.<PcjVarOrderFactory> absent());
-
-               SPARQLParser p = new SPARQLParser();
-               ParsedQuery pq1 = p.parseQuery(sparql, null);
-               ParsedQuery pq2 = p.parseQuery(sparql2, null);
-
-               AccumuloIndexSet ais = new AccumuloIndexSet(conf, pcjTableName);
-               ais.setProjectionExpr((Projection) QueryVariableNormalizer
-                               .getNormalizedIndex(pq2.getTupleExpr(), 
pq1.getTupleExpr())
-                               .get(0));
-
-               QueryBindingSet bs = new QueryBindingSet();
-               List<BindingSet> bSets = Lists.<BindingSet> newArrayList(bs);
-
-               CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               Binding exBinding5 = new BindingImpl("y", new 
NumericLiteralImpl(16, XMLSchema.INTEGER));
-               Binding exBinding8 = new BindingImpl("z", new 
NumericLiteralImpl(185, XMLSchema.INTEGER));
-
-               QueryBindingSet pcjBs2 = new QueryBindingSet();
-               pcjBs2.addBinding(exBinding5);
-               pcjBs2.addBinding(exBinding8);
-
-
-               Set<BindingSet> expectedResults = new HashSet<>();
-               expectedResults.add(pcjBs2);
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-       @Test
-       public void singleCrossProductBindingSetWithConstantConstraintsTest()
-                       throws Exception {
-               // Load some Triples into Rya.
-               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("Baseball")));
-               triples.add(new StatementImpl(new URIImpl("http://Bob";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(185,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Alice";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(125,
-                               XMLSchema.INTEGER)));
-
-               for (Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               String sparql = "SELECT ?name ?age ?sport ?weight " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "?name <http://playsSport> ?sport . "
-                               + "?name <http://hasWeight> ?weight " + "}";
-
-               String sparql2 = "SELECT ?x ?y ?z " + "{" + "?x <http://hasAge> 
?y."
-                               + "?x <http://playsSport> \"Soccer\" . "
-                               + "?x <http://hasWeight> ?z " + "}";
-
-               String pcjTableName = new 
PcjTableNameFactory().makeTableName(prefix,
-                               "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age", "sport",
-                                               "weight" }, 
Optional.<PcjVarOrderFactory> absent());
-//             Scanner scanner = accumuloConn.createScanner(pcjTableName,
-//                             new Authorizations());
-//             for (Map.Entry<Key, org.apache.accumulo.core.data.Value> e : 
scanner) {
-//                     System.out.println(e.getKey().getRow());
-//             }
-
-               SPARQLParser p = new SPARQLParser();
-               ParsedQuery pq1 = p.parseQuery(sparql, null);
-               ParsedQuery pq2 = p.parseQuery(sparql2, null);
-
-               AccumuloIndexSet ais = new AccumuloIndexSet(conf, pcjTableName);
-               ais.setProjectionExpr((Projection) QueryVariableNormalizer
-                               .getNormalizedIndex(pq2.getTupleExpr(), 
pq1.getTupleExpr())
-                               .get(0));
-
-               QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("location", new URIImpl("http://Virginia";));
-               bs.addBinding("profession", new LiteralImpl("Plumber"));
-               QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("location", new URIImpl("http://California";));
-               bs2.addBinding("profession", new LiteralImpl("Doctor"));
-
-               final List<BindingSet> bSets = Lists.<BindingSet> 
newArrayList(bs, bs2);
-
-               final CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-
-               Binding exBinding1 = new BindingImpl("y", new 
NumericLiteralImpl(14, XMLSchema.INTEGER));
-               Binding exBinding2 = new BindingImpl("x", new 
URIImpl("http://Alice";));
-               Binding exBinding4 = new BindingImpl("z", new 
NumericLiteralImpl(125, XMLSchema.INTEGER));
-
-               QueryBindingSet pcjBs1 = new QueryBindingSet();
-               pcjBs1.addBinding(exBinding1);
-               pcjBs1.addBinding(exBinding2);
-               pcjBs1.addBinding(exBinding4);
-
-               QueryBindingSet exBs1 = new QueryBindingSet(bs);
-               exBs1.addAll(pcjBs1);
-               QueryBindingSet exBs2 = new QueryBindingSet(bs2);
-               exBs2.addAll(pcjBs1);
-
-               Set<BindingSet> expectedResults = new HashSet<>();
-               expectedResults.add(exBs1);
-               expectedResults.add(exBs2);
-
-               final Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-       @Test
-       public void singleCrossProductBindingSetTest() throws Exception {
-               // Load some Triples into Rya.
-               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("Baseball")));
-               triples.add(new StatementImpl(new URIImpl("http://Bob";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(185,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Alice";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(125,
-                               XMLSchema.INTEGER)));
-
-               for (Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               String sparql = "SELECT ?name ?age ?sport ?weight " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "?name <http://playsSport> ?sport . "
-                               + "?name <http://hasWeight> ?weight " + "}";
-
-               String pcjTableName = new 
PcjTableNameFactory().makeTableName(prefix,
-                               "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age", "sport",
-                                               "weight" }, 
Optional.<PcjVarOrderFactory> absent());
-               // Scanner scanner = accumuloConn.createScanner(pcjTableName,
-               // new Authorizations());
-               // for (Map.Entry<Key, org.apache.accumulo.core.data.Value> e : 
scanner)
-               // {
-               // System.out.println(e.getKey().getRow());
-               // }
-               AccumuloIndexSet ais = new AccumuloIndexSet(conf, pcjTableName);
-
-               QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("location", new URIImpl("http://Virginia";));
-               bs.addBinding("profession", new LiteralImpl("Plumber"));
-               QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("location", new URIImpl("http://California";));
-               bs2.addBinding("profession", new LiteralImpl("Doctor"));
-
-               List<BindingSet> bSets = Lists.<BindingSet> newArrayList(bs, 
bs2);
-
-               CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               Binding exBinding1 = new BindingImpl("age", new 
NumericLiteralImpl(14, XMLSchema.INTEGER));
-               Binding exBinding2 = new BindingImpl("name", new 
URIImpl("http://Alice";));
-               Binding exBinding3 = new BindingImpl("sport", new 
LiteralImpl("Soccer") );
-               Binding exBinding4 = new BindingImpl("weight", new 
NumericLiteralImpl(125, XMLSchema.INTEGER));
-               Binding exBinding5 = new BindingImpl("age", new 
NumericLiteralImpl(16, XMLSchema.INTEGER));
-               Binding exBinding6 = new BindingImpl("name", new 
URIImpl("http://Bob";));
-               Binding exBinding7 = new BindingImpl("sport", new 
LiteralImpl("Baseball"));
-               Binding exBinding8 = new BindingImpl("weight", new 
NumericLiteralImpl(185, XMLSchema.INTEGER));
-
-               QueryBindingSet pcjBs1 = new QueryBindingSet();
-               pcjBs1.addBinding(exBinding1);
-               pcjBs1.addBinding(exBinding2);
-               pcjBs1.addBinding(exBinding3);
-               pcjBs1.addBinding(exBinding4);
-
-               QueryBindingSet pcjBs2 = new QueryBindingSet();
-               pcjBs2.addBinding(exBinding5);
-               pcjBs2.addBinding(exBinding6);
-               pcjBs2.addBinding(exBinding7);
-               pcjBs2.addBinding(exBinding8);
-
-               QueryBindingSet exBs1 = new QueryBindingSet(bs);
-               exBs1.addAll(pcjBs1);
-               QueryBindingSet exBs2 = new QueryBindingSet(bs2);
-               exBs2.addAll(pcjBs1);
-               QueryBindingSet exBs3 = new QueryBindingSet(bs);
-               exBs3.addAll(pcjBs2);
-               QueryBindingSet exBs4 = new QueryBindingSet(bs2);
-               exBs4.addAll(pcjBs2);
-
-               Set<BindingSet> expectedResults = new HashSet<>();
-               expectedResults.add(exBs1);
-               expectedResults.add(exBs2);
-               expectedResults.add(exBs3);
-               expectedResults.add(exBs4);
-
-               Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-
-       @Test
-       public void variableBindingSetOptionalQueryTest() throws Exception {
-               // Load some Triples into Rya.
-               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("Baseball")));
-               triples.add(new StatementImpl(new URIImpl("http://Bob";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(185,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Alice";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(125,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Joe";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(235,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Joe";), new 
URIImpl(
-                               "http://hasAge";), new NumericLiteralImpl(42, 
XMLSchema.INTEGER)));
-
-               for (Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               String sparql = "SELECT ?name ?age ?sport ?weight " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "OPTIONAL{?name <http://playsSport> ?sport} . 
"
-                               + "?name <http://hasWeight> ?weight " + "}";
-
-               String pcjTableName = new 
PcjTableNameFactory().makeTableName(prefix,
-                               "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age", "sport",
-                                               "weight" }, 
Optional.<PcjVarOrderFactory> absent());
-               // Scanner scanner = accumuloConn.createScanner(pcjTableName,
-               // new Authorizations());
-               // for (Map.Entry<Key, org.apache.accumulo.core.data.Value> e : 
scanner)
-               // {
-               // System.out.println(e.getKey().getRow());
-               // }
-               AccumuloIndexSet ais = new AccumuloIndexSet(conf, pcjTableName);
-
-               QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("name", new URIImpl("http://Joe";));
-               bs.addBinding("age", new NumericLiteralImpl(42, 
XMLSchema.INTEGER));
-               bs.addBinding("weight", new NumericLiteralImpl(235,
-                               XMLSchema.INTEGER));
-               QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("name", new URIImpl("http://Alice";));
-               bs2.addBinding("age", new NumericLiteralImpl(14, 
XMLSchema.INTEGER));
-               bs2.addBinding("weight", new NumericLiteralImpl(125,
-                               XMLSchema.INTEGER));
-               bs2.addBinding("sport", new LiteralImpl("Soccer"));
-               QueryBindingSet bs3 = new QueryBindingSet();
-               bs3.addBinding("name", new URIImpl("http://Bob";));
-               bs3.addBinding("age", new NumericLiteralImpl(16, 
XMLSchema.INTEGER));
-               bs3.addBinding("weight", new NumericLiteralImpl(185,
-                               XMLSchema.INTEGER));
-               bs3.addBinding("sport", new LiteralImpl("Baseball"));
-
-
-               List<BindingSet> bSets = Lists.<BindingSet> newArrayList(bs);
-               bSets.add(bs2);
-               bSets.add(bs3);
-
-               CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               Set<BindingSet> expectedResults = new HashSet<>();
-               expectedResults.add(bs);
-               expectedResults.add(bs2);
-               expectedResults.add(bs3);
-
-               Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-
-
-
-
-       @Test
-       public void joinOnOptionalVariableTest() throws Exception {
-               // Load some Triples into Rya.
-               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("Baseball")));
-               triples.add(new StatementImpl(new URIImpl("http://Bob";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(185,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Alice";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(125,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Joe";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(235,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Joe";), new 
URIImpl(
-                               "http://hasAge";), new NumericLiteralImpl(42, 
XMLSchema.INTEGER)));
-
-               for (Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               String sparql = "SELECT ?name ?age ?sport ?weight " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "OPTIONAL{?name <http://playsSport> ?sport} . 
"
-                               + "?name <http://hasWeight> ?weight " + "}";
-
-               String pcjTableName = new 
PcjTableNameFactory().makeTableName(prefix,
-                               "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age", "sport",
-                                               "weight" }, 
Optional.<PcjVarOrderFactory> absent());
-               // Scanner scanner = accumuloConn.createScanner(pcjTableName,
-               // new Authorizations());
-               // for (Map.Entry<Key, org.apache.accumulo.core.data.Value> e : 
scanner)
-               // {
-               // System.out.println(e.getKey().getRow());
-               // }
-               AccumuloIndexSet ais = new AccumuloIndexSet(conf, pcjTableName);
-
-               QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("name", new URIImpl("http://Joe";));
-               bs.addBinding("sport", new LiteralImpl("Football"));
-               QueryBindingSet bs4 = new QueryBindingSet();
-               bs4.addBinding("name", new URIImpl("http://Alice";));
-               bs4.addBinding("sport", new LiteralImpl("Soccer"));
-               QueryBindingSet bs2 = new QueryBindingSet();
-               bs2.addBinding("sport", new LiteralImpl("Hockey"));
-               bs2.addBinding("profession", new LiteralImpl("Doctor"));
-               QueryBindingSet bs3 = new QueryBindingSet();
-               bs3.addBinding("sport", new LiteralImpl("Basketball"));
-
-               List<BindingSet> bSets = Lists.<BindingSet> newArrayList(bs);
-               bSets.add(bs2);
-               bSets.add(bs3);
-               bSets.add(bs4);
-
-               CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               Binding exBinding1 = new BindingImpl("age", new 
NumericLiteralImpl(14, XMLSchema.INTEGER));
-               Binding exBinding2 = new BindingImpl("name", new 
URIImpl("http://Alice";));
-               Binding exBinding3 = new BindingImpl("sport", new 
LiteralImpl("Soccer") );
-               Binding exBinding4 = new BindingImpl("weight", new 
NumericLiteralImpl(125, XMLSchema.INTEGER));
-               Binding exBinding5 = new BindingImpl("age", new 
NumericLiteralImpl(16, XMLSchema.INTEGER));
-               Binding exBinding6 = new BindingImpl("name", new 
URIImpl("http://Bob";));
-               Binding exBinding8 = new BindingImpl("weight", new 
NumericLiteralImpl(185, XMLSchema.INTEGER));
-               Binding exBinding9 = new BindingImpl("age", new 
NumericLiteralImpl(42, XMLSchema.INTEGER));
-               Binding exBinding10 = new BindingImpl("name", new 
URIImpl("http://Joe";));
-               Binding exBinding11 = new BindingImpl("weight", new 
NumericLiteralImpl(235, XMLSchema.INTEGER));
-
-               QueryBindingSet pcjBs1 = new QueryBindingSet();
-               pcjBs1.addBinding(exBinding1);
-               pcjBs1.addBinding(exBinding2);
-               pcjBs1.addBinding(exBinding4);
-
-               QueryBindingSet pcjBs2 = new QueryBindingSet();
-               pcjBs2.addBinding(exBinding5);
-               pcjBs2.addBinding(exBinding6);
-               pcjBs2.addBinding(exBinding8);
-
-               QueryBindingSet pcjBs3 = new QueryBindingSet();
-               pcjBs3.addBinding(exBinding9);
-               pcjBs3.addBinding(exBinding10);
-               pcjBs3.addBinding(exBinding11);
-
-               QueryBindingSet exBs1 = new QueryBindingSet(bs2);
-               exBs1.addAll(pcjBs1);
-               QueryBindingSet exBs2 = new QueryBindingSet(bs2);
-               exBs2.addAll(pcjBs2);
-               QueryBindingSet exBs3 = new QueryBindingSet(bs2);
-               exBs3.addAll(pcjBs3);
-               QueryBindingSet exBs4 = new QueryBindingSet(bs3);
-               exBs4.addAll(pcjBs1);
-               QueryBindingSet exBs5 = new QueryBindingSet(bs3);
-               exBs5.addAll(pcjBs2);
-               QueryBindingSet exBs6 = new QueryBindingSet(bs3);
-               exBs6.addAll(pcjBs3);
-               QueryBindingSet exBs7 = new QueryBindingSet(pcjBs3);
-               exBs7.addBinding("sport", new LiteralImpl("Football"));
-
-               Set<BindingSet> expectedResults = new HashSet<>();
-               expectedResults.add(exBs1);
-               expectedResults.add(exBs2);
-               expectedResults.add(exBs3);
-               expectedResults.add(exBs4);
-               expectedResults.add(exBs5);
-               expectedResults.add(exBs6);
-               expectedResults.add(exBs7);
-
-               pcjBs1.addBinding(exBinding3);
-               expectedResults.add(pcjBs1);
-
-               Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-
-
-
-       @Test
-       public void joinOnOptionalVariableTest2() throws Exception {
-               // Load some Triples into Rya.
-               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("Baseball")));
-               triples.add(new StatementImpl(new URIImpl("http://Bob";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(185,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Alice";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(125,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Joe";), new 
URIImpl(
-                               "http://hasWeight";), new NumericLiteralImpl(235,
-                               XMLSchema.INTEGER)));
-               triples.add(new StatementImpl(new URIImpl("http://Joe";), new 
URIImpl(
-                               "http://hasAge";), new NumericLiteralImpl(42, 
XMLSchema.INTEGER)));
-
-               for (Statement triple : triples) {
-                       ryaConn.add(triple);
-               }
-
-               // Create a PCJ table will include those triples in its results.
-               String sparql = "SELECT ?name ?age ?sport ?weight " + "{"
-                               + "?name <http://hasAge> ?age."
-                               + "OPTIONAL{?name <http://playsSport> ?sport} . 
"
-                               + "?name <http://hasWeight> ?weight " + "}";
-
-
-               String pcjTableName = new 
PcjTableNameFactory().makeTableName(prefix,
-                               "testPcj");
-
-               // Create and populate the PCJ table.
-               PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, 
accumuloConn,
-                               pcjTableName, sparql, new String[] { "name", 
"age", "sport",
-                                               "weight" }, 
Optional.<PcjVarOrderFactory> absent());
-
-//             scanner = accumuloConn.createScanner(pcjTableName,
-//                             new Authorizations("U"));
-//             for (Map.Entry<Key, org.apache.accumulo.core.data.Value> e : 
scanner) {
-//                     System.out.println(e.getKey());
-//             }
-
-               AccumuloIndexSet ais = new AccumuloIndexSet(conf, pcjTableName);
-
-               QueryBindingSet bs = new QueryBindingSet();
-               bs.addBinding("name", new URIImpl("http://Alice";));
-               bs.addBinding("sport", new LiteralImpl("Basketball"));
-
-               List<BindingSet> bSets = Lists.<BindingSet> newArrayList(bs);
-
-               CloseableIteration<BindingSet, QueryEvaluationException> 
results = ais
-                               .evaluate(bSets);
-
-               Binding exBinding1 = new BindingImpl("age", new 
NumericLiteralImpl(14, XMLSchema.INTEGER));
-               Binding exBinding2 = new BindingImpl("name", new 
URIImpl("http://Alice";));
-               Binding exBinding4 = new BindingImpl("weight", new 
NumericLiteralImpl(125, XMLSchema.INTEGER));
-
-               QueryBindingSet pcjBs1 = new QueryBindingSet();
-               pcjBs1.addBinding(exBinding1);
-               pcjBs1.addBinding(exBinding2);
-               pcjBs1.addBinding(exBinding4);
-
-               QueryBindingSet exBs1 = new QueryBindingSet(bs);
-               exBs1.addAll(pcjBs1);
-
-               Set<BindingSet> expectedResults = new HashSet<>();
-               expectedResults.add(exBs1);
-
-               Set<BindingSet> fetchedResults = new HashSet<>();
-               while (results.hasNext()) {
-                       BindingSet next = results.next();
-                       fetchedResults.add(next);
-               }
-
-               Assert.assertEquals(expectedResults, fetchedResults);
-       }
-
-
+import info.aduna.iteration.CloseableIteration;
+import mvm.rya.accumulo.AccumuloRdfConfiguration;
+import mvm.rya.api.RdfCloudTripleStoreConfiguration;
+import mvm.rya.api.persist.RyaDAOException;
+import mvm.rya.api.resolver.RyaTypeResolverException;
+import mvm.rya.indexing.accumulo.ConfigUtils;
+import mvm.rya.indexing.external.PcjIntegrationTestingUtil;
+import mvm.rya.indexing.external.QueryVariableNormalizer;
+import mvm.rya.rdftriplestore.RyaSailRepository;
+import mvm.rya.rdftriplestore.inference.InferenceEngineException;
+import mvm.rya.sail.config.RyaSailFactory;
 
+public class AccumuloIndexSetTest {
 
+     protected static Connector accumuloConn = null;
+     protected RyaSailRepository ryaRepo = null;
+     protected RepositoryConnection ryaConn = null;
+     protected Configuration conf = getConf();
+     protected String prefix = "rya_";
+
+    @Before
+    public void init() throws AccumuloException, AccumuloSecurityException,
+        RyaDAOException, RepositoryException, TableNotFoundException,
+        InferenceEngineException, NumberFormatException, UnknownHostException {
+        accumuloConn = ConfigUtils.getConnector(conf);
+        final TableOperations ops = accumuloConn.tableOperations();
+        if(ops.exists(prefix+"INDEX_"+ "testPcj")) {
+            ops.delete(prefix+"INDEX_"+ "testPcj");
+        }
+        ryaRepo = new RyaSailRepository(RyaSailFactory.getInstance(conf));
+        ryaRepo.initialize();
+        ryaConn = ryaRepo.getConnection();
+    }
+
+    /**
+     * TODO doc
+     * @throws MutationsRejectedException
+     * @throws QueryEvaluationException
+     * @throws SailException
+     * @throws MalformedQueryException
+     */
+    @Test
+    public void accumuloIndexSetTestWithEmptyBindingSet() throws 
RepositoryException, PcjException, TableNotFoundException,
+    RyaTypeResolverException, MalformedQueryException, SailException, 
QueryEvaluationException, MutationsRejectedException {
+        // 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 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(prefix, "testPcj");
+        // Create and populate the PCJ table.
+        PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, accumuloConn, 
pcjTableName, sparql, new String[]{"name", "age"}, 
Optional.<PcjVarOrderFactory>absent());
+
+        final AccumuloIndexSet ais = new AccumuloIndexSet(accumuloConn, 
pcjTableName);
+
+        final CloseableIteration<BindingSet, QueryEvaluationException> results 
= ais.evaluate(new QueryBindingSet());
+        final Set<BindingSet> fetchedResults = new HashSet<BindingSet>();
+        while(results.hasNext()) {
+            fetchedResults.add(results.next());
+        }
+        // Ensure the expected results match those that were stored.
+        final QueryBindingSet alice = new QueryBindingSet();
+        alice.addBinding("name", new URIImpl("http://Alice";));
+        alice.addBinding("age", new NumericLiteralImpl(14, XMLSchema.INTEGER));
+
+        final QueryBindingSet bob = new QueryBindingSet();
+        bob.addBinding("name", new URIImpl("http://Bob";));
+        bob.addBinding("age", new NumericLiteralImpl(16, XMLSchema.INTEGER));
+
+        final QueryBindingSet charlie = new QueryBindingSet();
+        charlie.addBinding("name", new URIImpl("http://Charlie";));
+        charlie.addBinding("age", new NumericLiteralImpl(12, 
XMLSchema.INTEGER));
+
+        final Set<BindingSet> expectedResults = 
Sets.<BindingSet>newHashSet(alice, bob, charlie);
+        Assert.assertEquals(expectedResults, fetchedResults);
+    }
+
+    /**
+     * TODO doc
+     * @throws MutationsRejectedException
+     * @throws QueryEvaluationException
+     * @throws SailException
+     * @throws MalformedQueryException
+     */
+    @Test
+    public void accumuloIndexSetTestWithBindingSet() throws 
RepositoryException, PcjException, TableNotFoundException,
+    RyaTypeResolverException, MalformedQueryException, SailException, 
QueryEvaluationException, MutationsRejectedException {
+        // 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 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(prefix, "testPcj");
+
+        // Create and populate the PCJ table.
+        PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, accumuloConn, 
pcjTableName, sparql, new String[]{"name", "age"}, 
Optional.<PcjVarOrderFactory>absent());
+
+        final AccumuloIndexSet ais = new AccumuloIndexSet(accumuloConn, 
pcjTableName);
+
+        final QueryBindingSet bs = new QueryBindingSet();
+        bs.addBinding("name",new URIImpl("http://Alice";));
+        bs.addBinding("location",new URIImpl("http://Virginia";));
+
+        final CloseableIteration<BindingSet, QueryEvaluationException> results 
= ais.evaluate(bs);
+
+        bs.addBinding("age",new NumericLiteralImpl(14, XMLSchema.INTEGER));
+        Assert.assertEquals(bs, results.next());
+    }
+
+    @Test
+    public void accumuloIndexSetTestWithTwoBindingSets() throws 
RepositoryException, PcjException, TableNotFoundException,
+    RyaTypeResolverException, MalformedQueryException, SailException, 
QueryEvaluationException, MutationsRejectedException {
+        // 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 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(prefix, "testPcj");
+
+        // Create and populate the PCJ table.
+        PcjIntegrationTestingUtil.createAndPopulatePcj(ryaConn, accumuloConn, 
pcjTableName, sparql, new String[]{"name", "age"}, 
Optional.<PcjVarOrderFactory>absent());
+
+        final AccumuloIndexSet ais = new AccumuloIndexSet(accumuloConn, 
pcjTableName);
+
+        final QueryBindingSet bs = new QueryBindingSet();
+        bs.addBinding("birthDate",new LiteralImpl("1983-03-17",new 
URIImpl("http://www.w3.org/2001/XMLSchema#date";)));
+        bs.addBinding("name",new URIImpl("http://Alice";));
+
+        final QueryBindingSet bs2 = new QueryBindingSet();
+        bs2.addBinding("birthDate",new LiteralImpl("1983-04-18",new 
URIImpl("http://www.w3.org/2001/XMLSchema#date";)));
+        bs2.addBinding("name",new URIImpl("http://Bob";));
+
+        final Set<BindingSet> bSets = Sets.<BindingSet>newHashSet(bs,bs2);
+
+        final CloseableIteration<BindingSet, QueryEvaluationException> results 
= ais.evaluate(bSets);
+
+        final QueryBindingSet alice = new QueryBindingSet();
+        alice.addBinding("name", new URIImpl("http://Alice";));
+        alice.addBinding("age", new NumericLiteralImpl(14, XMLSchema.INTEGER));
+        alice.addBinding("birthDate", new LiteralImpl("1983-03-17",new 
URIImpl("http://www.w3.org/2001/XMLSchema#date";)));
+
+        final QueryBindingSet bo

<TRUNCATED>

Reply via email to