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 2016/08/26 22:46:46 UTC

[4/6] jena git commit: JENA-1194: Process HAVING clause in a syntax transform.

JENA-1194: Process HAVING clause in a syntax transform.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/ea3d0265
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/ea3d0265
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/ea3d0265

Branch: refs/heads/master
Commit: ea3d0265233865972b0c83b46964ede7fd53381e
Parents: 770794c
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Aug 26 21:27:53 2016 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Aug 26 21:27:53 2016 +0100

----------------------------------------------------------------------
 .../syntaxtransform/QueryTransformOps.java      | 27 ++++++++++++++++----
 1 file changed, 22 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/ea3d0265/jena-arq/src/main/java/org/apache/jena/sparql/syntax/syntaxtransform/QueryTransformOps.java
----------------------------------------------------------------------
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 cc82464..b08641a 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
@@ -18,6 +18,7 @@
 
 package org.apache.jena.sparql.syntax.syntaxtransform ;
 
+import java.util.List ;
 import java.util.Map ;
 
 import org.apache.jena.graph.Node ;
@@ -31,7 +32,10 @@ import org.apache.jena.sparql.core.DatasetDescription ;
 import org.apache.jena.sparql.core.Prologue ;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.core.VarExprList ;
-import org.apache.jena.sparql.expr.* ;
+import org.apache.jena.sparql.expr.Expr ;
+import org.apache.jena.sparql.expr.ExprTransform ;
+import org.apache.jena.sparql.expr.ExprTransformer ;
+import org.apache.jena.sparql.expr.ExprVar ;
 import org.apache.jena.sparql.graph.NodeTransform ;
 import org.apache.jena.sparql.syntax.Element ;
 import org.apache.jena.sparql.syntax.ElementGroup ;
@@ -49,8 +53,12 @@ public class QueryTransformOps {
     public static Query transform(Query query, ElementTransform transform, ExprTransform exprTransform) {
         Query q2 = QueryTransformOps.shallowCopy(query) ;
 
+        // "Shallow copy with transform."
         transformVarExprList(q2.getProject(), exprTransform) ;
         transformVarExprList(q2.getGroupBy(), exprTransform) ;
+        transformExprList(q2.getHavingExprs(), exprTransform) ;
+        //?? DOES NOT WORK: transformExprListAgg(q2.getAggregators(), exprTransform) ;
+        // ?? 
         // Nothing to do about ORDER BY - leave to sort by that variable.
         
 //        if ( q2.hasHaving() ) {}
@@ -73,10 +81,19 @@ public class QueryTransformOps {
         return transform(query, transform, noop) ;
     }
 
-    // Mutates the VarExprList
-    private static void transformVarExprList(VarExprList varExprList, ExprTransform exprTransform)
-    // , final Map<Var, Node> substitutions)
-    {
+    // ** Mutates the List
+    private static void transformExprList(List<Expr> exprList, ExprTransform exprTransform) {
+        for ( int i = 0 ; i < exprList.size() ; i++ ) {
+            Expr e1 = exprList.get(0) ;
+            Expr e2 = ExprTransformer.transform(exprTransform, e1) ;
+            if ( e2 == null || e2 == e1 )
+                continue ;
+            exprList.set(i, e2) ;
+        }
+    }
+
+    // ** Mutates the VarExprList
+    private static void transformVarExprList(VarExprList varExprList, ExprTransform exprTransform) {
         Map<Var, Expr> map = varExprList.getExprs() ;
 
         for (Var v : varExprList.getVars()) {