use of org.openrdf.query.algebra.QueryModelNode in project incubator-rya by apache.
the class PCJNodeConsolidatorTest method testExactMatchReOrdered.
@Test
public void testExactMatchReOrdered() throws Exception {
String query1 = //
"" + //
"SELECT ?a ?b ?c ?d ?e ?f ?g ?h" + //
"{" + //
" ?a <uri:p0> ?b ." + //
" OPTIONAL{?b <uri:p2> ?c. ?c <uri:p1> ?d} . " + //
" OPTIONAL{?b <uri:p3> ?e. ?e <uri:p1> ?f} . " + //
" OPTIONAL{?b <uri:p4> ?g. ?g <uri:p1> ?h} . " + //
"}";
String query2 = //
"" + //
"SELECT ?a ?b ?c ?d ?e ?f ?g ?h" + //
"{" + //
" ?a <uri:p0> ?b ." + //
" OPTIONAL{?b <uri:p2> ?c. ?c <uri:p1> ?d} . " + //
" OPTIONAL{?b <uri:p4> ?g. ?g <uri:p1> ?h} . " + //
" OPTIONAL{?b <uri:p3> ?e. ?e <uri:p1> ?f} . " + //
"}";
SPARQLParser parser = new SPARQLParser();
ParsedQuery pq1 = parser.parseQuery(query1, null);
ParsedQuery pq2 = parser.parseQuery(query2, null);
TupleExpr te1 = pq1.getTupleExpr();
TupleExpr te2 = pq2.getTupleExpr();
LeftJoin join1 = (LeftJoin) ((Projection) te1).getArg();
LeftJoin join2 = (LeftJoin) ((Projection) te2).getArg();
QuerySegment<ExternalTupleSet> seg1 = qFactory.getQuerySegment(join1);
QuerySegment<ExternalTupleSet> seg2 = qFactory.getQuerySegment(join2);
QueryNodeConsolidator consolidator = new QueryNodeConsolidator(seg1.getOrderedNodes(), seg2.getOrderedNodes());
List<QueryModelNode> queryNodes = new ArrayList<>(seg2.getOrderedNodes());
Assert.assertTrue(consolidator.consolidateNodes());
Assert.assertEquals(consolidator.getQueryNodes(), queryNodes);
}
use of org.openrdf.query.algebra.QueryModelNode in project incubator-rya by apache.
the class PCJNodeConsolidatorTest method testExactMatchLargeReOrdered.
@Test
public void testExactMatchLargeReOrdered() throws Exception {
String query1 = //
"" + //
"SELECT ?a ?b ?c ?d ?e ?f ?g ?h" + //
"{" + //
" ?a <uri:p0> ?b ." + //
" OPTIONAL{?b <uri:p2> ?c. ?c <uri:p1> ?d} . " + //
" OPTIONAL{?b <uri:p3> ?e. ?e <uri:p1> ?f} . " + //
" OPTIONAL{?b <uri:p4> ?g. ?g <uri:p1> ?h} . " + //
" OPTIONAL{?b <uri:p4> ?i. ?i <uri:p1> ?j} . " + //
" OPTIONAL{?b <uri:p4> ?k. ?k <uri:p1> ?l} . " + //
" OPTIONAL{?b <uri:p4> ?m. ?m <uri:p1> ?n} . " + //
" OPTIONAL{?b <uri:p4> ?o. ?o <uri:p1> ?p} . " + //
"}";
String query2 = //
"" + //
"SELECT ?a ?b ?c ?d ?e ?f ?g ?h" + //
"{" + //
" ?a <uri:p0> ?b ." + //
" OPTIONAL{?b <uri:p4> ?o. ?o <uri:p1> ?p} . " + //
" OPTIONAL{?b <uri:p4> ?g. ?g <uri:p1> ?h} . " + //
" OPTIONAL{?b <uri:p2> ?c. ?c <uri:p1> ?d} . " + //
" OPTIONAL{?b <uri:p4> ?i. ?i <uri:p1> ?j} . " + //
" OPTIONAL{?b <uri:p4> ?m. ?m <uri:p1> ?n} . " + //
" OPTIONAL{?b <uri:p4> ?k. ?k <uri:p1> ?l} . " + //
" OPTIONAL{?b <uri:p3> ?e. ?e <uri:p1> ?f} . " + //
"}";
SPARQLParser parser = new SPARQLParser();
ParsedQuery pq1 = parser.parseQuery(query1, null);
ParsedQuery pq2 = parser.parseQuery(query2, null);
TupleExpr te1 = pq1.getTupleExpr();
TupleExpr te2 = pq2.getTupleExpr();
LeftJoin join1 = (LeftJoin) ((Projection) te1).getArg();
LeftJoin join2 = (LeftJoin) ((Projection) te2).getArg();
QuerySegment<ExternalTupleSet> seg1 = qFactory.getQuerySegment(join1);
QuerySegment<ExternalTupleSet> seg2 = qFactory.getQuerySegment(join2);
QueryNodeConsolidator consolidator = new QueryNodeConsolidator(seg1.getOrderedNodes(), seg2.getOrderedNodes());
List<QueryModelNode> queryNodes = new ArrayList<>(seg2.getOrderedNodes());
Assert.assertTrue(consolidator.consolidateNodes());
Assert.assertEquals(consolidator.getQueryNodes(), queryNodes);
}
use of org.openrdf.query.algebra.QueryModelNode in project incubator-rya by apache.
the class PCJNodeConsolidatorTest method testBasicOptionalWithFilter.
@Test
public void testBasicOptionalWithFilter() throws Exception {
String query1 = //
"" + //
"SELECT ?e ?c ?l" + //
"{" + //
" Filter(?e = <uri:Bob>)" + //
" ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . " + //
" OPTIONAL{?e <uri:talksTo> ?l } . " + //
" OPTIONAL{?c <uri:worksAt> <uri:Apple>} . " + //
" ?e a ?c . " + " ?e <uri:livesIn> <uri:Virginia>" + //
"}";
String query2 = //
"" + //
"SELECT ?e ?c ?l" + //
"{" + //
" Filter(?e = <uri:Bob>)" + //
" ?e a ?c . " + //
" OPTIONAL{?e <uri:talksTo> ?l } . " + //
"}";
SPARQLParser parser = new SPARQLParser();
ParsedQuery pq1 = parser.parseQuery(query1, null);
ParsedQuery pq2 = parser.parseQuery(query2, null);
TupleExpr te1 = pq1.getTupleExpr();
TupleExpr te2 = pq2.getTupleExpr();
TopOfQueryFilterRelocator.moveFiltersToTop(te1);
TopOfQueryFilterRelocator.moveFiltersToTop(te2);
Filter filter1 = (Filter) ((Projection) te1).getArg();
Filter filter2 = (Filter) ((Projection) te2).getArg();
QuerySegment<ExternalTupleSet> seg1 = qFactory.getQuerySegment(filter1);
QuerySegment<ExternalTupleSet> seg2 = qFactory.getQuerySegment(filter2);
QueryNodeConsolidator consolidator = new QueryNodeConsolidator(seg1.getOrderedNodes(), seg2.getOrderedNodes());
List<QueryModelNode> queryNodes = new ArrayList<>(seg1.getOrderedNodes());
QueryModelNode node = queryNodes.remove(0);
queryNodes.add(1, node);
node = queryNodes.remove(4);
queryNodes.add(2, node);
Assert.assertTrue(consolidator.consolidateNodes());
Assert.assertEquals(consolidator.getQueryNodes(), queryNodes);
}
use of org.openrdf.query.algebra.QueryModelNode in project incubator-rya by apache.
the class ThreshholdPlanSelectorTest method testSingleIndex.
@Test
public void testSingleIndex() throws Exception {
SPARQLParser parser = new SPARQLParser();
ParsedQuery pq1 = parser.parseQuery(q15, null);
ParsedQuery pq2 = parser.parseQuery(q7, null);
ParsedQuery pq3 = parser.parseQuery(q8, null);
ParsedQuery pq4 = parser.parseQuery(q9, null);
SimpleExternalTupleSet extTup1 = new SimpleExternalTupleSet((Projection) pq2.getTupleExpr());
SimpleExternalTupleSet extTup2 = new SimpleExternalTupleSet((Projection) pq3.getTupleExpr());
SimpleExternalTupleSet extTup3 = new SimpleExternalTupleSet((Projection) pq4.getTupleExpr());
List<ExternalTupleSet> list = new ArrayList<ExternalTupleSet>();
list.add(extTup1);
List<QueryModelNode> optTupNodes = Lists.newArrayList();
optTupNodes.add(extTup2);
optTupNodes.add(extTup3);
IndexedExecutionPlanGenerator iep = new IndexedExecutionPlanGenerator(pq1.getTupleExpr(), list);
Iterator<TupleExpr> plans = new TupleExecutionPlanGenerator().getPlans(iep.getIndexedTuples());
IndexPlanValidator ipv = new IndexPlanValidator(false);
Iterator<TupleExpr> validPlans = ipv.getValidTuples(plans);
ThreshholdPlanSelector tps = new ThreshholdPlanSelector(pq1.getTupleExpr());
TupleExpr optimalTup = tps.getThreshholdQueryPlan(validPlans, .1, 1, 0, 0);
NodeCollector nc = new NodeCollector();
optimalTup.visit(nc);
List<QueryModelNode> qNodes = nc.getNodes();
Assert.assertEquals(qNodes.size(), optTupNodes.size());
for (QueryModelNode node : qNodes) {
Assert.assertTrue(optTupNodes.contains(node));
}
}
use of org.openrdf.query.algebra.QueryModelNode in project incubator-rya by apache.
the class ThreshholdPlanSelectorTest method testSingleIndex2.
@Test
public void testSingleIndex2() throws Exception {
String q1 = //
"" + //
"SELECT ?f ?m ?d ?e ?l ?c " + //
"{" + //
" ?f a ?m ." + //
" ?c a ?l ." + //
" ?d <uri:talksTo> ?f . " + //
" ?e <uri:talksTo> ?c . " + //
" ?m <http://www.w3.org/2000/01/rdf-schema#label> ?d ." + //
" ?l <http://www.w3.org/2000/01/rdf-schema#label> ?e ." + //
" ?m <uri:talksTo> ?e . " + //
"}";
String q2 = //
"" + //
"SELECT ?u ?s ?t " + //
"{" + //
" ?s a ?t ." + //
" ?t <http://www.w3.org/2000/01/rdf-schema#label> ?u ." + //
" ?u <uri:talksTo> ?s . " + //
"}";
String q3 = //
"" + //
"SELECT ?e ?c ?l " + //
"{" + //
" ?c a ?l ." + //
" ?l <http://www.w3.org/2000/01/rdf-schema#label> ?e ." + //
" ?e <uri:talksTo> ?c . " + //
"}";
String q4 = //
"" + //
"SELECT ?d ?f ?m " + //
"{" + //
" ?f a ?m ." + //
" ?m <http://www.w3.org/2000/01/rdf-schema#label> ?d ." + //
" ?d <uri:talksTo> ?f . " + //
"}";
SPARQLParser parser = new SPARQLParser();
ParsedQuery pq1 = parser.parseQuery(q1, null);
ParsedQuery pq2 = parser.parseQuery(q2, null);
ParsedQuery pq3 = parser.parseQuery(q3, null);
ParsedQuery pq4 = parser.parseQuery(q4, null);
SimpleExternalTupleSet extTup1 = new SimpleExternalTupleSet((Projection) pq2.getTupleExpr());
SimpleExternalTupleSet extTup2 = new SimpleExternalTupleSet((Projection) pq3.getTupleExpr());
SimpleExternalTupleSet extTup3 = new SimpleExternalTupleSet((Projection) pq4.getTupleExpr());
List<ExternalTupleSet> list = new ArrayList<ExternalTupleSet>();
list.add(extTup1);
List<StatementPattern> spList = StatementPatternCollector.process(pq1.getTupleExpr());
List<QueryModelNode> optTupNodes = Lists.newArrayList();
optTupNodes.add(extTup3);
optTupNodes.add(spList.get(6));
optTupNodes.add(extTup2);
IndexedExecutionPlanGenerator iep = new IndexedExecutionPlanGenerator(pq1.getTupleExpr(), list);
Iterator<TupleExpr> plans = new TupleExecutionPlanGenerator().getPlans(iep.getIndexedTuples());
IndexPlanValidator ipv = new IndexPlanValidator(true);
Iterator<TupleExpr> validPlans = ipv.getValidTuples(plans);
ThreshholdPlanSelector tps = new ThreshholdPlanSelector(pq1.getTupleExpr());
TupleExpr optimalTup = tps.getThreshholdQueryPlan(validPlans, .4, .7, .1, .2);
NodeCollector nc = new NodeCollector();
optimalTup.visit(nc);
List<QueryModelNode> qNodes = nc.getNodes();
Assert.assertTrue(qNodes.equals(optTupNodes));
}
Aggregations