From 74529be4f7da2ce1a16c5542df073a1911859751 Mon Sep 17 00:00:00 2001 From: Jeremy Coulon Date: Tue, 10 Apr 2018 17:19:29 +0200 Subject: [PATCH 1/2] Add UT showing the problem --- .../sparql/algebra/TestTransformOpExt.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTransformOpExt.java b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTransformOpExt.java index 0e5bc1dbeab..12bb2f12f22 100644 --- a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTransformOpExt.java +++ b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTransformOpExt.java @@ -18,11 +18,15 @@ package org.apache.jena.sparql.algebra; +import java.util.Set; + import org.apache.jena.atlas.io.IndentedWriter ; import org.apache.jena.atlas.junit.BaseTest ; import org.apache.jena.atlas.lib.StrUtils ; import org.apache.jena.sparql.algebra.op.OpExt ; +import org.apache.jena.sparql.algebra.op.OpFilter; import org.apache.jena.sparql.algebra.op.OpGraph ; +import org.apache.jena.sparql.core.Var; import org.apache.jena.sparql.engine.ExecutionContext ; import org.apache.jena.sparql.engine.QueryIterator ; import org.apache.jena.sparql.serializer.SerializationContext ; @@ -69,6 +73,14 @@ public boolean equalTo(Op other, NodeIsomorphismMap labelMap) { } } + static class OpExtTransform extends TransformCopy { + + @Override + public Op transform(OpFilter opFilter, Op subOp) { + return new OpExtTest(opFilter); + } + } + @Test public void textOpExtQuads() { String x = StrUtils.strjoinNL ("(graph " @@ -100,5 +112,24 @@ public boolean equalTo(Op other, NodeIsomorphismMap labelMap) { Op expectedSub = SSE.parseOp(y) ; assertEquals(expectedSub, opSub) ; } + + @Test + public void testOpExtMinus() { + String sse = StrUtils.strjoinNL + ("(filter (= ?o 1)" + ," (bgp (?s ?p ?o))" + ,")" + ) ; + + // Build + Op op = SSE.parseOp(sse) ; + + // Transform + op = Transformer.transformSkipService(new OpExtTransform(), op) ; + + // Check WalkerVisitorVisible + Set vars = OpVars.visibleVars(op); + assertEquals(3, vars.size()); + } } From 9c2bb1c183a70fafa1007857823e91aca9a1f18f Mon Sep 17 00:00:00 2001 From: Jeremy Coulon Date: Tue, 10 Apr 2018 17:20:08 +0200 Subject: [PATCH 2/2] Fix OpWalkerVisitor for OpExt --- .../src/main/java/org/apache/jena/sparql/algebra/OpVars.java | 5 +++++ .../main/java/org/apache/jena/sparql/algebra/OpWalker.java | 1 + 2 files changed, 6 insertions(+) diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java index 70f649e4ec1..9cfec1c9a9b 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java @@ -284,6 +284,11 @@ public void visit(OpPropFunc opPropFunc) { public void visit(OpProcedure opProc) { ExprVars.varsMentioned(acc, opProc.getArgs()) ; } + + @Override + public void visit(OpExt opExt) { + // OpWalkerVisitor is taking care of calling opExt.effectiveOp().visit(this) + } } private static class OpVarsPatternWithPositions extends OpVisitorBase diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpWalker.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpWalker.java index 378e0aed67a..55bf4e75329 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpWalker.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpWalker.java @@ -139,6 +139,7 @@ protected void visitN(OpN op) { @Override protected void visitExt(OpExt op) { before(op) ; + super.visitExt(op); if ( visitor != null ) op.visit(visitor) ; after(op) ;