You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by sa...@apache.org on 2012/05/18 03:43:01 UTC

svn commit: r1339948 - in /jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena: query/QueryExecution.java sparql/engine/QueryExecutionBase.java sparql/engine/http/QueryEngineHTTP.java

Author: sallen
Date: Fri May 18 01:43:01 2012
New Revision: 1339948

URL: http://svn.apache.org/viewvc?rev=1339948&view=rev
Log:
Added execDescribeTriples() to QueryExecution for streaming DESCRIBE queries.

Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/QueryExecution.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/QueryExecutionBase.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/QueryEngineHTTP.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/QueryExecution.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/QueryExecution.java?rev=1339948&r1=1339947&r2=1339948&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/QueryExecution.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/QueryExecution.java Fri May 18 01:43:01 2012
@@ -93,9 +93,18 @@ public interface QueryExecution
     public Model execDescribe();
 
     /** Execute a DESCRIBE query, putting the statements into 'model'.
-     *  @return Model The model argument for casaded code.
+     *  @return Model The model argument for cascaded code.
      */
     public Model execDescribe(Model model);
+    
+    /**
+     * Execute a DESCRIBE query, returning the results as an iterator of {@link Triple}.
+     * <b>Caution:</b> This method may return duplicate Triples.  This method may be useful if you only
+     * need the results for stream processing, as it can avoid having to place the results in a Model.
+     * 
+     * @return An iterator of Triple objects (possibly containing duplicates) generated as the output of the DESCRIBE query.
+     */
+    public Iterator<Triple> execDescribeTriples();
 
     /** Execute an ASK query */
     public boolean execAsk();

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/QueryExecutionBase.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/QueryExecutionBase.java?rev=1339948&r1=1339947&r2=1339948&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/QueryExecutionBase.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/QueryExecutionBase.java Fri May 18 01:43:01 2012
@@ -24,8 +24,12 @@ import java.util.List ;
 import java.util.Set ;
 import java.util.concurrent.TimeUnit ;
 
+import org.openjena.atlas.iterator.Iter ;
+import org.openjena.atlas.iterator.IteratorResourceClosing ;
+import org.openjena.atlas.iterator.Transform ;
 import org.openjena.atlas.lib.AlarmClock ;
 import org.openjena.atlas.lib.Callback ;
+import org.openjena.atlas.lib.Closeable ;
 import org.openjena.atlas.lib.Pingback ;
 import org.openjena.atlas.logging.Log ;
 
@@ -44,6 +48,7 @@ import com.hp.hpl.jena.rdf.model.ModelFa
 import com.hp.hpl.jena.rdf.model.RDFNode ;
 import com.hp.hpl.jena.rdf.model.Resource ;
 import com.hp.hpl.jena.rdf.model.Statement ;
+import com.hp.hpl.jena.rdf.model.StmtIterator ;
 import com.hp.hpl.jena.shared.PrefixMapping ;
 import com.hp.hpl.jena.sparql.ARQConstants ;
 import com.hp.hpl.jena.sparql.core.DatasetGraph ;
@@ -351,6 +356,32 @@ public class QueryExecutionBase implemen
         this.close() ;
         return model ; 
     }
+    
+    // TODO not memory efficient
+    @Override
+    public Iterator<Triple> execDescribeTriples()
+    {
+        Model model = execDescribe() ;
+        
+        // TODO Is this the best way to get an Iterator<Triple> out of a model?
+        final StmtIterator it = model.listStatements() ;
+        return new IteratorResourceClosing<Triple>(Iter.map(it, new Transform<Statement, Triple>()
+        {
+            @Override
+            public Triple convert(Statement item)
+            {
+                return item.asTriple() ;
+            }
+        }),
+        new Closeable()
+        {
+            @Override
+            public void close()
+            {
+                it.close() ;
+            }
+        });
+    }
 
     @Override
     public boolean execAsk()

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/QueryEngineHTTP.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/QueryEngineHTTP.java?rev=1339948&r1=1339947&r2=1339948&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/QueryEngineHTTP.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/http/QueryEngineHTTP.java Fri May 18 01:43:01 2012
@@ -243,16 +243,22 @@ public class QueryEngineHTTP implements 
     }
 
     @Override
-    public Model execConstruct()             { return execConstruct(GraphFactory.makeJenaDefaultModel()) ; }
+    public Model execConstruct()                   { return execConstruct(GraphFactory.makeJenaDefaultModel()) ; }
     
     @Override
-    public Model execConstruct(Model model)  { return execModel(model) ; }
+    public Model execConstruct(Model model)        { return execModel(model) ; }
+    
+    @Override
+    public Iterator<Triple> execConstructTriples() { return execTriples() ; }
 
     @Override
-    public Model execDescribe()              { return execDescribe(GraphFactory.makeJenaDefaultModel()) ; }
+    public Model execDescribe()                    { return execDescribe(GraphFactory.makeJenaDefaultModel()) ; }
     
     @Override
-    public Model execDescribe(Model model)   { return execModel(model) ; }
+    public Model execDescribe(Model model)         { return execModel(model) ; }
+    
+    @Override
+    public Iterator<Triple> execDescribeTriples()  { return execTriples() ; }
 
     private Model execModel(Model model)
     {
@@ -278,8 +284,7 @@ public class QueryEngineHTTP implements 
         return model ;
     }
     
-    @Override
-    public Iterator<Triple> execConstructTriples()
+    private Iterator<Triple> execTriples()
     {
         HttpQuery httpQuery = makeHttpQuery() ;
         httpQuery.setAccept(modelContentType) ;