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);
-    }
-    
+    }    
 }