You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2016/11/09 14:06:05 UTC

[1/4] jena git commit: JENA-1215: Provide ResultSetCloseable.

Repository: jena
Updated Branches:
  refs/heads/master 506ce2e5d -> 874c3be16


JENA-1215: Provide ResultSetCloseable.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/7605abd8
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/7605abd8
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/7605abd8

Branch: refs/heads/master
Commit: 7605abd8343b6480cd5c699d87b3cbc3220833bf
Parents: f27f393
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Nov 8 11:32:09 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Nov 8 11:32:09 2016 +0000

----------------------------------------------------------------------
 .../apache/jena/query/ResultSetCloseable.java   | 54 ++++++++++++++++++++
 .../org/apache/jena/query/ResultSetFactory.java | 18 +++++++
 .../org/apache/jena/sparql/api/TestAPI.java     | 49 ++++++++++++------
 3 files changed, 106 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/7605abd8/jena-arq/src/main/java/org/apache/jena/query/ResultSetCloseable.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/ResultSetCloseable.java b/jena-arq/src/main/java/org/apache/jena/query/ResultSetCloseable.java
new file mode 100644
index 0000000..62bec82
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/query/ResultSetCloseable.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * 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 KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.query;
+
+import java.io.Closeable ;
+
+import org.apache.jena.query.QueryExecution ;
+import org.apache.jena.query.ResultSet ;
+import org.apache.jena.sparql.engine.ResultSetWrapper ;
+
+/** A {@link ResultSet} that closes the associated {@link QueryExecution} 
+ * via {@link AutoCloseable}.
+ */  
+public class ResultSetCloseable extends ResultSetWrapper implements AutoCloseable, Closeable {
+
+    /** Return a closable resultset for a {@link QueryExecution}.
+     * The {@link QueryExecution} must be for a {@code SELECT} query.
+     * @param queryExecution {@code QueryExecution} must be for a {@code SELECT} query.
+     * @return ResultSetCloseable
+     */
+    public static ResultSetCloseable closeableResultSet(QueryExecution queryExecution) {
+        if ( ! queryExecution.getQuery().isSelectType() )
+            throw new IllegalArgumentException("Not an execution for a SELECT query");
+        return new ResultSetCloseable(queryExecution.execSelect(), queryExecution) ;
+    }
+    
+    private QueryExecution qexec ;
+
+    public ResultSetCloseable(ResultSet rs, QueryExecution qexec) {
+        super(rs) ;
+        this.qexec = qexec ;
+    }
+
+    @Override
+    public void close() {
+        qexec.close() ;
+    }
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/7605abd8/jena-arq/src/main/java/org/apache/jena/query/ResultSetFactory.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/ResultSetFactory.java b/jena-arq/src/main/java/org/apache/jena/query/ResultSetFactory.java
index f7d5231..c588f1b 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/ResultSetFactory.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/ResultSetFactory.java
@@ -424,6 +424,24 @@ public class ResultSetFactory {
     static public ResultSetPeekable makePeekable(ResultSet resultSet) {
         return new ResultSetPeeking(resultSet);
     }
+    
+    /** Return a closable resultset for a {@link QueryExecution}.
+     * The {@link QueryExecution} must be for a {@code SELECT} query.
+     * <p>
+     * Example:
+     * <pre>
+     *   QueryExecution qExec = QueryExecutionFactory.create(...);
+     *   try (ResultSetCloseable rs = ResultSetFactory.closableResultSet(qExec) ) {
+     *       ...
+     * }
+     * </pre>
+     * 
+     * @param queryExecution {@code QueryExecution} must be for a {@code SELECT} query.
+     * @return ResultSetCloseable
+     */
+    public static ResultSetCloseable closeableResultSet(QueryExecution queryExecution) {
+        return ResultSetCloseable.closeableResultSet(queryExecution);
+    }
 
     /**
      * Take a copy of a result set - the result set returns is an in-memory

http://git-wip-us.apache.org/repos/asf/jena/blob/7605abd8/jena-arq/src/test/java/org/apache/jena/sparql/api/TestAPI.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/api/TestAPI.java b/jena-arq/src/test/java/org/apache/jena/sparql/api/TestAPI.java
index c25a28f..dbc9bf3 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/api/TestAPI.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/api/TestAPI.java
@@ -548,26 +548,45 @@ public class TestAPI extends BaseTest
         fail("Short form of construct quad MUST be simple graph patterns!");
     }
     
+    @Test public void testResultSetCloseableGood() {
+        String queryString = "SELECT * { ?s ?p ?o. }";
+        Query q = QueryFactory.create(queryString);
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        try (ResultSetCloseable rs = ResultSetFactory.closeableResultSet(qExec) ) {
+            int x = ResultSetFormatter.consume(rs);
+            assertEquals(1,x);
+        }
+    }
     
-    private QueryExecution makeQExec(String queryString)
-    {
-        Query q = QueryFactory.create(queryString) ;
-        QueryExecution qExec = QueryExecutionFactory.create(q, m) ;
-        return qExec ;
+    @Test(expected=IllegalArgumentException.class) 
+    public void testResultSetCloseableBad() {
+        String queryString = "ASK { ?s ?p ?o. }";
+        Query q = QueryFactory.create(queryString);
+        QueryExecution qExec = QueryExecutionFactory.create(q, d);
+        try (ResultSetCloseable rs = ResultSetFactory.closeableResultSet(qExec) ) {
+            int x = ResultSetFormatter.consume(rs);
+            assertEquals(1,x);
+        }
     }
 
-    private int queryAndCount(String queryString)
-    {
-        QueryExecution qExec = makeQExec(queryString) ;
-        return queryAndCount(qExec) ;
+    private QueryExecution makeQExec(String queryString) {
+        Query q = QueryFactory.create(queryString);
+        QueryExecution qExec = QueryExecutionFactory.create(q, m);
+        return qExec;
     }
 
-    
-    private int queryAndCount(QueryExecution qExec)
-    {
+    private int queryAndCount(String queryString) {
+        QueryExecution qExec = makeQExec(queryString);
+        return queryAndCount(qExec);
+    }
+
+    private int queryAndCount(QueryExecution qExec) {
         try {
-            ResultSet rs = qExec.execSelect() ;
-            return ResultSetFormatter.consume(rs) ;
-        } finally { qExec.close() ; }
+            ResultSet rs = qExec.execSelect();
+            return ResultSetFormatter.consume(rs);
+        }
+        finally {
+            qExec.close();
+        }
     }
 }


[4/4] jena git commit: JENA-1258: Merge commit 'refs/pull/192/head' of github.com:apache/jena

Posted by an...@apache.org.
JENA-1258: Merge commit 'refs/pull/192/head' of github.com:apache/jena

This closes #192.
This closes #189.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/874c3be1
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/874c3be1
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/874c3be1

Branch: refs/heads/master
Commit: 874c3be16cd492739f9a49386c484c9acd02b3c0
Parents: 7bf4d21 782d214
Author: Andy Seaborne <an...@apache.org>
Authored: Wed Nov 9 14:05:01 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Wed Nov 9 14:05:01 2016 +0000

----------------------------------------------------------------------
 .../main/java/org/apache/jena/query/ARQ.java    |  4 ++++
 .../org/apache/jena/sparql/ARQConstants.java    | 25 +++++++++++---------
 .../java/org/apache/jena/sparql/SystemARQ.java  |  3 ++-
 .../main/java/org/apache/jena/graph/Node.java   |  5 +++-
 .../java/org/apache/jena/graph/NodeFactory.java |  3 +++
 5 files changed, 27 insertions(+), 13 deletions(-)
----------------------------------------------------------------------



[3/4] jena git commit: JENA-1215: Merge commit 'refs/pull/190/head' of github.com:apache/jena

Posted by an...@apache.org.
JENA-1215: Merge commit 'refs/pull/190/head' of github.com:apache/jena

This closes #190.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/7bf4d214
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/7bf4d214
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/7bf4d214

Branch: refs/heads/master
Commit: 7bf4d21494e434ad543fac292b266f4182c25a0d
Parents: 506ce2e 7605abd
Author: Andy Seaborne <an...@apache.org>
Authored: Wed Nov 9 14:03:00 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Wed Nov 9 14:03:00 2016 +0000

----------------------------------------------------------------------
 .../apache/jena/query/ResultSetCloseable.java   | 54 ++++++++++++++++++++
 .../org/apache/jena/query/ResultSetFactory.java | 18 +++++++
 .../org/apache/jena/sparql/api/TestAPI.java     | 49 ++++++++++++------
 3 files changed, 106 insertions(+), 15 deletions(-)
----------------------------------------------------------------------



[2/4] jena git commit: JENA-1258: System init in NodeFactory. Make ARQConstants init-safe.

Posted by an...@apache.org.
JENA-1258: System init in NodeFactory. Make ARQConstants init-safe.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/782d2140
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/782d2140
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/782d2140

Branch: refs/heads/master
Commit: 782d214066e224ba553bcef2b626fefbcfd73113
Parents: f27f393
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Nov 8 12:20:47 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Nov 8 12:29:43 2016 +0000

----------------------------------------------------------------------
 .../main/java/org/apache/jena/query/ARQ.java    |  4 ++++
 .../org/apache/jena/sparql/ARQConstants.java    | 25 +++++++++++---------
 .../java/org/apache/jena/sparql/SystemARQ.java  |  3 ++-
 .../main/java/org/apache/jena/graph/Node.java   |  5 +++-
 .../java/org/apache/jena/graph/NodeFactory.java |  3 +++
 5 files changed, 27 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/782d2140/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/ARQ.java b/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
index 9459290..5ded8ab 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/ARQ.java
@@ -20,6 +20,7 @@ package org.apache.jena.query;
 
 import org.apache.jena.riot.RIOT ;
 import org.apache.jena.riot.system.RiotLib ;
+import org.apache.jena.sparql.ARQConstants;
 import org.apache.jena.sparql.SystemARQ ;
 import org.apache.jena.sparql.algebra.optimize.TransformOrderByDistinctApplication ;
 import org.apache.jena.sparql.core.assembler.AssemblerUtils ;
@@ -576,6 +577,9 @@ public class ARQ
             }
             initialized = true ;
             JenaSystem.logLifecycle("ARQ.init - start") ;
+            // Force constants to be set.  This should be independent of other initialization including jena core.
+            ARQConstants.getGlobalPrefixMap();
+            
             globalContext = defaultSettings() ;
             ARQMgt.init() ;         // After context and after PATH/NAME/VERSION/BUILD_DATE are set
             MappingRegistry.addPrefixMapping(ARQ.arqSymbolPrefix, ARQ.arqParamNS) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/782d2140/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java b/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java
index 2fdebe1..322f3e6 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/ARQConstants.java
@@ -18,39 +18,42 @@
 
 package org.apache.jena.sparql;
 
-import org.apache.jena.datatypes.xsd.XSDDatatype ;
 import org.apache.jena.shared.PrefixMapping ;
 import org.apache.jena.shared.impl.PrefixMappingImpl ;
 import org.apache.jena.sparql.util.Symbol ;
-import org.apache.jena.system.JenaSystem ;
-import org.apache.jena.vocabulary.OWL ;
-import org.apache.jena.vocabulary.RDF ;
-import org.apache.jena.vocabulary.RDFS ;
 
 /**
  * Internal constants - configuration is in class ARQ
  */
 public class ARQConstants
 {
-    static { JenaSystem.init() ; }
-    
     /** The prefix of XQuery/Xpath functions and operator */
     public static final String fnPrefix = "http://www.w3.org/2005/xpath-functions#" ;
     
     /** The prefix of XQuery/Xpath functions and operator math: */
     public static final String mathPrefix = "http://www.w3.org/2005/xpath-functions/math#" ;
+
+    // Using explicit constants here makes ARQConstants safe to use during initialization.
+    // Otherwise it needs JenaSystem.init but the constants may be used during initialization
+    // which leads to problems depending in the order of initialization. 
+    //
+    // In
+    //   static final x = someFunctionCall();
+    // x is null until the class is initialized but class initialization can be cyclic 
+    // and is not always complete while another class is initializing and using this class.
+    // See also SystemARQ.allocSymbol
     
     /** RDF namespace prefix */
-    public static final String rdfPrefix = RDF.getURI() ;
+    public static final String rdfPrefix = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; // RDF.getURI()
 
     /** RDFS namespace prefix */
-    public static final String rdfsPrefix = RDFS.getURI() ;
+    public static final String rdfsPrefix = "http://www.w3.org/2000/01/rdf-schema#"; //RDFS.getURI() ;
 
     /** OWL namespace prefix */
-    public static final String owlPrefix = OWL.getURI() ;
+    public static final String owlPrefix = "http://www.w3.org/2002/07/owl#"; //OWL.getURI() ;
     
     /** XSD namespace prefix */
-    public static final String xsdPrefix = XSDDatatype.XSD+"#" ;
+    public static final String xsdPrefix = "http://www.w3.org/2001/XMLSchema#" ; //XSDDatatype.XSD+"#" ;
     
     /** The prefix of SPARQL functions and operator */
     public static final String fnSparql = "http://www.w3.org/ns/sparql#" ;

http://git-wip-us.apache.org/repos/asf/jena/blob/782d2140/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java b/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java
index 173e957..b607a20 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/SystemARQ.java
@@ -143,13 +143,14 @@ public class SystemARQ
     }
 
     public static Symbol allocSymbol(String shortName) {
+        // This must work even if initialization is happening.
+        // Touching final constant explicit strings in ARQ is fine (compile time constants).
         if ( shortName.startsWith(ARQ.arqSymbolPrefix) )
             throw new ARQInternalErrorException("Symbol short name begins with the ARQ namespace prefix: " + shortName) ;
         if ( shortName.startsWith("http:") )
             throw new ARQInternalErrorException("Symbol short name begins with http: " + shortName) ;
         return SystemARQ.allocSymbol(ARQ.arqParamNS, shortName) ;
     }
-
     public static Symbol allocSymbol(String base, String shortName) {
         return Symbol.create(base + shortName) ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/782d2140/jena-core/src/main/java/org/apache/jena/graph/Node.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/graph/Node.java b/jena-core/src/main/java/org/apache/jena/graph/Node.java
index f44a308..492e1fc 100644
--- a/jena-core/src/main/java/org/apache/jena/graph/Node.java
+++ b/jena-core/src/main/java/org/apache/jena/graph/Node.java
@@ -22,6 +22,7 @@ import org.apache.jena.datatypes.RDFDatatype ;
 import org.apache.jena.graph.impl.LiteralLabel ;
 import org.apache.jena.shared.JenaException ;
 import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.system.JenaSystem;
 
 /**
     A Node has five subtypes: Node_Blank, Node_Anon, Node_URI,  
@@ -32,7 +33,9 @@ import org.apache.jena.shared.PrefixMapping ;
 */
 
 public abstract class Node {
-    
+
+    static { JenaSystem.init(); }
+
     final protected Object label;
     static final int THRESHOLD = 10000;
     

http://git-wip-us.apache.org/repos/asf/jena/blob/782d2140/jena-core/src/main/java/org/apache/jena/graph/NodeFactory.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/graph/NodeFactory.java b/jena-core/src/main/java/org/apache/jena/graph/NodeFactory.java
index 858ba27..ce4a09e 100644
--- a/jena-core/src/main/java/org/apache/jena/graph/NodeFactory.java
+++ b/jena-core/src/main/java/org/apache/jena/graph/NodeFactory.java
@@ -25,8 +25,11 @@ import org.apache.jena.datatypes.RDFDatatype ;
 import org.apache.jena.datatypes.TypeMapper ;
 import org.apache.jena.graph.impl.LiteralLabel ;
 import org.apache.jena.graph.impl.LiteralLabelFactory ;
+import org.apache.jena.system.JenaSystem;
 
 public class NodeFactory {
+    
+    static { JenaSystem.init(); }
 
     public static RDFDatatype getType(String s) {
         if ( s == null )