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 2020/07/08 11:50:10 UTC

[jena] branch master updated: JENA-1935: No prologue for subquery

This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jena.git


The following commit(s) were added to refs/heads/master by this push:
     new 2e6ec6a  JENA-1935: No prologue for subquery
     new 0d86dd5  Merge pull request #774 from afs/jena1935-subquery
2e6ec6a is described below

commit 2e6ec6a3c7ec344fae7fab97ed45105eba725529
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Tue Jul 7 17:22:35 2020 +0100

    JENA-1935: No prologue for subquery
---
 jena-arq/src/main/java/org/apache/jena/query/Query.java          | 5 ++++-
 jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Bound.java  | 4 ++--
 .../main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java  | 6 ++++--
 .../java/org/apache/jena/sparql/serializer/FormatterElement.java | 2 +-
 .../jena/sparql/syntax/syntaxtransform/QueryTransformOps.java    | 4 +---
 .../java/org/apache/jena/query/TestQueryCloningEssentials.java   | 9 +++++++--
 6 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/query/Query.java b/jena-arq/src/main/java/org/apache/jena/query/Query.java
index 933b85b..d9b4029 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/Query.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/Query.java
@@ -127,7 +127,10 @@ public class Query extends Prologue implements Cloneable, Printable
     public Query(Prologue prologue)
     {
         this() ;
-        usePrologueFrom(prologue) ;
+        Prologue p2 = prologue.copy();
+        prefixMap = p2.getPrefixMapping();
+        seenBaseURI = false ;
+        resolver = p2.getResolver();
     }
 
     // Allocate variables that are unique to this query.
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Bound.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Bound.java
index 7f80b76..2f405e4 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Bound.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Bound.java
@@ -34,7 +34,7 @@ public class E_Bound extends ExprFunction1
     
     @Override
     public NodeValue evalSpecial(Binding binding, FunctionEnv env) { 
-        // See alse ExprLib.evalOrNull.
+        // See also ExprLib.evalOrNull.
         // This code predates that; it handles exceptions 
         // slightly differently (VariableNotBoundException not
         // a general ExprEvalException).
@@ -50,7 +50,7 @@ public class E_Bound extends ExprFunction1
             return NodeValue.booleanReturn(binding.contains(expr.asVar())) ; 
         
         // General expression. This case can't be written in SPARQL
-        // but we keep the code general in case some optimziation rewrite
+        // but we keep the code general in case some optimization rewrite
         // or algebra expression uses the generalized feature.
 		try {
 			expr.eval(binding, env) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
index 47ef0ad..13f62fb 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/SPARQLParserBase.java
@@ -226,9 +226,11 @@ public class SPARQLParserBase extends ParserBase
     
     protected Query newSubQuery(Prologue progloue)
     {
-        return new Query(getPrologue());
+        // The parser uses the same prologue throughout the parsing process.
+        // For printing purposes, the subquery must not have a prologue of its own.
+        return new Query();
     }
-    
+
     protected void popQuery()
     {
         query = stack.pop();
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterElement.java b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterElement.java
index ac68e43..4715d73 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterElement.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterElement.java
@@ -433,7 +433,7 @@ public class FormatterElement extends FormatterBase implements ElementVisitor {
         out.incIndent(INDENT);
         Query q = el.getQuery();
 
-        // Serialize with respect to the existing context
+        // Serialize with respect to the existing context.
         QuerySerializerFactory factory = SerializerRegistry.get().getQuerySerializerFactory(Syntax.syntaxARQ);
         QueryVisitor serializer = factory.create(Syntax.syntaxARQ, context, out);
         q.visit(serializer);
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java
index 6afb894..bc97ac6 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java
@@ -79,7 +79,7 @@ public class QueryTransformOps {
         if (q2.getOrderBy() != null) {
             mutateSortConditions(q2.getOrderBy(), exprTransform);
         }
-        
+
         Element el = q2.getQueryPattern();
 
         // Explicit null check to prevent warning in ElementTransformer
@@ -184,7 +184,6 @@ public class QueryTransformOps {
         return varExprList2;
     }
 
-
     static class QueryShallowCopy implements QueryVisitor {
         final Query newQuery = new Query();
 
@@ -334,5 +333,4 @@ public class QueryTransformOps {
         Query q2 = copy.newQuery;
         return q2;
     }
-
 }
diff --git a/jena-arq/src/test/java/org/apache/jena/query/TestQueryCloningEssentials.java b/jena-arq/src/test/java/org/apache/jena/query/TestQueryCloningEssentials.java
index 07d6bb5..b028613 100644
--- a/jena-arq/src/test/java/org/apache/jena/query/TestQueryCloningEssentials.java
+++ b/jena-arq/src/test/java/org/apache/jena/query/TestQueryCloningEssentials.java
@@ -46,15 +46,20 @@ public class TestQueryCloningEssentials {
     /**
      * Assert whether cloning using the old print-parse approach
      * yields the same result as the one using the syntax transform
-     * machinery
+     * machinery.
      *
      * @param query
      */
     public static Query checkedClone(Query query) {
         Query expected = slowClone(query);
         Query actual = query.cloneQuery();
-
+        Assert.assertEquals(query, actual);
         Assert.assertEquals(expected, actual);
+
+        // Check that the cloned query is OK. 
+        Query again = slowClone(actual);
+        Assert.assertEquals(query, again);
+        
         return actual;
     }