Merge pull request #774 from afs/jena1935-subquery
JENA-1935: No prologue for subquery
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 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 @@
@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 @@
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 @@
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 @@
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 @@
if (q2.getOrderBy() != null) {
mutateSortConditions(q2.getOrderBy(), exprTransform);
}
-
+
Element el = q2.getQueryPattern();
// Explicit null check to prevent warning in ElementTransformer
@@ -184,7 +184,6 @@
return varExprList2;
}
-
static class QueryShallowCopy implements QueryVisitor {
final Query newQuery = new Query();
@@ -334,5 +333,4 @@
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 @@
/**
* 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;
}