Vars for OpFind
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 3363653..d7ea842 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
@@ -58,7 +58,7 @@
// Does not work yet for new walker.
OpWalker.walk(new OpWalkerVisitorVisible(visitor, acc), op) ;
}
-
+
/** The set of variables that will be in every solution of this Op */
public static Set<Var> fixedVars(Op op) {
Set<Var> acc = collector() ;
@@ -70,7 +70,7 @@
OpVarsPattern visitor = new OpVarsPattern(acc, true) ;
OpWalker.walk(new OpWalkerVisitorFixed(visitor, acc), op) ;
}
-
+
public static Tuple<Set<Var>> mentionedVarsByPosition(Op op) {
Set<Var> graphAcc = collector() ;
Set<Var> subjAcc = collector() ;
@@ -81,7 +81,7 @@
OpWalker.walk(op, visitor);
return TupleFactory.tuple(graphAcc, subjAcc, predAcc, objAcc, unknownAcc);
}
-
+
public static Tuple<Set<Var>> mentionedVarsByPosition(Op... ops) {
Set<Var> graphAcc = collector() ;
Set<Var> subjAcc = collector() ;
@@ -108,7 +108,7 @@
}
/** Do project and don't walk into it. MINUS vars aren't visible either */
- private static class OpWalkerVisitorVisible extends OpWalkerVisitor
+ private static class OpWalkerVisitorVisible extends OpWalkerVisitor
{
private final Collection<Var> acc ;
@@ -149,7 +149,7 @@
super(visitor);
this.acc = acc ;
}
-
+
@Override
public void visit(OpLeftJoin x) {
x.getLeft().visit(this);
@@ -167,7 +167,7 @@
Set<Var> r = SetUtils.intersection(left, right) ;
acc.addAll(r) ;
}
-
+
@Override
public void visit(OpProject op) {
before(op) ;
@@ -192,7 +192,7 @@
}
/** Collect variables.
- * What to collect from is controlled by the walker e.g.
+ * What to collect from is controlled by the walker e.g.
* OpWalkerVisitorFixed, OpWalkerVisitorVisible
* and for OpVarsMentioned, the full geenral walker.
*/
@@ -223,7 +223,7 @@
addVar(acc, quadPattern.getGraphNode()) ;
VarUtils.addVars(acc, quadPattern.getBasicPattern()) ;
}
-
+
@Override
public void visit(OpQuadBlock quadBlock) {
VarUtils.addVars(acc, quadBlock.getPattern()) ;
@@ -245,6 +245,12 @@
}
@Override
+ public void visit(OpFind opFind) {
+ VarUtils.addVarsFromTriple(acc, opFind.getTriple());
+ addVar(acc, opFind.getVar());
+ }
+
+ @Override
public void visit(OpDatasetNames dsNames) {
addVar(acc, dsNames.getGraphNode()) ;
}
@@ -262,7 +268,7 @@
// The walker (WalkerVisitorVisible) handles this
// for visible variables, not mentioned variable collecting.
// The visibleOnly/clear is simply to be as general as possible.
- // visible: OpWalkerVisitorFixed, OpWalkerVisitorVisible,
+ // visible: OpWalkerVisitorFixed, OpWalkerVisitorVisible,
// all (visibleOnly==false) for OpVarsMentioned
if (visibleOnly)
acc.clear() ;
@@ -289,13 +295,13 @@
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
{
// The possibly-set-vars
@@ -359,7 +365,7 @@
clear(subjAcc, vs);
clear(predAcc, vs);
clear(objAcc, vs);
-
+
}
for (Var v : vs) {
if (!graphAcc.contains(v) && !subjAcc.contains(v) && !predAcc.contains(v) && !objAcc.contains(v)) {
@@ -399,7 +405,7 @@
public void visit(OpProcedure opProc) {
unknownAcc.addAll(OpVars.mentionedVars(opProc));
}
-
+
private void vars(BasicPattern bp) {
for (Triple t : bp.getList())
{
@@ -408,7 +414,7 @@
addVar(objAcc, t.getObject());
}
}
-
+
private void clear(Set<Var> acc, List<Var> visible) {
List<Var> toRemove = new ArrayList<>();
for (Var found : acc)