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 de2527686b1a11dceb9835d4147485a4cba1887a
Author: Claus Stadler <[email protected]>
AuthorDate: Mon Feb 24 18:02:39 2025 +0100

    Support for JSON query type in QueryTransformOps.
---
 jena-arq/src/main/java/org/apache/jena/query/Query.java | 11 +++++++++++
 .../syntax/syntaxtransform/QueryTransformOps.java       | 17 ++++++++++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

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 faf6a8aa70..905862c681 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
@@ -503,6 +503,17 @@ public class Query extends Prologue implements Cloneable, 
Printable
         return Collections.unmodifiableMap(jsonMapping);
     }
 
+    /**
+     * Overwrite all prior JSON mappings with new ones.
+     *
+     * @param newJsonMapping The new JSON mappings. Must not be null.
+     */
+    public void setJsonMapping(Map<String, Node> newJsonMapping) {
+        Objects.requireNonNull(newJsonMapping);
+        jsonMapping.clear();
+        jsonMapping.putAll(newJsonMapping);
+    }
+
     // ---- Aggregates
 
     // Record allocated aggregations.
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 34081c0fae..37f9352391 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
@@ -21,9 +21,12 @@ 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 org.apache.jena.graph.Node;
 import org.apache.jena.graph.Triple;
@@ -193,7 +196,9 @@ public class QueryTransformOps {
                 mutateVarExprList(q2.getProject(), exprTransform);
                 break;
             case CONSTRUCT_JSON :
-                throw new UnsupportedOperationException("Transform of JSON 
template queries");
+                Map<String, Node> newJsonMapping = 
transformJsonMapping(q2.getJsonMapping(), exprTransform);
+                q2.setJsonMapping(newJsonMapping);
+                break;
             case UNKNOWN :
             default :
                 throw new JenaException("Unknown query type");
@@ -318,6 +323,16 @@ public class QueryTransformOps {
         return varExprList2;
     }
 
+    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.
+        return result;
+    }
+
     // Transform a variable node (for low-usage cases).
     // Returns node object for "no transform"
     private static Node transform(Node node, ExprTransform exprTransform) {

Reply via email to