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 2021/12/08 13:44:42 UTC
[jena] branch main updated: JENA-2207: Undo variable rename for scoping
This is an automated email from the ASF dual-hosted git repository.
andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
The following commit(s) were added to refs/heads/main by this push:
new 860ed2d JENA-2207: Undo variable rename for scoping
new bfbd611 Merge pull request #1125 from afs/jena2207-service
860ed2d is described below
commit 860ed2dab977189a5639b831425cdec619a318c5
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Tue Dec 7 09:24:04 2021 +0000
JENA-2207: Undo variable rename for scoping
---
.../org/apache/jena/sparql/exec/http/Service.java | 20 ++++++++++++++++++--
.../apache/jena/sparql/exec/http/TestService.java | 8 ++++++++
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/exec/http/Service.java b/jena-arq/src/main/java/org/apache/jena/sparql/exec/http/Service.java
index 1febb92..bc2e5e2 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/exec/http/Service.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/exec/http/Service.java
@@ -36,6 +36,7 @@ import org.apache.jena.sparql.algebra.Op ;
import org.apache.jena.sparql.algebra.OpAsQuery ;
import org.apache.jena.sparql.algebra.op.OpService ;
import org.apache.jena.sparql.engine.QueryIterator ;
+import org.apache.jena.sparql.engine.Rename;
import org.apache.jena.sparql.engine.http.HttpParams;
import org.apache.jena.sparql.engine.http.QueryExceptionHTTP;
import org.apache.jena.sparql.engine.iterator.QueryIterPlainWrapper;
@@ -124,8 +125,23 @@ public class Service {
query.setQueryPattern(el);
query.setResultVars();
}
- } else
- query = OpAsQuery.asQuery(opRemote);
+ } else {
+ // This relies on the observation that the query was originally correct,
+ // so reversing the scope renaming is safe (it merely restores the
+ // algebra expression).
+ //
+ // Any variables that reappear should be internal ones that were hidden
+ // by renaming in the first place.
+ //
+ // Any substitution is also safe because it replaces variables by
+ // values.
+ //
+ // It is safer to rename/unrename than skipping SERVICE during rename
+ // to avoid substituting hidden variables.
+
+ Op opRestored = Rename.reverseVarRename(opRemote, true);
+ query = OpAsQuery.asQuery(opRestored);
+ }
// -- Setup
//boolean withCompression = context.isTrueOrUndef(httpQueryCompression);
diff --git a/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestService.java b/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestService.java
index d0209b3..34e2f06 100644
--- a/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestService.java
+++ b/jena-integration-tests/src/test/java/org/apache/jena/sparql/exec/http/TestService.java
@@ -436,6 +436,14 @@ public class TestService {
}
}
+ // JENA-2207
+ // The inner query involves a rename of variables ?p ?o. This should be undone by Service.exec.
+ @Test public void service_query_nested_select_1() {
+ String innerQuery = "SELECT ?s { ?s ?p ?o }";
+ String queryString = "ASK { SERVICE <"+SERVICE+ "> { "+innerQuery+" } }";
+ QueryExec.dataset(localDataset()).query(queryString).ask();
+ }
+
private static void runWithModifier(String key, HttpRequestModifier modifier, Runnable action) {
RegistryRequestModifier.get().add(SERVICE, modifier);
try {