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()) {