You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rya.apache.org by pu...@apache.org on 2016/06/21 17:00:19 UTC

[04/10] incubator-rya git commit: RYA-51 Temporal Indexing mongo support

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java b/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java
index bc11a79..caf4a59 100644
--- a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java
+++ b/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java
@@ -1,5 +1,7 @@
 package mvm.rya.sail.config;
 
+import java.net.UnknownHostException;
+
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.Connector;
@@ -14,9 +16,9 @@ import org.openrdf.sail.Sail;
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -40,33 +42,33 @@ import mvm.rya.rdftriplestore.inference.InferenceEngineException;
 
 public class RyaSailFactory {
 
-    
-    
-    public static Sail getInstance(Configuration conf) throws AccumuloException, 
-    AccumuloSecurityException, RyaDAOException, InferenceEngineException {
-        
+
+
+    public static Sail getInstance(final Configuration conf) throws AccumuloException,
+    AccumuloSecurityException, RyaDAOException, InferenceEngineException, NumberFormatException, UnknownHostException {
+
         return getRyaSail(conf);
     }
-    
-   
-    
-    private static Sail getRyaSail(Configuration config) throws AccumuloException, AccumuloSecurityException, RyaDAOException, InferenceEngineException {
-        
-        RdfCloudTripleStore store = new RdfCloudTripleStore();
+
+
+
+    private static Sail getRyaSail(final Configuration config) throws AccumuloException, AccumuloSecurityException, RyaDAOException, InferenceEngineException, NumberFormatException, UnknownHostException {
+
+        final RdfCloudTripleStore store = new RdfCloudTripleStore();
         RyaDAO crdfdao = null;
         RdfCloudTripleStoreConfiguration conf;
         if (ConfigUtils.getUseMongo(config)) {
             conf = new MongoDBRdfConfiguration(config);
             conf.setTablePrefix(config.get(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX));
             ConfigUtils.setIndexers(conf);
-            
+
             crdfdao = new MongoDBRyaDAO((MongoDBRdfConfiguration)conf);
             crdfdao.init();
-            
+
             conf.setDisplayQueryPlan(true);
             store.setRyaDAO(crdfdao);
         } else {
-            Connector connector = ConfigUtils.getConnector(config);
+            final Connector connector = ConfigUtils.getConnector(config);
             crdfdao = new AccumuloRyaDAO();
             ((AccumuloRyaDAO)crdfdao).setConnector(connector);
 
@@ -80,18 +82,18 @@ public class RyaSailFactory {
             crdfdao.init();
             store.setRyaDAO(crdfdao);
         }
-        
+
         if (conf.isInfer()){
-            InferenceEngine inferenceEngine = new InferenceEngine();
+            final InferenceEngine inferenceEngine = new InferenceEngine();
             inferenceEngine.setConf(conf);
             inferenceEngine.setRyaDAO(crdfdao);
             inferenceEngine.init();
-            store.setInferenceEngine(inferenceEngine);            	
+            store.setInferenceEngine(inferenceEngine);
         }
 
         return store;
     }
 
-    
-    
+
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/StatementSerializerTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/StatementSerializerTest.java b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/StatementSerializerTest.java
index 88e2841..951e900 100644
--- a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/StatementSerializerTest.java
+++ b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/StatementSerializerTest.java
@@ -22,7 +22,7 @@ package mvm.rya.indexing.accumulo;
 
 
 import junit.framework.Assert;
-import mvm.rya.indexing.accumulo.StatementSerializer;
+import mvm.rya.indexing.StatementSerializer;
 
 import org.junit.Test;
 import org.openrdf.model.Statement;

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/freetext/AccumuloFreeTextIndexerTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/freetext/AccumuloFreeTextIndexerTest.java b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/freetext/AccumuloFreeTextIndexerTest.java
index c6bd9c2..8a19b3a 100644
--- a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/freetext/AccumuloFreeTextIndexerTest.java
+++ b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/freetext/AccumuloFreeTextIndexerTest.java
@@ -53,11 +53,11 @@ import mvm.rya.api.domain.RyaType;
 import mvm.rya.api.domain.RyaURI;
 import mvm.rya.api.resolver.RdfToRyaConversions;
 import mvm.rya.api.resolver.RyaToRdfConversions;
-import mvm.rya.indexing.StatementContraints;
+import mvm.rya.indexing.StatementConstraints;
 import mvm.rya.indexing.accumulo.ConfigUtils;
 
 public class AccumuloFreeTextIndexerTest {
-    private static final StatementContraints EMPTY_CONSTRAINTS = new StatementContraints();
+    private static final StatementConstraints EMPTY_CONSTRAINTS = new StatementConstraints();
 
     Configuration conf;
 
@@ -232,9 +232,9 @@ public class AccumuloFreeTextIndexerTest {
             f.flush();
 
             Assert.assertEquals(Sets.newHashSet(statement), getSet(f.queryText("hat", EMPTY_CONSTRAINTS)));
-            Assert.assertEquals(Sets.newHashSet(statement), getSet(f.queryText("hat", new StatementContraints().setContext(context))));
+            Assert.assertEquals(Sets.newHashSet(statement), getSet(f.queryText("hat", new StatementConstraints().setContext(context))));
             Assert.assertEquals(Sets.newHashSet(),
-                    getSet(f.queryText("hat", new StatementContraints().setContext(vf.createURI("foo:context2")))));
+                    getSet(f.queryText("hat", new StatementConstraints().setContext(vf.createURI("foo:context2")))));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/geo/GeoIndexerSfTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/geo/GeoIndexerSfTest.java b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/geo/GeoIndexerSfTest.java
index 4c22857..0f19a4c 100644
--- a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/geo/GeoIndexerSfTest.java
+++ b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/geo/GeoIndexerSfTest.java
@@ -33,7 +33,7 @@ import mvm.rya.api.domain.RyaStatement;
 import mvm.rya.api.resolver.RdfToRyaConversions;
 import mvm.rya.api.resolver.RyaToRdfConversions;
 import mvm.rya.indexing.GeoIndexer;
-import mvm.rya.indexing.StatementContraints;
+import mvm.rya.indexing.StatementConstraints;
 import mvm.rya.indexing.accumulo.ConfigUtils;
 import mvm.rya.indexing.accumulo.geo.GeoConstants;
 import mvm.rya.indexing.accumulo.geo.GeoMesaGeoIndexer;
@@ -71,7 +71,7 @@ public class GeoIndexerSfTest {
     private static GeometryFactory gf = new GeometryFactory(new PrecisionModel(), 4326);
     private static GeoMesaGeoIndexer g;
 
-    private static final StatementContraints EMPTY_CONSTRAINTS = new StatementContraints();
+    private static final StatementConstraints EMPTY_CONSTRAINTS = new StatementConstraints();
 
     // Here is the landscape:
     /**

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/geo/GeoIndexerTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/geo/GeoIndexerTest.java b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/geo/GeoIndexerTest.java
index 25db123..14cd267 100644
--- a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/geo/GeoIndexerTest.java
+++ b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/geo/GeoIndexerTest.java
@@ -52,12 +52,12 @@ import com.vividsolutions.jts.geom.PrecisionModel;
 import com.vividsolutions.jts.geom.impl.PackedCoordinateSequence;
 
 import info.aduna.iteration.CloseableIteration;
-import mvm.rya.indexing.StatementContraints;
+import mvm.rya.indexing.StatementConstraints;
 import mvm.rya.indexing.accumulo.ConfigUtils;
 
 public class GeoIndexerTest {
 
-    private static final StatementContraints EMPTY_CONSTRAINTS = new StatementContraints();
+    private static final StatementConstraints EMPTY_CONSTRAINTS = new StatementConstraints();
 
     Configuration conf;
     GeometryFactory gf = new GeometryFactory(new PrecisionModel(), 4326);
@@ -266,11 +266,11 @@ public class GeoIndexerTest {
             Polygon p1 = gf.createPolygon(r1, new LinearRing[] {});
 
             // query with correct context
-            Assert.assertEquals(Sets.newHashSet(statement), getSet(f.queryWithin(p1, new StatementContraints().setContext(context))));
+            Assert.assertEquals(Sets.newHashSet(statement), getSet(f.queryWithin(p1, new StatementConstraints().setContext(context))));
 
             // query with wrong context
             Assert.assertEquals(Sets.newHashSet(),
-                    getSet(f.queryWithin(p1, new StatementContraints().setContext(vf.createURI("foo:context2")))));
+                    getSet(f.queryWithin(p1, new StatementConstraints().setContext(vf.createURI("foo:context2")))));
         }
     }
 
@@ -295,10 +295,10 @@ public class GeoIndexerTest {
             Polygon p1 = gf.createPolygon(r1, new LinearRing[] {});
 
             // query with correct subject
-            Assert.assertEquals(Sets.newHashSet(statement), getSet(f.queryWithin(p1, new StatementContraints().setSubject(subject))));
+            Assert.assertEquals(Sets.newHashSet(statement), getSet(f.queryWithin(p1, new StatementConstraints().setSubject(subject))));
 
             // query with wrong subject
-            Assert.assertEquals(Sets.newHashSet(), getSet(f.queryWithin(p1, new StatementContraints().setSubject(vf.createURI("foo:subj2")))));
+            Assert.assertEquals(Sets.newHashSet(), getSet(f.queryWithin(p1, new StatementConstraints().setSubject(vf.createURI("foo:subj2")))));
         }
     }
 
@@ -324,14 +324,14 @@ public class GeoIndexerTest {
 
             // query with correct context subject
             Assert.assertEquals(Sets.newHashSet(statement),
-                    getSet(f.queryWithin(p1, new StatementContraints().setContext(context).setSubject(subject))));
+                    getSet(f.queryWithin(p1, new StatementConstraints().setContext(context).setSubject(subject))));
 
             // query with wrong context
             Assert.assertEquals(Sets.newHashSet(),
-                    getSet(f.queryWithin(p1, new StatementContraints().setContext(vf.createURI("foo:context2")))));
+                    getSet(f.queryWithin(p1, new StatementConstraints().setContext(vf.createURI("foo:context2")))));
 
             // query with wrong subject
-            Assert.assertEquals(Sets.newHashSet(), getSet(f.queryWithin(p1, new StatementContraints().setSubject(vf.createURI("foo:subj2")))));
+            Assert.assertEquals(Sets.newHashSet(), getSet(f.queryWithin(p1, new StatementConstraints().setSubject(vf.createURI("foo:subj2")))));
         }
     }
 
@@ -357,11 +357,11 @@ public class GeoIndexerTest {
 
             // query with correct Predicate
             Assert.assertEquals(Sets.newHashSet(statement),
-                    getSet(f.queryWithin(p1, new StatementContraints().setPredicates(Collections.singleton(predicate)))));
+                    getSet(f.queryWithin(p1, new StatementConstraints().setPredicates(Collections.singleton(predicate)))));
 
             // query with wrong predicate
             Assert.assertEquals(Sets.newHashSet(),
-                    getSet(f.queryWithin(p1, new StatementContraints().setPredicates(Collections.singleton(vf.createURI("other:pred"))))));
+                    getSet(f.queryWithin(p1, new StatementConstraints().setPredicates(Collections.singleton(vf.createURI("other:pred"))))));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/AccumuloTemporalIndexerTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/AccumuloTemporalIndexerTest.java b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/AccumuloTemporalIndexerTest.java
index 1c6628f..d2dfc44 100644
--- a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/AccumuloTemporalIndexerTest.java
+++ b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/AccumuloTemporalIndexerTest.java
@@ -69,11 +69,12 @@ import com.beust.jcommander.internal.Lists;
 import info.aduna.iteration.CloseableIteration;
 import junit.framework.Assert;
 import mvm.rya.api.domain.RyaStatement;
-import mvm.rya.indexing.StatementContraints;
+import mvm.rya.indexing.StatementConstraints;
+import mvm.rya.indexing.StatementSerializer;
 import mvm.rya.indexing.TemporalInstant;
+import mvm.rya.indexing.TemporalInstantRfc3339;
 import mvm.rya.indexing.TemporalInterval;
 import mvm.rya.indexing.accumulo.ConfigUtils;
-import mvm.rya.indexing.accumulo.StatementSerializer;
 
 /**
  * JUnit tests for TemporalIndexer and it's implementation AccumuloTemporalIndexer
@@ -108,7 +109,7 @@ public final class AccumuloTemporalIndexerTest {
     private static final String STAT_KEYHASH = "keyhash";
     private static final String STAT_VALUEHASH = "valuehash";
     private static final String TEST_TEMPORAL_INDEX_TABLE_NAME = "testTemporalIndex";
-    private static final StatementContraints EMPTY_CONSTRAINTS = new StatementContraints();
+    private static final StatementConstraints EMPTY_CONSTRAINTS = new StatementConstraints();
 
     // Recreate table name for each test instance in this JVM.
     String uniquePerTestTemporalIndexTableName = TEST_TEMPORAL_INDEX_TABLE_NAME + String.format("%05d", nextTableSuffixAtomic.getAndIncrement());
@@ -791,7 +792,7 @@ public final class AccumuloTemporalIndexerTest {
 
     /**
      * Test method for
-     * {@link mvm.rya.indexing.accumulo.temporal.AccumuloTemporalIndexer#queryIntervalEquals(TemporalInterval, StatementContraints)}
+     * {@link mvm.rya.indexing.accumulo.temporal.AccumuloTemporalIndexer#queryIntervalEquals(TemporalInterval, StatementConstraints)}
      * .
      * @throws IOException
      * @throws QueryEvaluationException
@@ -818,7 +819,7 @@ public final class AccumuloTemporalIndexerTest {
 
     /**
      * Test interval before a given interval, for method:
-     * {@link AccumuloTemporalIndexer#queryIntervalBefore(TemporalInterval, StatementContraints)}.
+     * {@link AccumuloTemporalIndexer#queryIntervalBefore(TemporalInterval, StatementConstraints)}.
      *
      * @throws IOException
      * @throws QueryEvaluationException
@@ -920,7 +921,7 @@ public final class AccumuloTemporalIndexerTest {
         }
         tIndexer.flush();
         CloseableIteration<Statement, QueryEvaluationException> iter;
-        StatementContraints constraints = new StatementContraints();
+        StatementConstraints constraints = new StatementConstraints();
         constraints.setPredicates(new HashSet<URI>(Arrays.asList( pred2_eventTime,  pred1_atTime )));
 
         iter = tIndexer.queryInstantAfterInstant(seriesTs[searchForSeconds], constraints); // EMPTY_CONSTRAINTS);//

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/TemporalInstantTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/TemporalInstantTest.java b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/TemporalInstantTest.java
index 6363372..53dc6d2 100644
--- a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/TemporalInstantTest.java
+++ b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/TemporalInstantTest.java
@@ -25,6 +25,7 @@ import java.util.Date;
 import java.util.TimeZone;
 
 import mvm.rya.indexing.TemporalInstant;
+import mvm.rya.indexing.TemporalInstantRfc3339;
 
 import org.apache.commons.codec.binary.StringUtils;
 import org.joda.time.DateTime;

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/TemporalIntervalTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/TemporalIntervalTest.java b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/TemporalIntervalTest.java
index 6213826..9450fc2 100644
--- a/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/TemporalIntervalTest.java
+++ b/extras/indexing/src/test/java/mvm/rya/indexing/accumulo/temporal/TemporalIntervalTest.java
@@ -23,6 +23,7 @@ package mvm.rya.indexing.accumulo.temporal;
 import java.util.Arrays;
 
 import mvm.rya.indexing.TemporalInstant;
+import mvm.rya.indexing.TemporalInstantRfc3339;
 import mvm.rya.indexing.TemporalInterval;
 
 import org.joda.time.DateTime;

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloConstantPcjIntegrationTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloConstantPcjIntegrationTest.java b/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloConstantPcjIntegrationTest.java
index 8041f16..70ac0d1 100644
--- a/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloConstantPcjIntegrationTest.java
+++ b/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloConstantPcjIntegrationTest.java
@@ -1,5 +1,7 @@
 package mvm.rya.indexing.external;
 
+import java.net.UnknownHostException;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -70,7 +72,8 @@ public class AccumuloConstantPcjIntegrationTest {
 			TupleQueryResultHandlerException, QueryEvaluationException,
 			MalformedQueryException, AccumuloException,
 			AccumuloSecurityException, TableExistsException,
-			TableNotFoundException, RyaDAOException, InferenceEngineException {
+			TableNotFoundException, RyaDAOException, InferenceEngineException,
+			NumberFormatException, UnknownHostException {
 
 		repo = PcjIntegrationTestingUtil.getNonPcjRepo(prefix, "instance");
 		conn = repo.getConnection();
@@ -379,16 +382,16 @@ public class AccumuloConstantPcjIntegrationTest {
 		}
 
 		public void resetCount() {
-			this.count = 0;
+			count = 0;
 		}
 
 		@Override
-		public void startQueryResult(List<String> arg0)
+		public void startQueryResult(final List<String> arg0)
 				throws TupleQueryResultHandlerException {
 		}
 
 		@Override
-		public void handleSolution(BindingSet arg0)
+		public void handleSolution(final BindingSet arg0)
 				throws TupleQueryResultHandlerException {
 			count++;
 		}
@@ -398,12 +401,12 @@ public class AccumuloConstantPcjIntegrationTest {
 		}
 
 		@Override
-		public void handleBoolean(boolean arg0)
+		public void handleBoolean(final boolean arg0)
 				throws QueryResultHandlerException {
 		}
 
 		@Override
-		public void handleLinks(List<String> arg0)
+		public void handleLinks(final List<String> arg0)
 				throws QueryResultHandlerException {
 		}
 	}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloPcjIntegrationTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloPcjIntegrationTest.java b/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloPcjIntegrationTest.java
index 393ae74..917bfa0 100644
--- a/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloPcjIntegrationTest.java
+++ b/extras/indexing/src/test/java/mvm/rya/indexing/external/AccumuloPcjIntegrationTest.java
@@ -1,5 +1,7 @@
 package mvm.rya.indexing.external;
 
+import java.net.UnknownHostException;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -87,7 +89,8 @@ public class AccumuloPcjIntegrationTest {
 			TupleQueryResultHandlerException, QueryEvaluationException,
 			MalformedQueryException, AccumuloException,
 			AccumuloSecurityException, TableExistsException, RyaDAOException,
-			TableNotFoundException, InferenceEngineException {
+			TableNotFoundException, InferenceEngineException,
+			NumberFormatException, UnknownHostException {
 
 		repo = PcjIntegrationTestingUtil.getNonPcjRepo(prefix, "instance");
 		conn = repo.getConnection();
@@ -1396,16 +1399,16 @@ public class AccumuloPcjIntegrationTest {
 		}
 
 		public void resetCount() {
-			this.count = 0;
+			count = 0;
 		}
 
 		@Override
-		public void startQueryResult(List<String> arg0)
+		public void startQueryResult(final List<String> arg0)
 				throws TupleQueryResultHandlerException {
 		}
 
 		@Override
-		public void handleSolution(BindingSet arg0)
+		public void handleSolution(final BindingSet arg0)
 				throws TupleQueryResultHandlerException {
 			count++;
 			System.out.println(arg0);
@@ -1416,13 +1419,13 @@ public class AccumuloPcjIntegrationTest {
 		}
 
 		@Override
-		public void handleBoolean(boolean arg0)
+		public void handleBoolean(final boolean arg0)
 				throws QueryResultHandlerException {
 
 		}
 
 		@Override
-		public void handleLinks(List<String> arg0)
+		public void handleLinks(final List<String> arg0)
 				throws QueryResultHandlerException {
 
 		}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/external/PCJOptionalTestIT.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/external/PCJOptionalTestIT.java b/extras/indexing/src/test/java/mvm/rya/indexing/external/PCJOptionalTestIT.java
index c7b277b..38861b0 100644
--- a/extras/indexing/src/test/java/mvm/rya/indexing/external/PCJOptionalTestIT.java
+++ b/extras/indexing/src/test/java/mvm/rya/indexing/external/PCJOptionalTestIT.java
@@ -18,17 +18,10 @@
  */
 package mvm.rya.indexing.external;
 
+import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
 
-import mvm.rya.api.persist.RyaDAOException;
-import mvm.rya.indexing.external.PrecompJoinOptimizerIntegrationTest.CountingResultHandler;
-import mvm.rya.indexing.external.PrecompJoinOptimizerTest.NodeCollector;
-import mvm.rya.indexing.external.tupleSet.ExternalTupleSet;
-import mvm.rya.indexing.external.tupleSet.SimpleExternalTupleSet;
-import mvm.rya.indexing.pcj.matching.PCJOptimizer;
-import mvm.rya.rdftriplestore.inference.InferenceEngineException;
-
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.Connector;
@@ -65,257 +58,267 @@ import org.openrdf.sail.SailException;
 import com.beust.jcommander.internal.Lists;
 import com.google.common.base.Optional;
 
-public class PCJOptionalTestIT {
-
-
-	private SailRepositoryConnection conn, pcjConn;
-	private SailRepository repo, pcjRepo;
-	private Connector accCon;
-	String tablePrefix = "table_";
-	URI sub, sub2, obj, obj2, subclass, subclass2, talksTo, sub3, subclass3;
+import mvm.rya.api.persist.RyaDAOException;
+import mvm.rya.indexing.external.PrecompJoinOptimizerIntegrationTest.CountingResultHandler;
+import mvm.rya.indexing.external.PrecompJoinOptimizerTest.NodeCollector;
+import mvm.rya.indexing.external.tupleSet.ExternalTupleSet;
+import mvm.rya.indexing.external.tupleSet.SimpleExternalTupleSet;
+import mvm.rya.rdftriplestore.inference.InferenceEngineException;
 
-	@Before
-	public void init() throws RepositoryException,
-			TupleQueryResultHandlerException, QueryEvaluationException,
-			MalformedQueryException, AccumuloException,
-			AccumuloSecurityException, TableExistsException, RyaDAOException,
-			TableNotFoundException, InferenceEngineException {
+public class PCJOptionalTestIT {
 
-		repo = PcjIntegrationTestingUtil.getNonPcjRepo(tablePrefix, "instance");
-		conn = repo.getConnection();
-
-		pcjRepo = PcjIntegrationTestingUtil.getPcjRepo(tablePrefix, "instance");
-		pcjConn = pcjRepo.getConnection();
-
-		sub = new URIImpl("uri:entity");
-		subclass = new URIImpl("uri:class");
-		obj = new URIImpl("uri:obj");
-		talksTo = new URIImpl("uri:talksTo");
-
-		conn.add(sub, RDF.TYPE, subclass);
-		conn.add(sub, RDFS.LABEL, new LiteralImpl("label"));
-		conn.add(sub, talksTo, obj);
-
-		sub2 = new URIImpl("uri:entity2");
-		subclass2 = new URIImpl("uri:class2");
-		obj2 = new URIImpl("uri:obj2");
-		sub3 = new URIImpl("uri:entity3");
-		subclass3 = new URIImpl("uri:class3");
-
-
-		conn.add(sub2, RDF.TYPE, subclass2);
-		conn.add(sub2, RDFS.LABEL, new LiteralImpl("label2"));
-		conn.add(sub2, talksTo, obj2);
-		conn.add(sub3, RDF.TYPE, subclass3);
-		conn.add(sub3, RDFS.LABEL, new LiteralImpl("label3"));
 
+    private SailRepositoryConnection conn, pcjConn;
+    private SailRepository repo, pcjRepo;
+    private Connector accCon;
+    String tablePrefix = "table_";
+    URI sub, sub2, obj, obj2, subclass, subclass2, talksTo, sub3, subclass3;
+
+    @Before
+    public void init() throws RepositoryException,
+            TupleQueryResultHandlerException, QueryEvaluationException,
+            MalformedQueryException, AccumuloException,
+            AccumuloSecurityException, TableExistsException, RyaDAOException,
+            TableNotFoundException, InferenceEngineException, NumberFormatException,
+            UnknownHostException {
+
+        repo = PcjIntegrationTestingUtil.getNonPcjRepo(tablePrefix, "instance");
+        conn = repo.getConnection();
+
+        pcjRepo = PcjIntegrationTestingUtil.getPcjRepo(tablePrefix, "instance");
+        pcjConn = pcjRepo.getConnection();
+
+        sub = new URIImpl("uri:entity");
+        subclass = new URIImpl("uri:class");
+        obj = new URIImpl("uri:obj");
+        talksTo = new URIImpl("uri:talksTo");
+
+        conn.add(sub, RDF.TYPE, subclass);
+        conn.add(sub, RDFS.LABEL, new LiteralImpl("label"));
+        conn.add(sub, talksTo, obj);
+
+        sub2 = new URIImpl("uri:entity2");
+        subclass2 = new URIImpl("uri:class2");
+        obj2 = new URIImpl("uri:obj2");
+        sub3 = new URIImpl("uri:entity3");
+        subclass3 = new URIImpl("uri:class3");
+
+
+        conn.add(sub2, RDF.TYPE, subclass2);
+        conn.add(sub2, RDFS.LABEL, new LiteralImpl("label2"));
+        conn.add(sub2, talksTo, obj2);
+        conn.add(sub3, RDF.TYPE, subclass3);
+        conn.add(sub3, RDFS.LABEL, new LiteralImpl("label3"));
 
-		accCon = new MockInstance("instance").getConnector("root",
-				new PasswordToken(""));
 
-	}
+        accCon = new MockInstance("instance").getConnector("root",
+                new PasswordToken(""));
 
-	@After
-	public void close() throws RepositoryException, AccumuloException,
-			AccumuloSecurityException, TableNotFoundException {
+    }
 
-		PcjIntegrationTestingUtil.closeAndShutdown(conn, repo);
-		PcjIntegrationTestingUtil.closeAndShutdown(pcjConn, pcjRepo);
-		PcjIntegrationTestingUtil.deleteCoreRyaTables(accCon, tablePrefix);
-		PcjIntegrationTestingUtil.deleteIndexTables(accCon, 2, tablePrefix);
+    @After
+    public void close() throws RepositoryException, AccumuloException,
+            AccumuloSecurityException, TableNotFoundException {
 
-	}
+        PcjIntegrationTestingUtil.closeAndShutdown(conn, repo);
+        PcjIntegrationTestingUtil.closeAndShutdown(pcjConn, pcjRepo);
+        PcjIntegrationTestingUtil.deleteCoreRyaTables(accCon, tablePrefix);
+        PcjIntegrationTestingUtil.deleteIndexTables(accCon, 2, tablePrefix);
 
+    }
 
-	@Test
-	public void testEvaluateSingeIndexExactMatch()
-			throws TupleQueryResultHandlerException, QueryEvaluationException,
-			MalformedQueryException, RepositoryException, AccumuloException,
-			AccumuloSecurityException, TableExistsException, RyaDAOException,
-			SailException, TableNotFoundException, PcjException, InferenceEngineException {
 
-		String indexSparqlString = ""//
-				+ "SELECT ?e ?c ?l ?o" //
-				+ "{" //
-				+ "  ?e a ?c . "//
-				+ "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "//
-				+ "  OPTIONAL{?e <uri:talksTo> ?o } . "//
-				+ "}";//
+    @Test
+    public void testEvaluateSingeIndexExactMatch()
+            throws TupleQueryResultHandlerException, QueryEvaluationException,
+            MalformedQueryException, RepositoryException, AccumuloException,
+            AccumuloSecurityException, TableExistsException, RyaDAOException,
+            SailException, TableNotFoundException, PcjException, InferenceEngineException {
 
-		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
-				+ "INDEX_1", indexSparqlString, new String[] { "e", "c", "l", "o" },
-				Optional.<PcjVarOrderFactory> absent());
-		String queryString = ""//
-				+ "SELECT ?e ?c ?l ?o " //
-				+ "{" //
-				+ "  ?e a ?c . "//
-				+ "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
-				+ "  OPTIONAL {?e <uri:talksTo> ?o } . "//
-				+ "}";//
+        final String indexSparqlString = ""//
+                + "SELECT ?e ?c ?l ?o" //
+                + "{" //
+                + "  ?e a ?c . "//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "//
+                + "  OPTIONAL{?e <uri:talksTo> ?o } . "//
+                + "}";//
 
-		CountingResultHandler crh = new CountingResultHandler();
-		PcjIntegrationTestingUtil.deleteCoreRyaTables(accCon, tablePrefix);
-		PcjIntegrationTestingUtil.closeAndShutdown(conn, repo);
-		TupleQuery tupQuery = pcjConn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
-		tupQuery.evaluate(crh);
+        PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
+                + "INDEX_1", indexSparqlString, new String[] { "e", "c", "l", "o" },
+                Optional.<PcjVarOrderFactory> absent());
+        final String queryString = ""//
+                + "SELECT ?e ?c ?l ?o " //
+                + "{" //
+                + "  ?e a ?c . "//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
+                + "  OPTIONAL {?e <uri:talksTo> ?o } . "//
+                + "}";//
 
-		Assert.assertEquals(3, crh.getCount());
+        final CountingResultHandler crh = new CountingResultHandler();
+        PcjIntegrationTestingUtil.deleteCoreRyaTables(accCon, tablePrefix);
+        PcjIntegrationTestingUtil.closeAndShutdown(conn, repo);
+        final TupleQuery tupQuery = pcjConn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupQuery.evaluate(crh);
 
-	}
+        Assert.assertEquals(3, crh.getCount());
 
+    }
 
 
-	@Test
-	public void testEvaluateSingeIndex()
-			throws TupleQueryResultHandlerException, QueryEvaluationException,
-			MalformedQueryException, RepositoryException, AccumuloException,
-			AccumuloSecurityException, TableExistsException, RyaDAOException,
-			SailException, TableNotFoundException, PcjException, InferenceEngineException {
 
-		String indexSparqlString = ""//
-				+ "SELECT ?e ?l ?o" //
-				+ "{" //
-				+ "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "//
-				+ "  OPTIONAL{?e <uri:talksTo> ?o } . "//
-				+ "}";//
+    @Test
+    public void testEvaluateSingeIndex()
+            throws TupleQueryResultHandlerException, QueryEvaluationException,
+            MalformedQueryException, RepositoryException, AccumuloException,
+            AccumuloSecurityException, TableExistsException, RyaDAOException,
+            SailException, TableNotFoundException, PcjException, InferenceEngineException,
+            NumberFormatException, UnknownHostException {
 
-		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
-				+ "INDEX_1", indexSparqlString, new String[] { "e", "l", "o" },
-				Optional.<PcjVarOrderFactory> absent());
-		String queryString = ""//
-				+ "SELECT ?e ?c ?l ?o " //
-				+ "{" //
-				+ "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
-				+ "  OPTIONAL {?e <uri:talksTo> ?o } . "//
-				+ "  ?e a ?c . "//
-				+ "}";//
+        final String indexSparqlString = ""//
+                + "SELECT ?e ?l ?o" //
+                + "{" //
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "//
+                + "  OPTIONAL{?e <uri:talksTo> ?o } . "//
+                + "}";//
 
-		CountingResultHandler crh = new CountingResultHandler();
-		PcjIntegrationTestingUtil.deleteCoreRyaTables(accCon, tablePrefix);
-		PcjIntegrationTestingUtil.closeAndShutdown(conn, repo);
+        PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
+                + "INDEX_1", indexSparqlString, new String[] { "e", "l", "o" },
+                Optional.<PcjVarOrderFactory> absent());
+        final String queryString = ""//
+                + "SELECT ?e ?c ?l ?o " //
+                + "{" //
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
+                + "  OPTIONAL {?e <uri:talksTo> ?o } . "//
+                + "  ?e a ?c . "//
+                + "}";//
 
-		repo = PcjIntegrationTestingUtil.getPcjRepo(tablePrefix, "instance");
-		conn = repo.getConnection();
-		conn.add(sub, RDF.TYPE, subclass);
-		conn.add(sub2, RDF.TYPE, subclass2);
-		conn.add(sub3, RDF.TYPE, subclass3);
+        final CountingResultHandler crh = new CountingResultHandler();
+        PcjIntegrationTestingUtil.deleteCoreRyaTables(accCon, tablePrefix);
+        PcjIntegrationTestingUtil.closeAndShutdown(conn, repo);
 
+        repo = PcjIntegrationTestingUtil.getPcjRepo(tablePrefix, "instance");
+        conn = repo.getConnection();
+        conn.add(sub, RDF.TYPE, subclass);
+        conn.add(sub2, RDF.TYPE, subclass2);
+        conn.add(sub3, RDF.TYPE, subclass3);
 
-		TupleQuery tupQuery = pcjConn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
-		tupQuery.evaluate(crh);
 
-		Assert.assertEquals(3, crh.getCount());
+        final TupleQuery tupQuery = pcjConn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupQuery.evaluate(crh);
 
-	}
+        Assert.assertEquals(3, crh.getCount());
 
+    }
 
 
 
 
 
-	@Test
-	public void testSimpleOptionalTest1() throws Exception {
 
-		String query = ""//
-				+ "SELECT ?u ?s ?t " //
-				+ "{" //
-				+ "  ?s a ?t ."//
-				+ "  OPTIONAL{?t <http://www.w3.org/2000/01/rdf-schema#label> ?u } ."//
-				+ "  ?u <uri:talksTo> ?s . "//
-				+ "}";//
+    @Test
+    public void testSimpleOptionalTest1() throws Exception {
 
-		final SPARQLParser parser = new SPARQLParser();
+        final String query = ""//
+                + "SELECT ?u ?s ?t " //
+                + "{" //
+                + "  ?s a ?t ."//
+                + "  OPTIONAL{?t <http://www.w3.org/2000/01/rdf-schema#label> ?u } ."//
+                + "  ?u <uri:talksTo> ?s . "//
+                + "}";//
 
-		final ParsedQuery pq1 = parser.parseQuery(query, null);
+        final SPARQLParser parser = new SPARQLParser();
 
-		final SimpleExternalTupleSet extTup1 = new SimpleExternalTupleSet(
-				(Projection) pq1.getTupleExpr().clone());
+        final ParsedQuery pq1 = parser.parseQuery(query, null);
 
-		final List<ExternalTupleSet> list = new ArrayList<ExternalTupleSet>();
+        final SimpleExternalTupleSet extTup1 = new SimpleExternalTupleSet(
+                (Projection) pq1.getTupleExpr().clone());
 
-		list.add(extTup1);
+        final List<ExternalTupleSet> list = new ArrayList<ExternalTupleSet>();
 
-		final List<QueryModelNode> optTupNodes = Lists.newArrayList();
-		optTupNodes.add(extTup1);
+        list.add(extTup1);
 
-		final PCJOptimizer pcj = new PCJOptimizer(list, true);
-		final TupleExpr te = pq1.getTupleExpr();
-		pcj.optimize(te, null, null);
+        final List<QueryModelNode> optTupNodes = Lists.newArrayList();
+        optTupNodes.add(extTup1);
 
-		final NodeCollector nc = new NodeCollector();
-		te.visit(nc);
+        final PrecompJoinOptimizer pcj = new PrecompJoinOptimizer(list, true);
+        final TupleExpr te = pq1.getTupleExpr();
+        pcj.optimize(te, null, null);
 
-		Assert.assertEquals(nc.qNodes.size(), optTupNodes.size());
-		for (final QueryModelNode node : nc.qNodes) {
-			Assert.assertTrue(optTupNodes.contains(node));
-		}
+        final NodeCollector nc = new NodeCollector();
+        te.visit(nc);
 
-	}
+        final List<QueryModelNode> qNodes = nc.getNodes();
 
+        Assert.assertEquals(qNodes.size(), optTupNodes.size());
+        for (final QueryModelNode node : qNodes) {
+            Assert.assertTrue(optTupNodes.contains(node));
+        }
 
-	@Test
-	public void testSimpleOptionalTest2() throws Exception {
+    }
 
-		String query = ""//
-				+ "SELECT ?u ?s ?t " //
-				+ "{" //
-				+ "  ?s a ?t ."//
-				+ "  OPTIONAL{?t <http://www.w3.org/2000/01/rdf-schema#label> ?u } ."//
-				+ "  ?u <uri:talksTo> ?s . "//
-				+ "  ?s a ?u ."//
-				+ "}";//
 
+    @Test
+    public void testSimpleOptionalTest2() throws Exception {
 
-		String pcj = ""//
-				+ "SELECT ?d ?b ?c " //
-				+ "{" //
-				+ "  ?b a ?c ."//
-				+ "  OPTIONAL{?c <http://www.w3.org/2000/01/rdf-schema#label> ?d } ."//
-				+ "  ?d <uri:talksTo> ?b . "//
-				+ "}";//
+        final String query = ""//
+                + "SELECT ?u ?s ?t " //
+                + "{" //
+                + "  ?s a ?t ."//
+                + "  OPTIONAL{?t <http://www.w3.org/2000/01/rdf-schema#label> ?u } ."//
+                + "  ?u <uri:talksTo> ?s . "//
+                + "  ?s a ?u ."//
+                + "}";//
 
 
-		String relabel_pcj = ""//
-				+ "SELECT ?u ?s ?t " //
-				+ "{" //
-				+ "  ?s a ?t ."//
-				+ "  OPTIONAL{?t <http://www.w3.org/2000/01/rdf-schema#label> ?u } ."//
-				+ "  ?u <uri:talksTo> ?s . "//
-				+ "}";//
+        final String pcj = ""//
+                + "SELECT ?d ?b ?c " //
+                + "{" //
+                + "  ?b a ?c ."//
+                + "  OPTIONAL{?c <http://www.w3.org/2000/01/rdf-schema#label> ?d } ."//
+                + "  ?d <uri:talksTo> ?b . "//
+                + "}";//
 
 
-		final SPARQLParser parser = new SPARQLParser();
+        final String relabel_pcj = ""//
+                + "SELECT ?u ?s ?t " //
+                + "{" //
+                + "  ?s a ?t ."//
+                + "  OPTIONAL{?t <http://www.w3.org/2000/01/rdf-schema#label> ?u } ."//
+                + "  ?u <uri:talksTo> ?s . "//
+                + "}";//
 
-		final ParsedQuery pq1 = parser.parseQuery(query, null);
-		final ParsedQuery pq2 = parser.parseQuery(pcj, null);
-		final ParsedQuery pq3 = parser.parseQuery(relabel_pcj, null);
 
-		final SimpleExternalTupleSet extTup1 = new SimpleExternalTupleSet(
-				(Projection) pq2.getTupleExpr());
-		final SimpleExternalTupleSet extTup2 = new SimpleExternalTupleSet(
-				(Projection) pq3.getTupleExpr());
+        final SPARQLParser parser = new SPARQLParser();
 
-		final List<ExternalTupleSet> list = new ArrayList<ExternalTupleSet>();
+        final ParsedQuery pq1 = parser.parseQuery(query, null);
+        final ParsedQuery pq2 = parser.parseQuery(pcj, null);
+        final ParsedQuery pq3 = parser.parseQuery(relabel_pcj, null);
 
-		list.add(extTup1);
+        final SimpleExternalTupleSet extTup1 = new SimpleExternalTupleSet(
+                (Projection) pq2.getTupleExpr());
+        final SimpleExternalTupleSet extTup2 = new SimpleExternalTupleSet(
+                (Projection) pq3.getTupleExpr());
 
-		final List<QueryModelNode> optTupNodes = Lists.newArrayList();
-		optTupNodes.add(extTup2);
+        final List<ExternalTupleSet> list = new ArrayList<ExternalTupleSet>();
 
-		final PCJOptimizer opt = new PCJOptimizer(list, true);
-		final TupleExpr te = pq1.getTupleExpr();
-		opt.optimize(te, null, null);
+        list.add(extTup1);
 
-		final NodeCollector nc = new NodeCollector();
-		te.visit(nc);
+        final List<QueryModelNode> optTupNodes = Lists.newArrayList();
+        optTupNodes.add(extTup2);
 
-		Assert.assertEquals(nc.qNodes.size(), optTupNodes.size() + 1);
-		for (QueryModelNode node : optTupNodes) {
-			Assert.assertTrue(nc.qNodes.contains(node));
-		}
+        final PrecompJoinOptimizer opt = new PrecompJoinOptimizer(list, true);
+        final TupleExpr te = pq1.getTupleExpr();
+        opt.optimize(te, null, null);
 
-	}
+        final NodeCollector nc = new NodeCollector();
+        te.visit(nc);
 
+        final List<QueryModelNode> qNodes = nc.getNodes();
 
+        Assert.assertEquals(qNodes.size(), optTupNodes.size() + 1);
+        for (final QueryModelNode node : optTupNodes) {
+            Assert.assertTrue(qNodes.contains(node));
+        }
 
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java b/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java
index 3b87179..7646084 100644
--- a/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java
+++ b/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java
@@ -21,6 +21,7 @@ package mvm.rya.indexing.external;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
+import java.net.UnknownHostException;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
@@ -70,117 +71,119 @@ import mvm.rya.sail.config.RyaSailFactory;
 
 public class PcjIntegrationTestingUtil {
 
-	private static final AccumuloPcjSerializer converter = new AccumuloPcjSerializer();
-
-	public static Set<QueryModelNode> getTupleSets(TupleExpr te) {
-		final ExternalTupleVisitor etv = new ExternalTupleVisitor();
-		te.visit(etv);
-		return etv.getExtTup();
-	}
-
-	public static void deleteCoreRyaTables(Connector accCon, String prefix)
-			throws AccumuloException, AccumuloSecurityException,
-			TableNotFoundException {
-		final TableOperations ops = accCon.tableOperations();
-		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");
-		}
-	}
-
-	public static SailRepository getPcjRepo(String tablePrefix, String instance)
-			throws AccumuloException, AccumuloSecurityException,
-			RyaDAOException, RepositoryException, InferenceEngineException {
-
-		final AccumuloRdfConfiguration pcjConf = new AccumuloRdfConfiguration();
-		pcjConf.set(ConfigUtils.USE_PCJ, "true");
-		pcjConf.set(ConfigUtils.USE_MOCK_INSTANCE, "true");
-		pcjConf.set(ConfigUtils.CLOUDBASE_INSTANCE, instance);
-		pcjConf.setTablePrefix(tablePrefix);
-
-		final Sail pcjSail = RyaSailFactory.getInstance(pcjConf);
-		final SailRepository pcjRepo = new SailRepository(pcjSail);
-		pcjRepo.initialize();
-		return pcjRepo;
-	}
-
-	public static SailRepository getNonPcjRepo(String tablePrefix,
-			String instance) throws AccumuloException,
-			AccumuloSecurityException, RyaDAOException, RepositoryException, InferenceEngineException {
-
-		final AccumuloRdfConfiguration nonPcjConf = new AccumuloRdfConfiguration();
-		nonPcjConf.set(ConfigUtils.USE_MOCK_INSTANCE, "true");
-		nonPcjConf.set(ConfigUtils.CLOUDBASE_INSTANCE, instance);
-		nonPcjConf.setTablePrefix(tablePrefix);
-
-		final Sail nonPcjSail = RyaSailFactory.getInstance(nonPcjConf);
-		final SailRepository nonPcjRepo = new SailRepository(nonPcjSail);
-		nonPcjRepo.initialize();
-		return nonPcjRepo;
-	}
-
-	public static void closeAndShutdown(SailRepositoryConnection connection,
-			SailRepository repo) throws RepositoryException {
-		connection.close();
-		repo.shutDown();
-	}
-
-	public static void deleteIndexTables(Connector accCon, int tableNum,
-			String prefix) throws AccumuloException, AccumuloSecurityException,
-			TableNotFoundException {
-		final TableOperations ops = accCon.tableOperations();
-		final String tablename = prefix + "INDEX_";
-		for (int i = 1; i < tableNum + 1; i++) {
-			if (ops.exists(tablename + i)) {
-				ops.delete(tablename + i);
-			}
-		}
-	}
-
-	public static class BindingSetAssignmentCollector extends
-			QueryModelVisitorBase<RuntimeException> {
-
-		private final Set<QueryModelNode> bindingSetList = Sets.newHashSet();
-
-		public Set<QueryModelNode> getBindingSetAssignments() {
-			return bindingSetList;
-		}
-
-		public boolean containsBSAs() {
-			return bindingSetList.size() > 0;
-		}
-
-		@Override
-		public void meet(BindingSetAssignment node) {
-			bindingSetList.add(node);
-			super.meet(node);
-		}
-
-	}
-
-	public static class ExternalTupleVisitor extends
-			QueryModelVisitorBase<RuntimeException> {
-
-		private final Set<QueryModelNode> eSet = new HashSet<>();
-
-		@Override
-		public void meetNode(QueryModelNode node) throws RuntimeException {
-			if (node instanceof ExternalTupleSet) {
-				eSet.add(node);
-			}
-			super.meetNode(node);
-		}
-
-		public Set<QueryModelNode> getExtTup() {
-			return eSet;
-		}
-
-	}
+    private static final AccumuloPcjSerializer converter = new AccumuloPcjSerializer();
+
+    public static Set<QueryModelNode> getTupleSets(final TupleExpr te) {
+        final ExternalTupleVisitor etv = new ExternalTupleVisitor();
+        te.visit(etv);
+        return etv.getExtTup();
+    }
+
+    public static void deleteCoreRyaTables(final Connector accCon, final String prefix)
+            throws AccumuloException, AccumuloSecurityException,
+            TableNotFoundException {
+        final TableOperations ops = accCon.tableOperations();
+        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");
+        }
+    }
+
+    public static SailRepository getPcjRepo(final String tablePrefix, final String instance)
+            throws AccumuloException, AccumuloSecurityException,
+            RyaDAOException, RepositoryException, InferenceEngineException,
+            NumberFormatException, UnknownHostException {
+
+        final AccumuloRdfConfiguration pcjConf = new AccumuloRdfConfiguration();
+        pcjConf.set(ConfigUtils.USE_PCJ, "true");
+        pcjConf.set(ConfigUtils.USE_MOCK_INSTANCE, "true");
+        pcjConf.set(ConfigUtils.CLOUDBASE_INSTANCE, instance);
+        pcjConf.setTablePrefix(tablePrefix);
+
+        final Sail pcjSail = RyaSailFactory.getInstance(pcjConf);
+        final SailRepository pcjRepo = new SailRepository(pcjSail);
+        pcjRepo.initialize();
+        return pcjRepo;
+    }
+
+    public static SailRepository getNonPcjRepo(final String tablePrefix,
+            final String instance) throws AccumuloException,
+            AccumuloSecurityException, RyaDAOException, RepositoryException, InferenceEngineException,
+            NumberFormatException, UnknownHostException {
+
+        final AccumuloRdfConfiguration nonPcjConf = new AccumuloRdfConfiguration();
+        nonPcjConf.set(ConfigUtils.USE_MOCK_INSTANCE, "true");
+        nonPcjConf.set(ConfigUtils.CLOUDBASE_INSTANCE, instance);
+        nonPcjConf.setTablePrefix(tablePrefix);
+
+        final Sail nonPcjSail = RyaSailFactory.getInstance(nonPcjConf);
+        final SailRepository nonPcjRepo = new SailRepository(nonPcjSail);
+        nonPcjRepo.initialize();
+        return nonPcjRepo;
+    }
+
+    public static void closeAndShutdown(final SailRepositoryConnection connection,
+            final SailRepository repo) throws RepositoryException {
+        connection.close();
+        repo.shutDown();
+    }
+
+    public static void deleteIndexTables(final Connector accCon, final int tableNum,
+            final String prefix) throws AccumuloException, AccumuloSecurityException,
+            TableNotFoundException {
+        final TableOperations ops = accCon.tableOperations();
+        final String tablename = prefix + "INDEX_";
+        for (int i = 1; i < tableNum + 1; i++) {
+            if (ops.exists(tablename + i)) {
+                ops.delete(tablename + i);
+            }
+        }
+    }
+
+    public static class BindingSetAssignmentCollector extends
+            QueryModelVisitorBase<RuntimeException> {
+
+        private final Set<QueryModelNode> bindingSetList = Sets.newHashSet();
+
+        public Set<QueryModelNode> getBindingSetAssignments() {
+            return bindingSetList;
+        }
+
+        public boolean containsBSAs() {
+            return bindingSetList.size() > 0;
+        }
+
+        @Override
+        public void meet(final BindingSetAssignment node) {
+            bindingSetList.add(node);
+            super.meet(node);
+        }
+
+    }
+
+    public static class ExternalTupleVisitor extends
+            QueryModelVisitorBase<RuntimeException> {
+
+        private final Set<QueryModelNode> eSet = new HashSet<>();
+
+        @Override
+        public void meetNode(final QueryModelNode node) throws RuntimeException {
+            if (node instanceof ExternalTupleSet) {
+                eSet.add(node);
+            }
+            super.meetNode(node);
+        }
+
+        public Set<QueryModelNode> getExtTup() {
+            return eSet;
+        }
+
+    }
 
 
 
@@ -193,7 +196,7 @@ public class PcjIntegrationTestingUtil {
 
 
 
-	  /**
+      /**
      * Creates a new PCJ Table in Accumulo and populates it by scanning an
      * instance of Rya for historic matches.
      * <p>
@@ -225,10 +228,10 @@ public class PcjIntegrationTestingUtil {
         checkNotNull(resultVariables);
         checkNotNull(pcjVarOrderFactory);
 
-        PcjTables pcj = new PcjTables();
+        final PcjTables pcj = new PcjTables();
         // Create the PCJ's variable orders.
-        PcjVarOrderFactory varOrderFactory = pcjVarOrderFactory.or(new ShiftVarOrderFactory());
-        Set<VariableOrder> varOrders = varOrderFactory.makeVarOrders( new VariableOrder(resultVariables) );
+        final PcjVarOrderFactory varOrderFactory = pcjVarOrderFactory.or(new ShiftVarOrderFactory());
+        final Set<VariableOrder> varOrders = varOrderFactory.makeVarOrders( new VariableOrder(resultVariables) );
 
         // Create the PCJ table in Accumulo.
         pcj.createPcjTable(accumuloConn, pcjTableName, varOrders, sparql);
@@ -238,168 +241,168 @@ public class PcjIntegrationTestingUtil {
     }
 
 
-	/**
-	 * Scan Rya for results that solve the PCJ's query and store them in the PCJ
-	 * table.
-	 * <p>
-	 * This method assumes the PCJ table has already been created.
-	 *
-	 * @param accumuloConn
-	 *            - A connection to the Accumulo that hosts the PCJ table. (not
-	 *            null)
-	 * @param pcjTableName
-	 *            - The name of the PCJ table that will receive the results.
-	 *            (not null)
-	 * @param ryaConn
-	 *            - A connection to the Rya store that will be queried to find
-	 *            results. (not null)
-	 * @throws PcjException
-	 *             If results could not be written to the PCJ table, the PCJ
-	 *             table does not exist, or the query that is being execute was
-	 *             malformed.
-	 */
-	public static void populatePcj(final Connector accumuloConn,
-			final String pcjTableName, final RepositoryConnection ryaConn)
-			throws PcjException {
-		checkNotNull(accumuloConn);
-		checkNotNull(pcjTableName);
-		checkNotNull(ryaConn);
-
-		try {
-			// Fetch the query that needs to be executed from the PCJ table.
-			PcjMetadata pcjMetadata = new PcjTables().getPcjMetadata(
-					accumuloConn, pcjTableName);
-			String sparql = pcjMetadata.getSparql();
-
-			// Query Rya for results to the SPARQL query.
-			TupleQuery query = ryaConn.prepareTupleQuery(QueryLanguage.SPARQL,
-					sparql);
-			TupleQueryResult results = query.evaluate();
-
-			// Load batches of 1000 of them at a time into the PCJ table
-			Set<BindingSet> batch = new HashSet<>(1000);
-			while (results.hasNext()) {
-				batch.add(results.next());
-
-				if (batch.size() == 1000) {
-					addResults(accumuloConn, pcjTableName, batch);
-					batch.clear();
-				}
-			}
-
-			if (!batch.isEmpty()) {
-				addResults(accumuloConn, pcjTableName, batch);
-			}
-
-		} catch (RepositoryException | MalformedQueryException
-				| QueryEvaluationException e) {
-			throw new PcjException(
-					"Could not populate a PCJ table with Rya results for the table named: "
-							+ pcjTableName, e);
-		}
-	}
-
-	public static void addResults(final Connector accumuloConn,
-			final String pcjTableName, final Collection<BindingSet> results)
-			throws PcjException {
-		checkNotNull(accumuloConn);
-		checkNotNull(pcjTableName);
-		checkNotNull(results);
-
-		// Write a result to each of the variable orders that are in the table.
-		writeResults(accumuloConn, pcjTableName, results);
-	}
-
-	/**
-	 * Add a collection of results to a specific PCJ table.
-	 *
-	 * @param accumuloConn
-	 *            - A connection to the Accumulo that hosts the PCJ table. (not
-	 *            null)
-	 * @param pcjTableName
-	 *            - The name of the PCJ table that will receive the results.
-	 *            (not null)
-	 * @param results
-	 *            - Binding sets that will be written to the PCJ table. (not
-	 *            null)
-	 * @throws PcjException
-	 *             The provided PCJ table doesn't exist, is missing the PCJ
-	 *             metadata, or the result could not be written to it.
-	 */
-	private static void writeResults(final Connector accumuloConn,
-			final String pcjTableName, final Collection<BindingSet> results)
-			throws PcjException {
-		checkNotNull(accumuloConn);
-		checkNotNull(pcjTableName);
-		checkNotNull(results);
-
-		// Fetch the variable orders from the PCJ table.
-		PcjMetadata metadata = new PcjTables().getPcjMetadata(accumuloConn,
-				pcjTableName);
-
-		// Write each result formatted using each of the variable orders.
-		BatchWriter writer = null;
-		try {
-			writer = accumuloConn.createBatchWriter(pcjTableName,
-					new BatchWriterConfig());
-			for (BindingSet result : results) {
-				Set<Mutation> addResultMutations = makeWriteResultMutations(
-						metadata.getVarOrders(), result);
-				writer.addMutations(addResultMutations);
-			}
-		} catch (TableNotFoundException | MutationsRejectedException e) {
-			throw new PcjException(
-					"Could not add results to the PCJ table named: "
-							+ pcjTableName, e);
-		} finally {
-			if (writer != null) {
-				try {
-					writer.close();
-				} catch (MutationsRejectedException e) {
-					throw new PcjException(
-							"Could not add results to a PCJ table because some of the mutations were rejected.",
-							e);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Create the {@link Mutations} required to write a new {@link BindingSet}
-	 * to a PCJ table for each {@link VariableOrder} that is provided.
-	 *
-	 * @param varOrders
-	 *            - The variables orders the result will be written to. (not
-	 *            null)
-	 * @param result
-	 *            - A new PCJ result. (not null)
-	 * @return Mutation that will write the result to a PCJ table.
-	 * @throws PcjException
-	 *             The binding set could not be encoded.
-	 */
-	private static Set<Mutation> makeWriteResultMutations(
-			final Set<VariableOrder> varOrders, final BindingSet result)
-			throws PcjException {
-		checkNotNull(varOrders);
-		checkNotNull(result);
-
-		Set<Mutation> mutations = new HashSet<>();
-
-		for (final VariableOrder varOrder : varOrders) {
-			try {
-				// Serialize the result to the variable order.
-				byte[] serializedResult = converter.convert(result, varOrder);
-
-				// Row ID = binding set values, Column Family = variable order
-				// of the binding set.
-				Mutation addResult = new Mutation(serializedResult);
-				addResult.put(varOrder.toString(), "", "");
-				mutations.add(addResult);
-			} catch (BindingSetConversionException e) {
-				throw new PcjException("Could not serialize a result.", e);
-			}
-		}
-
-		return mutations;
-	}
+    /**
+     * Scan Rya for results that solve the PCJ's query and store them in the PCJ
+     * table.
+     * <p>
+     * This method assumes the PCJ table has already been created.
+     *
+     * @param accumuloConn
+     *            - A connection to the Accumulo that hosts the PCJ table. (not
+     *            null)
+     * @param pcjTableName
+     *            - The name of the PCJ table that will receive the results.
+     *            (not null)
+     * @param ryaConn
+     *            - A connection to the Rya store that will be queried to find
+     *            results. (not null)
+     * @throws PcjException
+     *             If results could not be written to the PCJ table, the PCJ
+     *             table does not exist, or the query that is being execute was
+     *             malformed.
+     */
+    public static void populatePcj(final Connector accumuloConn,
+            final String pcjTableName, final RepositoryConnection ryaConn)
+            throws PcjException {
+        checkNotNull(accumuloConn);
+        checkNotNull(pcjTableName);
+        checkNotNull(ryaConn);
+
+        try {
+            // Fetch the query that needs to be executed from the PCJ table.
+            final PcjMetadata pcjMetadata = new PcjTables().getPcjMetadata(
+                    accumuloConn, pcjTableName);
+            final String sparql = pcjMetadata.getSparql();
+
+            // Query Rya for results to the SPARQL query.
+            final TupleQuery query = ryaConn.prepareTupleQuery(QueryLanguage.SPARQL,
+                    sparql);
+            final TupleQueryResult results = query.evaluate();
+
+            // Load batches of 1000 of them at a time into the PCJ table
+            final Set<BindingSet> batch = new HashSet<>(1000);
+            while (results.hasNext()) {
+                batch.add(results.next());
+
+                if (batch.size() == 1000) {
+                    addResults(accumuloConn, pcjTableName, batch);
+                    batch.clear();
+                }
+            }
+
+            if (!batch.isEmpty()) {
+                addResults(accumuloConn, pcjTableName, batch);
+            }
+
+        } catch (RepositoryException | MalformedQueryException
+                | QueryEvaluationException e) {
+            throw new PcjException(
+                    "Could not populate a PCJ table with Rya results for the table named: "
+                            + pcjTableName, e);
+        }
+    }
+
+    public static void addResults(final Connector accumuloConn,
+            final String pcjTableName, final Collection<BindingSet> results)
+            throws PcjException {
+        checkNotNull(accumuloConn);
+        checkNotNull(pcjTableName);
+        checkNotNull(results);
+
+        // Write a result to each of the variable orders that are in the table.
+        writeResults(accumuloConn, pcjTableName, results);
+    }
+
+    /**
+     * Add a collection of results to a specific PCJ table.
+     *
+     * @param accumuloConn
+     *            - A connection to the Accumulo that hosts the PCJ table. (not
+     *            null)
+     * @param pcjTableName
+     *            - The name of the PCJ table that will receive the results.
+     *            (not null)
+     * @param results
+     *            - Binding sets that will be written to the PCJ table. (not
+     *            null)
+     * @throws PcjException
+     *             The provided PCJ table doesn't exist, is missing the PCJ
+     *             metadata, or the result could not be written to it.
+     */
+    private static void writeResults(final Connector accumuloConn,
+            final String pcjTableName, final Collection<BindingSet> results)
+            throws PcjException {
+        checkNotNull(accumuloConn);
+        checkNotNull(pcjTableName);
+        checkNotNull(results);
+
+        // Fetch the variable orders from the PCJ table.
+        final PcjMetadata metadata = new PcjTables().getPcjMetadata(accumuloConn,
+                pcjTableName);
+
+        // Write each result formatted using each of the variable orders.
+        BatchWriter writer = null;
+        try {
+            writer = accumuloConn.createBatchWriter(pcjTableName,
+                    new BatchWriterConfig());
+            for (final BindingSet result : results) {
+                final Set<Mutation> addResultMutations = makeWriteResultMutations(
+                        metadata.getVarOrders(), result);
+                writer.addMutations(addResultMutations);
+            }
+        } catch (TableNotFoundException | MutationsRejectedException e) {
+            throw new PcjException(
+                    "Could not add results to the PCJ table named: "
+                            + pcjTableName, e);
+        } finally {
+            if (writer != null) {
+                try {
+                    writer.close();
+                } catch (final MutationsRejectedException e) {
+                    throw new PcjException(
+                            "Could not add results to a PCJ table because some of the mutations were rejected.",
+                            e);
+                }
+            }
+        }
+    }
+
+    /**
+     * Create the {@link Mutations} required to write a new {@link BindingSet}
+     * to a PCJ table for each {@link VariableOrder} that is provided.
+     *
+     * @param varOrders
+     *            - The variables orders the result will be written to. (not
+     *            null)
+     * @param result
+     *            - A new PCJ result. (not null)
+     * @return Mutation that will write the result to a PCJ table.
+     * @throws PcjException
+     *             The binding set could not be encoded.
+     */
+    private static Set<Mutation> makeWriteResultMutations(
+            final Set<VariableOrder> varOrders, final BindingSet result)
+            throws PcjException {
+        checkNotNull(varOrders);
+        checkNotNull(result);
+
+        final Set<Mutation> mutations = new HashSet<>();
+
+        for (final VariableOrder varOrder : varOrders) {
+            try {
+                // Serialize the result to the variable order.
+                final byte[] serializedResult = converter.convert(result, varOrder);
+
+                // Row ID = binding set values, Column Family = variable order
+                // of the binding set.
+                final Mutation addResult = new Mutation(serializedResult);
+                addResult.put(varOrder.toString(), "", "");
+                mutations.add(addResult);
+            } catch (final BindingSetConversionException e) {
+                throw new PcjException("Could not serialize a result.", e);
+            }
+        }
+
+        return mutations;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/917e7a57/extras/indexing/src/test/java/mvm/rya/indexing/external/PrecompJoinOptimizerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/external/PrecompJoinOptimizerIntegrationTest.java b/extras/indexing/src/test/java/mvm/rya/indexing/external/PrecompJoinOptimizerIntegrationTest.java
index 3195d24..6fea2ba 100644
--- a/extras/indexing/src/test/java/mvm/rya/indexing/external/PrecompJoinOptimizerIntegrationTest.java
+++ b/extras/indexing/src/test/java/mvm/rya/indexing/external/PrecompJoinOptimizerIntegrationTest.java
@@ -1,5 +1,7 @@
 package mvm.rya.indexing.external;
 
+import java.net.UnknownHostException;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -20,21 +22,14 @@ package mvm.rya.indexing.external;
  */
 
 import java.util.List;
-import java.util.Map;
-
-import mvm.rya.api.persist.RyaDAOException;
-import mvm.rya.rdftriplestore.inference.InferenceEngineException;
 
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.Connector;
-import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.client.TableExistsException;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.client.mock.MockInstance;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
-import org.apache.accumulo.core.data.Key;
-import org.apache.accumulo.core.security.Authorizations;
 import org.apache.rya.indexing.pcj.storage.PcjException;
 import org.apache.rya.indexing.pcj.storage.accumulo.PcjVarOrderFactory;
 import org.junit.After;
@@ -60,6 +55,9 @@ import org.openrdf.sail.SailException;
 
 import com.google.common.base.Optional;
 
+import mvm.rya.api.persist.RyaDAOException;
+import mvm.rya.rdftriplestore.inference.InferenceEngineException;
+
 public class PrecompJoinOptimizerIntegrationTest {
 
 	private SailRepositoryConnection conn, pcjConn;
@@ -73,7 +71,8 @@ public class PrecompJoinOptimizerIntegrationTest {
 			TupleQueryResultHandlerException, QueryEvaluationException,
 			MalformedQueryException, AccumuloException,
 			AccumuloSecurityException, TableExistsException, RyaDAOException,
-			TableNotFoundException, InferenceEngineException {
+			TableNotFoundException, InferenceEngineException, NumberFormatException,
+			UnknownHostException {
 
 		repo = PcjIntegrationTestingUtil.getNonPcjRepo(tablePrefix, "instance");
 		conn = repo.getConnection();
@@ -119,8 +118,8 @@ public class PrecompJoinOptimizerIntegrationTest {
 			throws TupleQueryResultHandlerException, QueryEvaluationException,
 			MalformedQueryException, RepositoryException, AccumuloException,
 			AccumuloSecurityException, TableExistsException, RyaDAOException,
-			SailException, TableNotFoundException, PcjException,
-			InferenceEngineException {
+			SailException, TableNotFoundException, PcjException, InferenceEngineException,
+			NumberFormatException, UnknownHostException {
 
 		final String indexSparqlString = ""//
 				+ "SELECT ?e ?l ?c " //
@@ -129,9 +128,9 @@ public class PrecompJoinOptimizerIntegrationTest {
 				+ "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "//
 				+ "}";//
 
-		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon,
-				tablePrefix + "INDEX_1", indexSparqlString, new String[] { "e",
-						"l", "c" }, Optional.<PcjVarOrderFactory> absent());
+		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
+				+ "INDEX_1", indexSparqlString, new String[] { "e", "l", "c" },
+				Optional.<PcjVarOrderFactory> absent());
 		final String queryString = ""//
 				+ "SELECT ?e ?c ?l ?o " //
 				+ "{" //
@@ -147,8 +146,7 @@ public class PrecompJoinOptimizerIntegrationTest {
 		conn = repo.getConnection();
 		conn.add(sub, talksTo, obj);
 		conn.add(sub2, talksTo, obj2);
-		pcjConn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(
-				crh);
+		pcjConn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(crh);
 
 		Assert.assertEquals(2, crh.getCount());
 
@@ -187,13 +185,12 @@ public class PrecompJoinOptimizerIntegrationTest {
 				+ "  ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l "//
 				+ "}";//
 
-		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon,
-				tablePrefix + "INDEX_1", indexSparqlString, new String[] { "e",
-						"l", "c" }, Optional.<PcjVarOrderFactory> absent());
-		PcjIntegrationTestingUtil
-				.createAndPopulatePcj(conn, accCon, tablePrefix + "INDEX_2",
-						indexSparqlString2, new String[] { "e", "l", "o" },
-						Optional.<PcjVarOrderFactory> absent());
+		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
+				+ "INDEX_1", indexSparqlString, new String[] { "e", "l", "c" },
+				Optional.<PcjVarOrderFactory> absent());
+		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
+				+ "INDEX_2", indexSparqlString2, new String[] { "e", "l", "o" },
+				Optional.<PcjVarOrderFactory> absent());
 		final CountingResultHandler crh = new CountingResultHandler();
 		PcjIntegrationTestingUtil.deleteCoreRyaTables(accCon, tablePrefix);
 		pcjConn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(
@@ -208,8 +205,8 @@ public class PrecompJoinOptimizerIntegrationTest {
 			throws TupleQueryResultHandlerException, QueryEvaluationException,
 			MalformedQueryException, RepositoryException, AccumuloException,
 			AccumuloSecurityException, TableExistsException, RyaDAOException,
-			SailException, TableNotFoundException, PcjException,
-			InferenceEngineException {
+			SailException, TableNotFoundException, PcjException, InferenceEngineException,
+			NumberFormatException, UnknownHostException {
 
 		final String indexSparqlString = ""//
 				+ "SELECT ?e ?l ?c " //
@@ -219,9 +216,9 @@ public class PrecompJoinOptimizerIntegrationTest {
 				+ "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "//
 				+ "}";//
 
-		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon,
-				tablePrefix + "INDEX_1", indexSparqlString, new String[] { "e",
-						"l", "c" }, Optional.<PcjVarOrderFactory> absent());
+		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
+				+ "INDEX_1", indexSparqlString, new String[] { "e", "l", "c" },
+				Optional.<PcjVarOrderFactory> absent());
 		final String queryString = ""//
 				+ "SELECT ?e ?c ?l ?o " //
 				+ "{" //
@@ -250,8 +247,8 @@ public class PrecompJoinOptimizerIntegrationTest {
 			throws TupleQueryResultHandlerException, QueryEvaluationException,
 			MalformedQueryException, RepositoryException, AccumuloException,
 			AccumuloSecurityException, TableExistsException, RyaDAOException,
-			SailException, TableNotFoundException, PcjException,
-			InferenceEngineException {
+			SailException, TableNotFoundException, PcjException, InferenceEngineException,
+			NumberFormatException, UnknownHostException {
 
 		final String indexSparqlString2 = ""//
 				+ "SELECT ?e ?l ?c " //
@@ -261,10 +258,9 @@ public class PrecompJoinOptimizerIntegrationTest {
 				+ "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "//
 				+ "}";//
 
-		PcjIntegrationTestingUtil
-				.createAndPopulatePcj(conn, accCon, tablePrefix + "INDEX_2",
-						indexSparqlString2, new String[] { "e", "l", "c" },
-						Optional.<PcjVarOrderFactory> absent());
+		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
+				+ "INDEX_2", indexSparqlString2, new String[] { "e", "l", "c" },
+				Optional.<PcjVarOrderFactory> absent());
 
 		final String queryString = ""//
 				+ "SELECT ?e ?c ?o ?m ?l" //
@@ -294,8 +290,8 @@ public class PrecompJoinOptimizerIntegrationTest {
 			throws TupleQueryResultHandlerException, QueryEvaluationException,
 			MalformedQueryException, RepositoryException, AccumuloException,
 			AccumuloSecurityException, TableExistsException, RyaDAOException,
-			SailException, TableNotFoundException, PcjException,
-			InferenceEngineException {
+			SailException, TableNotFoundException, PcjException, InferenceEngineException,
+			NumberFormatException, UnknownHostException {
 
 		final String indexSparqlString1 = ""//
 				+ "SELECT ?e ?l ?c " //
@@ -310,10 +306,9 @@ public class PrecompJoinOptimizerIntegrationTest {
 		conn.add(sub3, RDF.TYPE, subclass3);
 		conn.add(sub3, RDFS.LABEL, new LiteralImpl("label3"));
 
-		PcjIntegrationTestingUtil
-				.createAndPopulatePcj(conn, accCon, tablePrefix + "INDEX_1",
-						indexSparqlString1, new String[] { "e", "l", "c" },
-						Optional.<PcjVarOrderFactory> absent());
+		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
+				+ "INDEX_1", indexSparqlString1, new String[] { "e", "l", "c" },
+				Optional.<PcjVarOrderFactory> absent());
 		final String queryString = ""//
 				+ "SELECT ?e ?c ?o ?m ?l" //
 				+ "{" //
@@ -337,101 +332,132 @@ public class PrecompJoinOptimizerIntegrationTest {
 
 	}
 
-
 	@Test
-	public void testMultipleLeftJoin() throws AccumuloException,
+	public void testEvaluateTwoIndexUnionFilter() throws AccumuloException,
 			AccumuloSecurityException, TableExistsException,
 			RepositoryException, MalformedQueryException, SailException,
 			QueryEvaluationException, TableNotFoundException,
-			TupleQueryResultHandlerException, RyaDAOException, PcjException,
-			InferenceEngineException {
+			TupleQueryResultHandlerException, RyaDAOException, PcjException, InferenceEngineException,
+			NumberFormatException, UnknownHostException {
 
-		final URI sub3 = new URIImpl("uri:entity3");
-		final URI obj3 = new URIImpl("uri:obj3");
-		final URI subclass3 = new URIImpl("uri:class3");
-		conn.add(sub3, RDF.TYPE, subclass3);
-		conn.add(sub3, talksTo, obj3);
 		conn.add(obj, RDFS.LABEL, new LiteralImpl("label"));
+		conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2"));
+		conn.add(sub, RDF.TYPE, obj);
+		conn.add(sub2, RDF.TYPE, obj2);
 
 		final String indexSparqlString = ""//
-				+ "SELECT ?e ?l ?c " //
+				+ "SELECT ?e ?l ?o " //
 				+ "{" //
-				+ "  ?e a ?c . "//
-				+ "  OPTIONAL {?e <http://www.w3.org/2000/01/rdf-schema#label> ?l} "//
+				+ "   Filter(?l = \"label2\") " //
+				+ "  ?e a ?o . "//
+				+ "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "//
 				+ "}";//
 
 		final String indexSparqlString2 = ""//
 				+ "SELECT ?e ?l ?o " //
 				+ "{" //
+				+ "   Filter(?l = \"label2\") " //
 				+ "  ?e <uri:talksTo> ?o . "//
-				+ "  OPTIONAL {?o <http://www.w3.org/2000/01/rdf-schema#label> ?l} "//
+				+ "  ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l "//
 				+ "}";//
 
 		final String queryString = ""//
-				+ "SELECT ?e ?l ?c ?o " //
+				+ "SELECT ?c ?e ?l ?o " //
 				+ "{" //
+				+ "   Filter(?l = \"label2\") " //
 				+ "  ?e a ?c . "//
-				+ "  OPTIONAL {?e <http://www.w3.org/2000/01/rdf-schema#label> ?l} "//
-				+ "  ?e <uri:talksTo> ?o . "//
-				+ "  OPTIONAL {?o <http://www.w3.org/2000/01/rdf-schema#label> ?l} "//
+				+ " { ?e a ?o .  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l  }"//
+				+ " UNION { ?e <uri:talksTo> ?o .  ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l  }"//
 				+ "}";//
 
-		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon,
-				tablePrefix + "INDEX_1", indexSparqlString, new String[] { "e",
-						"l", "c" }, Optional.<PcjVarOrderFactory> absent());
-		PcjIntegrationTestingUtil
-				.createAndPopulatePcj(conn, accCon, tablePrefix + "INDEX_2",
-						indexSparqlString2, new String[] { "e", "l", "o" },
-						Optional.<PcjVarOrderFactory> absent());
+		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
+				+ "INDEX_1", indexSparqlString, new String[] { "e", "l", "o" },
+				Optional.<PcjVarOrderFactory> absent());
+		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
+				+ "INDEX_2", indexSparqlString2, new String[] { "e", "l", "o" },
+				Optional.<PcjVarOrderFactory> absent());
 
 		PcjIntegrationTestingUtil.deleteCoreRyaTables(accCon, tablePrefix);
 		PcjIntegrationTestingUtil.closeAndShutdown(conn, repo);
 		repo = PcjIntegrationTestingUtil.getPcjRepo(tablePrefix, "instance");
 		conn = repo.getConnection();
+		conn.add(sub2, RDF.TYPE, subclass2);
+		conn.add(sub2, RDF.TYPE, obj2);
+		final CountingResultHandler crh = new CountingResultHandler();
+		pcjConn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(
+				crh);
 
-		Scanner scanner = accCon.createScanner(tablePrefix + "INDEX_2",
-				new Authorizations());
-		for (Map.Entry<Key, org.apache.accumulo.core.data.Value> e : scanner) {
-			System.out.println(e.getKey().getRow());
-		}
+		Assert.assertEquals(6, crh.getCount());
+
+	}
+
+	@Test
+	public void testEvaluateTwoIndexLeftJoinUnionFilter()
+			throws AccumuloException, AccumuloSecurityException,
+			TableExistsException, RepositoryException, MalformedQueryException,
+			SailException, QueryEvaluationException, TableNotFoundException,
+			TupleQueryResultHandlerException, RyaDAOException, PcjException, InferenceEngineException,
+			NumberFormatException, UnknownHostException {
+
+		conn.add(obj, RDFS.LABEL, new LiteralImpl("label"));
+		conn.add(obj2, RDFS.LABEL, new LiteralImpl("label2"));
+		conn.add(sub, RDF.TYPE, obj);
+		conn.add(sub2, RDF.TYPE, obj2);
+
+		final URI livesIn = new URIImpl("uri:livesIn");
+		final URI city = new URIImpl("uri:city");
+		final URI city2 = new URIImpl("uri:city2");
+		final URI city3 = new URIImpl("uri:city3");
+		conn.add(sub, livesIn, city);
+		conn.add(sub2, livesIn, city2);
+		conn.add(sub2, livesIn, city3);
+		conn.add(sub, livesIn, city3);
+
+		final String indexSparqlString = ""//
+				+ "SELECT ?e ?l ?o " //
+				+ "{" //
+				+ "  ?e a ?o . "//
+				+ "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l "//
+				+ "}";//
+
+		final String indexSparqlString2 = ""//
+				+ "SELECT ?e ?l ?o " //
+				+ "{" //
+				+ "  ?e <uri:talksTo> ?o . "//
+				+ "  ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l "//
+				+ "}";//
+
+		final String queryString = ""//
+				+ "SELECT ?c ?e ?l ?o " //
+				+ "{" //
+				+ " Filter(?c = <uri:city3>) " //
+				+ " ?e <uri:livesIn> ?c . "//
+				+ " OPTIONAL{{ ?e a ?o .  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l  }"//
+				+ " UNION { ?e <uri:talksTo> ?o .  ?o <http://www.w3.org/2000/01/rdf-schema#label> ?l  }}"//
+				+ "}";//
+
+		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
+				+ "INDEX_1", indexSparqlString, new String[] { "e", "l", "o" },
+				Optional.<PcjVarOrderFactory> absent());
+		PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon, tablePrefix
+				+ "INDEX_2", indexSparqlString2, new String[] { "e", "l", "o" },
+				Optional.<PcjVarOrderFactory> absent());
+
+		PcjIntegrationTestingUtil.deleteCoreRyaTables(accCon, tablePrefix);
+		PcjIntegrationTestingUtil.closeAndShutdown(conn, repo);
+		repo = PcjIntegrationTestingUtil.getPcjRepo(tablePrefix, "instance");
+		conn = repo.getConnection();
+		conn.add(sub2, livesIn, city3);
+		conn.add(sub, livesIn, city3);
 
 		final CountingResultHandler crh = new CountingResultHandler();
 		pcjConn.prepareTupleQuery(QueryLanguage.SPARQL, queryString).evaluate(
 				crh);
 
-		Assert.assertEquals(3, crh.getCount());
+		Assert.assertEquals(6, crh.getCount());
 
 	}
 
-	// @Test
-	// public void leftJoinExperiment() throws AccumuloException,
-	// AccumuloSecurityException, TableExistsException,
-	// RepositoryException, MalformedQueryException, SailException,
-	// QueryEvaluationException, TableNotFoundException,
-	// TupleQueryResultHandlerException, RyaDAOException, PcjException,
-	// InferenceEngineException {
-	//
-	// final String indexSparqlString = ""//
-	// + "SELECT ?e " //
-	// + "{" //
-	// + "  ?e a <uri:class> . "//
-	// +
-	// "  OPTIONAL {?e <http://www.w3.org/2000/01/rdf-schema#label> \"label2\"} "//
-	// + "}";//
-	//
-	//
-	// PcjIntegrationTestingUtil.createAndPopulatePcj(conn, accCon,
-	// tablePrefix + "INDEX_1", indexSparqlString, new String[] {"e"},
-	// Optional.<PcjVarOrderFactory> absent());
-	//
-	// Scanner scanner = accCon.createScanner(tablePrefix + "INDEX_1",
-	// new Authorizations());
-	// for (Map.Entry<Key, org.apache.accumulo.core.data.Value> e : scanner) {
-	// System.out.println(e.getKey().getRow());
-	// }
-	//
-	// }
-
 	public static class CountingResultHandler implements
 			TupleQueryResultHandler {
 		private int count = 0;
@@ -441,16 +467,16 @@ public class PrecompJoinOptimizerIntegrationTest {
 		}
 
 		public void resetCount() {
-			this.count = 0;
+			count = 0;
 		}
 
 		@Override
-		public void startQueryResult(List<String> arg0)
+		public void startQueryResult(final List<String> arg0)
 				throws TupleQueryResultHandlerException {
 		}
 
 		@Override
-		public void handleSolution(BindingSet arg0)
+		public void handleSolution(final BindingSet arg0)
 				throws TupleQueryResultHandlerException {
 			System.out.println(arg0);
 			count++;
@@ -462,14 +488,14 @@ public class PrecompJoinOptimizerIntegrationTest {
 		}
 
 		@Override
-		public void handleBoolean(boolean arg0)
+		public void handleBoolean(final boolean arg0)
 				throws QueryResultHandlerException {
 			// TODO Auto-generated method stub
 
 		}
 
 		@Override
-		public void handleLinks(List<String> arg0)
+		public void handleLinks(final List<String> arg0)
 				throws QueryResultHandlerException {
 			// TODO Auto-generated method stub