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/05/21 18:54:24 UTC
[04/23] jena git commit: Handle VarExprList and inner EXISTS
Handle VarExprList and inner EXISTS
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/11f06ca6
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/11f06ca6
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/11f06ca6
Branch: refs/heads/master
Commit: 11f06ca6dd77f18fd75f3d59b470b73555441b2b
Parents: f32636b
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Apr 23 22:05:13 2016 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat May 21 18:29:13 2016 +0100
----------------------------------------------------------------------
.../apache/jena/sparql/algebra/AlgebraQuad.java | 8 +-
.../apache/jena/sparql/algebra/OpAsQuery.java | 4 +-
.../jena/sparql/algebra/TransformBase.java | 3 +
.../jena/sparql/algebra/TransformQuadGraph.java | 2 +-
.../apache/jena/sparql/algebra/Transformer.java | 15 ++-
.../optimize/ExprTransformApplyTransform.java | 1 +
.../optimize/TransformDistinctToReduced.java | 1 -
.../algebra/walker/ApplyTransformVisitor.java | 102 ++++++++++---------
.../algebra/walker/ElementWalker_New.java | 2 +-
.../jena/sparql/algebra/walker/ExprNone.java | 10 ++
.../algebra/walker/OpVisitorByTypeAndExpr.java | 6 +-
.../jena/sparql/algebra/walker/Walker.java | 5 +-
.../sparql/algebra/walker/WalkerVisitor.java | 11 +-
13 files changed, 99 insertions(+), 71 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraQuad.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraQuad.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraQuad.java
index 06c1536..04238cc 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraQuad.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraQuad.java
@@ -65,7 +65,9 @@ public class AlgebraQuad
* an assign is done after the execution of the graph pattern block.
*/
static class QuadSlot
- { // Oh scala, where art thou!
+ {
+ // No longer needed (rewriting done elsewhere).
+ // Remove and use a stack of Nodes.
final Node actualGraphName ;
final Node rewriteGraphName ;
QuadSlot(Node actualGraphName, Node rewriteGraphName)
@@ -95,6 +97,7 @@ public class AlgebraQuad
if ( vars.contains(gn) )
gnQuad = varAlloc.allocVar() ;
}
+ //System.out.println("Pusher: "+gn) ;
stack.push(new QuadSlot(gn, gnQuad)) ;
}
}
@@ -109,7 +112,8 @@ public class AlgebraQuad
// The final work is done in the main vistor,
// which is called after the subnode has been
// rewritten.
- stack.pop() ;
+ QuadSlot qs = stack.pop() ;
+ //System.out.println("Popper: "+qs.rewriteGraphName) ;
}
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpAsQuery.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpAsQuery.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpAsQuery.java
index a7ce267..71e12ef 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpAsQuery.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpAsQuery.java
@@ -332,13 +332,13 @@ public class OpAsQuery {
private static void processExtends(List<OpExtend> ext, BiConsumer<Var, Expr> action) {
ext.forEach(extend->{
- extend.getVarExprList().forEach(action) ;
+ extend.getVarExprList().forEachExpr(action) ;
});
}
private static void processAssigns(List<OpAssign> assigns, BiConsumer<Var, Expr> action) {
assigns.forEach(assign->{
- assign.getVarExprList().forEach(action) ;
+ assign.getVarExprList().forEachExpr(action) ;
});
}
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformBase.java
index 2deca12..761eb77 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformBase.java
@@ -22,6 +22,9 @@ import java.util.List ;
import org.apache.jena.sparql.algebra.op.* ;
+/** When writing {@link Transform}s to be applied to a tree,
+ * extend {@link TransformCopy}, not this class.
+ */
public class TransformBase implements Transform
{
@Override
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadGraph.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadGraph.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadGraph.java
index 27d44e5..daaf8b1 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadGraph.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadGraph.java
@@ -116,7 +116,7 @@ public class TransformQuadGraph extends TransformCopy
@Override
public Op transform(OpBGP opBGP) {
- //System.err.println("transform(OpBGP) : "+getNode()+"\n"+opBGP) ;
+ //System.out.print("transform(OpBGP) : "+getNode()+"\n"+opBGP) ;
return new OpQuadPattern(getNode(), opBGP.getPattern()) ;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transformer.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transformer.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transformer.java
index 9f155d4..550fd5b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transformer.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Transformer.java
@@ -24,7 +24,6 @@ import org.apache.jena.atlas.logging.Log ;
import org.apache.jena.query.SortCondition ;
import org.apache.jena.sparql.algebra.OpWalker.WalkerVisitor ;
import org.apache.jena.sparql.algebra.op.* ;
-import org.apache.jena.sparql.algebra.optimize.ExprTransformApplyTransform ;
import org.apache.jena.sparql.algebra.walker.Walker ;
import org.apache.jena.sparql.core.Var ;
import org.apache.jena.sparql.core.VarExprList ;
@@ -79,6 +78,8 @@ public class Transformer
/** Transform an algebra expression except skip (leave alone) any OpService nodes */
public static Op transformSkipService(Transform transform, Op op, OpVisitor beforeVisitor, OpVisitor afterVisitor)
{
+ // XXX XXX REPLACED? ApplyTransformVisitor has a flag.
+
// Skip SERVICE
if ( true )
{
@@ -88,9 +89,7 @@ public class Transformer
}
else
{
- // Don't transform OpService and don't walk the sub-op
- ExprTransform exprTransform = new ExprTransformApplyTransform(transform, beforeVisitor, afterVisitor) ;
- ApplyTransformVisitorServiceAsLeaf v = new ApplyTransformVisitorServiceAsLeaf(transform, exprTransform) ;
+ ApplyTransformVisitorServiceAsLeaf v = new ApplyTransformVisitorServiceAsLeaf(transform, null) ;
WalkerVisitorSkipService walker = new WalkerVisitorSkipService(v, beforeVisitor, afterVisitor) ;
OpWalker.walk(walker, op) ;
return v.result() ;
@@ -120,13 +119,13 @@ public class Transformer
// and theses protected methods.
protected Op transformation(Transform transform, Op op, OpVisitor beforeVisitor, OpVisitor afterVisitor)
{
- // XXX
- ExprTransform exprTransform = new ExprTransformApplyTransform(transform, beforeVisitor, afterVisitor) ;
- return transformation(transform, exprTransform, op, beforeVisitor, afterVisitor) ;
+ // XXX XXX
+ //ExprTransform exprTransform = new ExprTransformApplyTransform(transform, beforeVisitor, afterVisitor) ;
+ return transformation(transform, null, op, beforeVisitor, afterVisitor) ;
}
protected Op transformation(Transform transform, ExprTransform exprTransform, Op op, OpVisitor beforeVisitor, OpVisitor afterVisitor) {
- // XXX Switch on before/after via the Walker.
+ // XXX XXX Switch on before/after via the Walker.
if ( true )
return Walker.transform(op, transform, exprTransform, beforeVisitor, afterVisitor) ;
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/ExprTransformApplyTransform.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/ExprTransformApplyTransform.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/ExprTransformApplyTransform.java
index e38b3ee..42b25c4 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/ExprTransformApplyTransform.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/ExprTransformApplyTransform.java
@@ -44,6 +44,7 @@ public class ExprTransformApplyTransform extends ExprTransformCopy
this.afterVisitor = afterVisitor ;
}
+ // Needed?
@Override
public Expr transform(ExprFunctionOp funcOp, ExprList args, Op opArg)
{
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformDistinctToReduced.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformDistinctToReduced.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformDistinctToReduced.java
index f185b41..8d40a9d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformDistinctToReduced.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformDistinctToReduced.java
@@ -130,7 +130,6 @@ public class TransformDistinctToReduced extends TransformCopy {
ok = false;
break;
}
- // XXX
// As soon as we've seen all variables we know this is safe and any
// further sort conditions are irrelevant
if (seenVars.size() == projectVars.size())
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java
index 2d545dd..8de2dc0 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java
@@ -31,6 +31,9 @@ import org.apache.jena.sparql.core.VarExprList ;
import org.apache.jena.sparql.expr.* ;
import org.apache.jena.sparql.expr.aggregate.Aggregator ;
+/** Apply the {@link Transform}, {@link ExprTransform}
+ * Works in conjunction with {@link WalkerVisitor}.
+ */
public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisitor {
private final Transform opTransform ;
private final ExprTransform exprTransform ;
@@ -131,7 +134,7 @@ public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisito
@Override
public void visit(OpAssign opAssign) {
VarExprList varExpr = opAssign.getVarExprList() ;
- VarExprList varExpr2 = process(varExpr) ;
+ VarExprList varExpr2 = collect(varExpr) ;
OpAssign opAssign2 = opAssign ;
if ( varExpr != varExpr2 )
opAssign2 = OpAssign.create(opAssign.getSubOp(), varExpr2) ;
@@ -141,47 +144,64 @@ public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisito
@Override
public void visit(OpExtend opExtend) {
VarExprList varExpr = opExtend.getVarExprList() ;
- VarExprList varExpr2 = process(varExpr) ;
+ VarExprList varExpr2 = collect(varExpr) ;
OpExtend opExtend2 = opExtend ;
if ( varExpr != varExpr2 )
opExtend2 = OpExtend.create(opExtend.getSubOp(), varExpr2) ;
visit1(opExtend2) ;
}
- // VarExprLists are not visited by OpVisitorByTypeAndExpr
- // XXX Maybe they should.
- private VarExprList process(VarExprList varExprList) {
+ // Special test cases for collectors.
+
+ // XXX XXX Check order
+ private VarExprList collect(VarExprList varExprList) {
if ( varExprList == null )
return varExprList ;
- List<Var> vars = varExprList.getVars() ;
- VarExprList varExpr2 = new VarExprList() ;
- boolean changed = false ;
- for ( Var v : vars ) {
- Expr e = varExprList.getExpr(v) ;
- Expr e2 = e ;
- if ( e != null )
- e2 = transform(e) ;
- if ( e2 == null )
- varExpr2.add(v) ;
- else
- varExpr2.add(v, e2) ;
- if ( e != e2 )
- changed = true ;
- }
- if ( !changed )
- return varExprList ;
- return varExpr2 ;
- }
-
+ List<Var> vars = varExprList.getVars() ;
+ VarExprList varExpr2 = new VarExprList() ;
+
+ List<Expr> x = collect(vars.size()) ;
+
+ boolean changed = false ; // XXX XXX
+
+ for ( int i = 0 ; i < vars.size() ; i++ ) {
+ Var v = vars.get(i) ;
+ Expr e2 = x.get(i) ;
+ if ( e2 == null || e2 == ExprNone.NONE )
+ varExpr2.add(v) ;
+ else
+ varExpr2.add(v, e2) ;
+ }
+ return varExpr2 ;
+ }
+
+ // XXX XXX Check order
private ExprList collect(ExprList exprList) {
if ( exprList == null )
return null ;
- ExprList ex2 = new ExprList() ;
- exprList.forEach((e)->ex2.add(pop(exprStack)));
- return ex2 ;
+ return new ExprList(collect(exprList.size())) ;
+ }
+
+ // XXX XXX Check order
+ private ExprList collect(List<Expr> exprList) {
+ if ( exprList == null )
+ return null ;
+ return new ExprList(collect(exprList.size())) ;
}
-
-// private ExprList process(ExprList exprList) {
+
+ // collect and return in the original order (stacks reverse order).
+ private List<Expr> collect(int N) {
+ List<Expr> x = new ArrayList<>(N) ;
+ for ( int i = N-1 ; i >= 0 ; i-- ) {
+ Expr e2 = pop(exprStack) ;
+ x.add(0, e2) ;
+ }
+ return x ;
+ }
+
+ // XXX collectExpr(N)
+
+ // private ExprList process(ExprList exprList) {
// if ( exprList == null )
// return null ;
// ExprList exprList2 = new ExprList() ;
@@ -211,7 +231,7 @@ public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisito
boolean changed = false ;
VarExprList varExpr = opGroup.getGroupVars() ;
- VarExprList varExpr2 = process(varExpr) ;
+ VarExprList varExpr2 = collect(varExpr) ;
if ( varExpr != varExpr2 )
changed = true ;
@@ -353,7 +373,8 @@ public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisito
@Override
public void visitExpr(ExprList exprs) {
- // XXX
+ // XXX XXX
+ // Not called?
System.err.println("visitExpr(ExprList)") ;
if ( exprs != null && exprTransform != null ) {
@@ -362,6 +383,8 @@ public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisito
@Override
public void visitVarExpr(VarExprList exprVarExprList) {
+ // XXX XXX
+ // Not called?
System.err.println("visitExpr(ExprList)") ;
if ( exprVarExprList != null && exprTransform != null ) {
@@ -405,19 +428,6 @@ public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisito
push(exprStack, e) ;
}
- private ExprList collect(List<Expr> exprList) {
- if ( exprList == null )
- return null ;
- int N = exprList.size() ;
- List<Expr> x = new ArrayList<>(N) ;
- for ( Expr anExprList : exprList ) {
- Expr e2 = pop(exprStack) ;
- // Add in reverse.
- x.add(0, e2) ;
- }
- return new ExprList(x) ;
- }
-
@Override
public void visit(ExprFunctionOp funcOp) {
ExprList x = null ;
@@ -457,7 +467,7 @@ public class ApplyTransformVisitor implements OpVisitorByTypeAndExpr, ExprVisito
Log.warn(ApplyTransformVisitor.class, "Pop null from "+stackLabel(stack)+" stack") ;
return v ;
}
- catch (EmptyStackException ex) {
+ catch (NoSuchElementException ex) {
Log.warn(ApplyTransformVisitor.class, "Empty "+stackLabel(stack)+" stack") ;
return null ;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ElementWalker_New.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ElementWalker_New.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ElementWalker_New.java
index 7ca53b9..aab404a 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ElementWalker_New.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ElementWalker_New.java
@@ -189,7 +189,7 @@ public class ElementWalker_New {
@Override
public void visit(ExprAggregator eAgg) {
//eAgg.getAggVar().visit(visitorExpr);
- // XXX Hack for varsMentioned
+ // XXX XXX Hack for varsMentioned
eAgg.visit(exprVisitor) ;
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ExprNone.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ExprNone.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ExprNone.java
new file mode 100644
index 0000000..f7acae9
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ExprNone.java
@@ -0,0 +1,10 @@
+package org.apache.jena.sparql.algebra.walker;
+
+import org.apache.jena.sparql.expr.ExprVar ;
+
+/** Marker, used in place of a null.
+ * This may be tested for using {@code ==} */
+public class ExprNone extends ExprVar {
+ public static ExprNone NONE = new ExprNone() ;
+ private ExprNone() { super("") ; }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/OpVisitorByTypeAndExpr.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/OpVisitorByTypeAndExpr.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/OpVisitorByTypeAndExpr.java
index 8c1ee3e..61595d3 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/OpVisitorByTypeAndExpr.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/OpVisitorByTypeAndExpr.java
@@ -170,7 +170,7 @@ public interface OpVisitorByTypeAndExpr extends OpVisitor
@Override
public default void visit(OpOrder opOrder) {
- // XXX
+ // XXX XXX
//opOrder.getConditions() ;
visitModifer(opOrder);
}
@@ -178,14 +178,14 @@ public interface OpVisitorByTypeAndExpr extends OpVisitor
@Override
public default void visit(OpGroup opGroup) {
visitVarExpr(opGroup.getGroupVars()) ;
- // XXX
+ // XXX XXX
//opGroup.getAggregators() ;
visit1(opGroup);
}
@Override
public default void visit(OpTopN opTop) {
- // XXX
+ // XXX XXX
// opTop.getConditions() ;
visit1(opTop);
}
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/Walker.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/Walker.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/Walker.java
index 6135416..a0b484c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/Walker.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/Walker.java
@@ -102,7 +102,7 @@ public class Walker {
public static void walk(VarExprList varExprList, OpVisitor opVisitor, ExprVisitor exprVisitor) {
if ( varExprList == null )
return ;
- varExprList.forEach((v,e)->walk(e,opVisitor, exprVisitor)) ;
+ varExprList.forEachExpr((v,e)->walk(e,opVisitor, exprVisitor)) ;
}
private static OpVisitor nullOpVisitor = new OpVisitorBase() ;
@@ -180,10 +180,11 @@ public class Walker {
}
public static ApplyTransformVisitor createTransformer(Transform opTransform, ExprTransform exprTransform, OpVisitor beforeVisitor, OpVisitor afterVisitor) {
+ // XXX XXX Copy forms?
if ( opTransform == null )
opTransform = nullOpTransform ;
if ( exprTransform == null )
- exprTransform = nullExprTransform ;
+ exprTransform = new ExprTransformCopy() ;
return new ApplyTransformVisitor(opTransform, exprTransform, null, null) ;
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/11f06ca6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitor.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitor.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitor.java
index a54572a..0d9e24a 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/WalkerVisitor.java
@@ -102,11 +102,10 @@ public class WalkerVisitor implements OpVisitorByTypeAndExpr, ExprVisitorFunctio
public void walk(VarExprList varExprList) {
if ( varExprList == null )
return ;
- varExprList.forEach((v,e) -> walk(e));
+ varExprList.forEachVarExpr((v,e) -> walk( e!=null ? e : ExprNone.NONE ));
}
// ---- Mode swapping between op and expr. visit=>?walk
- // XXX
@Override
public void visitExpr(ExprList exprList) {
if ( exprVisitor != null )
@@ -130,8 +129,10 @@ public class WalkerVisitor implements OpVisitorByTypeAndExpr, ExprVisitorFunctio
@Override
public void visit0(Op0 op) {
+ before(op) ;
if ( opVisitor != null )
op.visit(opVisitor) ;
+ after(op) ;
}
@Override
@@ -141,6 +142,7 @@ public class WalkerVisitor implements OpVisitorByTypeAndExpr, ExprVisitorFunctio
after(op) ;
}
+ // Can be called via different routes.
private void visit1$(Op1 op) {
if ( op.getSubOp() != null )
op.getSubOp().visit(this) ;
@@ -192,7 +194,7 @@ public class WalkerVisitor implements OpVisitorByTypeAndExpr, ExprVisitorFunctio
@Override
public void visit(OpOrder opOrder) {
- // XXX
+ // XXX XXX
// List<SortCondition> conditions = opOrder.getConditions() ;
// List<SortCondition> conditions2 = new ArrayList<>() ;
// boolean changed = false ;
@@ -304,8 +306,7 @@ public class WalkerVisitor implements OpVisitorByTypeAndExpr, ExprVisitorFunctio
// visitAssignVar(eAgg.getAggVar().asVar()) ;
- // XXX Hack for varsMentioned
-
+ // XXX XXX Hack for varsMentioned
if ( exprVisitor != null )
eAgg.visit(exprVisitor) ;
}