You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by rv...@apache.org on 2012/12/08 00:22:47 UTC
svn commit: r1418554 - in /jena/trunk/jena-arq/src:
main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java
test/java/com/hp/hpl/jena/sparql/algebra/OpAsQueryTest.java
test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java
Author: rvesse
Date: Fri Dec 7 23:22:46 2012
New Revision: 1418554
URL: http://svn.apache.org/viewvc?rev=1418554&view=rev
Log:
Improve OpAsQuery to have limited capability to deal with OpQuadPattern, tweaked output for OpGraph to match what the query parser generates
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/OpAsQueryTest.java
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java?rev=1418554&r1=1418553&r2=1418554&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java Fri Dec 7 23:22:46 2012
@@ -30,12 +30,14 @@ import com.hp.hpl.jena.sparql.ARQInterna
import com.hp.hpl.jena.sparql.ARQNotImplemented ;
import com.hp.hpl.jena.sparql.algebra.op.* ;
import com.hp.hpl.jena.sparql.core.BasicPattern ;
+import com.hp.hpl.jena.sparql.core.Quad;
import com.hp.hpl.jena.sparql.core.Var ;
import com.hp.hpl.jena.sparql.core.VarExprList ;
import com.hp.hpl.jena.sparql.engine.QueryIterator ;
import com.hp.hpl.jena.sparql.expr.* ;
import com.hp.hpl.jena.sparql.pfunction.PropFuncArg ;
import com.hp.hpl.jena.sparql.syntax.* ;
+import com.hp.hpl.jena.sparql.util.DatasetUtils;
import com.hp.hpl.jena.sparql.util.graph.GraphList ;
import com.hp.hpl.jena.vocabulary.RDF ;
@@ -218,7 +220,26 @@ public class OpAsQuery
@Override
public void visit(OpQuadPattern quadPattern)
- { throw new ARQNotImplemented("OpQuadPattern") ; }
+ {
+ Node graphNode = quadPattern.getGraphNode();
+ if (graphNode.equals(Quad.defaultGraphNodeGenerated)) {
+ currentGroup().addElement(process(quadPattern.getBasicPattern())) ;
+ } else {
+ startSubGroup();
+ Element e = asElement(new OpBGP(quadPattern.getBasicPattern())) ;
+ endSubGroup();
+
+ //If not element group make it one
+ if (!(e instanceof ElementGroup)) {
+ ElementGroup g = new ElementGroup();
+ g.addElement(e);
+ e = g;
+ }
+
+ Element graphElt = new ElementNamedGraph(graphNode, e) ;
+ currentGroup().addElement(graphElt) ;
+ }
+ }
@Override
public void visit(OpPath opPath)
@@ -331,7 +352,14 @@ public class OpAsQuery
{
startSubGroup() ;
Element e = asElement(opGraph.getSubOp()) ;
- ElementGroup g = endSubGroup() ;
+ endSubGroup() ;
+
+ //If not element group make it one
+ if (!(e instanceof ElementGroup)) {
+ ElementGroup g = new ElementGroup();
+ g.addElement(e);
+ e = g;
+ }
Element graphElt = new ElementNamedGraph(opGraph.getNode(), e) ;
currentGroup().addElement(graphElt) ;
Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/OpAsQueryTest.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/OpAsQueryTest.java?rev=1418554&r1=1418553&r2=1418554&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/OpAsQueryTest.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/OpAsQueryTest.java Fri Dec 7 23:22:46 2012
@@ -25,8 +25,7 @@ import org.junit.Test;
import static org.junit.Assert.*;
/**
- *
- * @author Damian Steer <d....@bris.ac.uk>
+ * Tests for {@link OpAsQuery}
*/
public class OpAsQueryTest {
@@ -103,6 +102,44 @@ public class OpAsQueryTest {
assertEquals(result[0], result[1]);
}
+ @Test
+ public void testQuadPatternInDefaultGraph() {
+ Object[] result = checkQuadQuery("SELECT * WHERE { ?s a ?type }");
+ assertEquals(result[0], result[1]);
+ }
+
+ @Test
+ public void testGraphClauseUri() {
+ Object[] result = checkQuery("SELECT * WHERE { GRAPH <http://example> { ?s a ?type } }");
+ assertEquals(result[0], result[1]);
+ }
+
+ @Test
+ public void testGraphClauseComplex() {
+ Object[] result = checkQuery("SELECT * WHERE { GRAPH <http://example> { ?s a ?type . OPTIONAL { ?s <http://label> ?label } } }");
+ assertEquals(result[0], result[1]);
+ }
+
+ @Test
+ public void testQuadPatternInGraph() {
+ Object[] result = checkQuadQuery("SELECT * WHERE { GRAPH <http://example> { ?s a ?type } }");
+ assertEquals(result[0], result[1]);
+ }
+
+ @Test
+ public void testQuadPatternInGraphComplex01() {
+ //This fails because OpQuadPattern's are converted back to individual GRAPH clauses
+ Object[] result = checkQuadQuery("SELECT * WHERE { GRAPH <http://example> { ?s a ?type . OPTIONAL { ?s <http://label> ?label } } }");
+ assertFalse(result[0].equals(result[1]));
+ }
+
+ @Test
+ public void testQuadPatternInGraphComplex02() {
+ //This succeeds since each OpQuadPattern is from a single simple GRAPH clause
+ Object[] result = checkQuadQuery("SELECT * WHERE { GRAPH <http://example> { ?s a ?type } OPTIONAL { GRAPH <http://example> { ?s <http://label> ?label } } }");
+ assertEquals(result[0], result[1]);
+ }
+
public Object[] checkQuery(String query) {
Query orig = QueryFactory.create(query, Syntax.syntaxSPARQL_11);
Op toReconstruct = Algebra.compile(orig);
@@ -110,4 +147,13 @@ public class OpAsQueryTest {
Object[] r = { orig, got };
return r;
}
+
+ public Object[] checkQuadQuery(String query) {
+ Query orig = QueryFactory.create(query, Syntax.syntaxSPARQL_11);
+ Op toReconstruct = Algebra.compile(orig);
+ toReconstruct = Algebra.toQuadForm(toReconstruct);
+ Query got = OpAsQuery.asQuery(toReconstruct);
+ Object[] r = { orig, got };
+ return r;
+ }
}
Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java?rev=1418554&r1=1418553&r2=1418554&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java Fri Dec 7 23:22:46 2012
@@ -338,7 +338,7 @@ public class TestResultSetFormat2
parseTSVAsBoolean(x, false);
}
- public void parseTSV(String x)
+ private void parseTSV(String x)
{
byte[] b = StrUtils.asUTF8bytes(x) ;
ByteArrayInputStream in = new ByteArrayInputStream(b) ;
@@ -350,13 +350,12 @@ public class TestResultSetFormat2
}
}
- public void parseTSVAsBoolean(String x, boolean expected)
+ private void parseTSVAsBoolean(String x, boolean expected)
{
byte[] b = StrUtils.asUTF8bytes(x);
ByteArrayInputStream in = new ByteArrayInputStream(b);
boolean actual = TSVInput.booleanFromTSV(in);
Assert.assertEquals(expected, actual);
- }
-
+ }
}