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