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

commit 0b26a2dddd213ed7131197bab1270d3ba8fcb8b4
Author: Andy Seaborne <[email protected]>
AuthorDate: Tue Mar 4 11:29:11 2025 +0000

    Tests for QueryTransformOps on JSON template query
---
 .../syntax/syntaxtransform/QueryTransformOps.java  | 44 +++++++++-------------
 .../syntaxtransform/TestQuerySyntaxTransform.java  | 33 +++++++++++++---
 2 files changed, 44 insertions(+), 33 deletions(-)

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 c9efb591cc..e6823219f8 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
@@ -20,13 +20,7 @@ package org.apache.jena.sparql.syntax.syntaxtransform;
 
 import static 
org.apache.jena.sparql.syntax.syntaxtransform.QuerySyntaxSubstituteScope.scopeCheck;
 
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.stream.Collectors;
+import java.util.*;
 
 import org.apache.jena.graph.Node;
 import org.apache.jena.graph.Triple;
@@ -179,10 +173,10 @@ public class QueryTransformOps {
                 QuadAcc acc = new QuadAcc();
                 List<Quad> quads = template.getQuads();
                 quads.forEach(q->{
-                    Node g = transform(q.getGraph(), exprTransform);
-                    Node s = transform(q.getSubject(), exprTransform);
-                    Node p = transform(q.getPredicate(), exprTransform);
-                    Node o = transform(q.getObject(), exprTransform);
+                    Node g = transformOrSame(q.getGraph(), exprTransform);
+                    Node s = transformOrSame(q.getSubject(), exprTransform);
+                    Node p = transformOrSame(q.getPredicate(), exprTransform);
+                    Node o = transformOrSame(q.getObject(), exprTransform);
                     acc.addQuad(Quad.create(g, s, p, o));
                 });
                 Template template2 = new Template(acc);
@@ -268,7 +262,7 @@ public class QueryTransformOps {
     private static void mutateDescribeVar(List<Var> varList, List<Node> 
constants, ExprTransform exprTransform) {
         List<Var> varList2 = new ArrayList<>(varList.size());
         for (Var v : varList) {
-            Node n = transform(v, exprTransform);
+            Node n = transformOrSame(v, exprTransform);
             if ( n != v ) {
                 if ( !constants.contains(n) )
                     constants.add(n);
@@ -324,24 +318,21 @@ public class QueryTransformOps {
     }
 
     private static Map<String, Node> transformJsonMapping(Map<String, Node> 
jsonMapping, ExprTransform exprTransform) {
-        Map<String, Node> result = jsonMapping.entrySet().stream()
-            .collect(Collectors.toMap(
-                Entry::getKey,
-                e -> transform(e.getValue(), exprTransform), // 
transform(Node, ExprTransform) never returns null.
-                (u, v) -> v,          // Clashes can't happen.
-                LinkedHashMap::new)); // Retain order.
+        Map<String, Node> result = new LinkedHashMap<>();
+        jsonMapping.forEach((k,n)->{
+            Node n2 = transformOrSame(n, exprTransform);
+            result.put(k, n2);
+        });
         return result;
     }
 
-    // Transform a variable node (for low-usage cases).
-    // Returns node object for "no transform"
-    private static Node transform(Node node, ExprTransform exprTransform) {
+    // Transform a variable node.
+    // Returns the argument java object for "no transform"
+    private static Node transformOrSame(Node node, ExprTransform 
exprTransform) {
         if ( ! Var.isVar(node) )
             return node;
-        Var v = Var.alloc(node);
-        ExprVar ev = new ExprVar(v);
-        Expr e2 = exprTransform.transform(ev);
-        if (e2 == null || e2 == ev )
+        Expr e2 = exprTransform.transform(node);
+        if ( e2 == null )
             return node;
         if ( ! e2.isConstant() )
             return node;
@@ -351,8 +342,7 @@ public class QueryTransformOps {
     static class QueryShallowCopy implements QueryVisitor {
         final Query newQuery = new Query();
 
-        QueryShallowCopy() {
-        }
+        QueryShallowCopy() {}
 
         @Override
         public void startVisit(Query query) {
diff --git 
a/jena-arq/src/test/java/org/apache/jena/sparql/syntax/syntaxtransform/TestQuerySyntaxTransform.java
 
b/jena-arq/src/test/java/org/apache/jena/sparql/syntax/syntaxtransform/TestQuerySyntaxTransform.java
index cafad5fe56..b275cf6a0c 100644
--- 
a/jena-arq/src/test/java/org/apache/jena/sparql/syntax/syntaxtransform/TestQuerySyntaxTransform.java
+++ 
b/jena-arq/src/test/java/org/apache/jena/sparql/syntax/syntaxtransform/TestQuerySyntaxTransform.java
@@ -185,17 +185,38 @@ public class TestQuerySyntaxTransform
                            "x", "<urn:ex:z>");
     }
 
-    @Test public void transformTransformJsonReplace_30() {
-        testQuery("JSON { \"s\": ?s } { ?s ?p ?o }",
-                  "JSON { \"s\": 123 } { ?s ?p ?o }",
-                  "s", "123");
+    @Test public void transformTransformJsonReplace_01() {
+        testQuery("JSON { 'key': ?x } {  }",
+                  "JSON { 'key': 123 } { }",
+                  "x", "123");
+    }
+
+    @Test public void transformTransformJsonReplace_02() {
+        testQuery("PREFIX : <http://example/> JSON { \"o\": ?o } { ?s :p ?o }",
+                  "PREFIX : <http://example/> JSON { \"o\": 123 } { ?s :p 
123}",
+                  "o", "123");
+    }
+
+    @Test public void transformTransformJsonReplace_03() {
+        String queryString = """
+                JSON { "s" : ?s ,
+                       "x" : ?x ,
+                       "unused": ?unused ,
+                       "fixed" : 'fixed' } WHERE {}
+              """;
+        String expectedString = """
+                JSON { "s" : ?s ,
+                       "x" : "abc" ,
+                       "unused": ?unused ,
+                       "fixed" : 'fixed' } WHERE {}
+                """;
+        testQuery(queryString, expectedString, "x", "'abc'");
     }
 
     //static final String PREFIX = "PREFIX : <http://example/>\n";
     static final String PREFIX = "";
 
-    private void testQuery(String input, String output, String varStr, String 
valStr)
-    {
+    private void testQuery(String input, String output, String varStr, String 
valStr) {
         Query q1 = QueryFactory.create(PREFIX+input);
         Query qExpected = QueryFactory.create(PREFIX+output);
 

Reply via email to