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 2013/04/13 21:44:21 UTC
svn commit: r1467681 - in /jena/trunk/jena-arq/src:
main/java/com/hp/hpl/jena/sparql/algebra/OpVars.java
test/java/com/hp/hpl/jena/sparql/algebra/TestOpVar.java
Author: andy
Date: Sat Apr 13 19:44:20 2013
New Revision: 1467681
URL: http://svn.apache.org/r1467681
Log:
Rename OpVars.patternVars as more accurate OpVars.visibleVars
Deprecate OpVars.allVars (unstable across renaming for scoping)
Added:
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestOpVar.java
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVars.java
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVars.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVars.java?rev=1467681&r1=1467680&r2=1467681&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVars.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVars.java Sat Apr 13 19:44:20 2013
@@ -26,6 +26,7 @@ import java.util.Set ;
import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.graph.Triple ;
import com.hp.hpl.jena.query.SortCondition ;
+import com.hp.hpl.jena.sparql.ARQInternalErrorException ;
import com.hp.hpl.jena.sparql.algebra.OpWalker.WalkerVisitor ;
import com.hp.hpl.jena.sparql.algebra.op.* ;
import com.hp.hpl.jena.sparql.core.BasicPattern ;
@@ -37,20 +38,25 @@ import com.hp.hpl.jena.sparql.pfunction.
public class OpVars
{
- public static Set<Var> patternVars(Op op)
+ /** @deprecated use {@linkplain #visibleVars} */
+ @Deprecated
+ public static Set<Var> patternVars(Op op) { return visibleVars(op) ; }
+
+ public static Set<Var> visibleVars(Op op)
{
Set<Var> acc = new HashSet<Var>() ;
- patternVars(op, acc) ;
+ visibleVars(op, acc) ;
return acc ;
}
- public static void patternVars(Op op, Set<Var> acc)
+ public static void visibleVars(Op op, Set<Var> acc)
{
- //OpWalker.walk(op, new OpVarsPattern(acc)) ;
- OpVisitor visitor = new OpVarsPattern(acc) ;
- OpWalker.walk(new WalkerVisitorSkipMinus(visitor), op) ;
+ OpVarsPattern visitor = new OpVarsPattern(acc) ;
+ OpWalker.walk(new WalkerVisitorVisible(visitor, acc), op) ;
}
-
+
+ /** @deprecated Not stable across scope renaming. Use {@linkplain #visibleVars} */
+ @Deprecated
public static Collection<Var> allVars(Op op)
{
Set<Var> acc = new HashSet<Var>() ;
@@ -58,9 +64,13 @@ public class OpVars
return acc ;
}
+ /** @deprecated Not stable across scope renaming. Use {@linkplain #visibleVars} */
+ @Deprecated
+ // All mentioned variables regardless of scope/visibility.
public static void allVars(Op op, Set<Var> acc)
{
- OpWalker.walk(op, new OpVarsQuery(acc)) ;
+ OpVarsQuery visitor = new OpVarsQuery(acc) ;
+ OpWalker.walk(op, visitor) ;
}
public static Collection<Var> vars(BasicPattern pattern)
@@ -76,14 +86,27 @@ public class OpVars
addVarsFromTriple(acc, triple) ;
}
- /** Don't accumulate RHS of OpMinus*/
- static class WalkerVisitorSkipMinus extends WalkerVisitor
+
+ /** Do project and don't walk into it. MINUS vars aren't visiible either */
+ private static class WalkerVisitorVisible extends WalkerVisitor
{
- public WalkerVisitorSkipMinus(OpVisitor visitor)
+ private final Collection<Var> acc ;
+
+ public WalkerVisitorVisible(OpVarsPattern visitor, Collection<Var> acc)
{
super(visitor) ;
+ this.acc = acc ;
}
-
+
+ @Override
+ public void visit(OpProject op)
+ {
+ before(op) ;
+ // Skip Project subop.
+ acc.addAll(op.getVars()) ;
+ after(op) ;
+ }
+
@Override
public void visit(OpMinus op)
{
@@ -96,6 +119,26 @@ public class OpVars
}
}
+// /** Don't accumulate RHS of OpMinus*/
+// private static class WalkerVisitorVisible extends WalkerVisitorProjectDirect
+// {
+// public WalkerVisitorVisible(OpVarsPattern visitor, Collection<Var> acc)
+// {
+// super(visitor, acc) ;
+// }
+//
+// @Override
+// public void visit(OpMinus op)
+// {
+// before(op) ;
+// if ( op.getLeft() != null ) op.getLeft().visit(this) ;
+// // Skip right.
+// //if ( op.getRight() != null ) op.getRight().visit(this) ;
+// if ( visitor != null ) op.visit(visitor) ;
+// after(op) ;
+// }
+// }
+
private static class OpVarsPattern extends OpVisitorBase
{
// The possibly-set-vars
@@ -152,12 +195,13 @@ public class OpVars
@Override
public void visit(OpProject opProject)
- {
- // Seems a tad wasteful to do all that work then throw it away.
- // But it needs the walker redone.
- // Better: extend a Walking visitor - OpWalker.Walker
- acc.clear() ;
- acc.addAll(opProject.getVars()) ;
+ {
+ // The walker should have handled this.
+ throw new ARQInternalErrorException() ;
+ // Code to do it without walker support ...
+// // Seems a tad wasteful to do all that work then throw it away.
+// acc.clear() ;
+// acc.addAll(opProject.getVars()) ;
}
@Override
Added: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestOpVar.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestOpVar.java?rev=1467681&view=auto
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestOpVar.java (added)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestOpVar.java Sat Apr 13 19:44:20 2013
@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hp.hpl.jena.sparql.algebra;
+
+import java.util.Arrays ;
+import java.util.Collection ;
+import java.util.HashSet ;
+import java.util.List ;
+
+import org.apache.jena.atlas.junit.BaseTest ;
+import org.junit.Test ;
+
+import com.hp.hpl.jena.sparql.core.Var ;
+import com.hp.hpl.jena.sparql.sse.SSE ;
+
+public class TestOpVar extends BaseTest
+{
+ @Test public void opvar_01() { opVarPattern("(bgp (?s :p ?o))", "s", "o") ; }
+ @Test public void opvar_02() { opVarPattern("(leftjoin (bgp (?s :p ?o)) (bgp (?s1 :p ?o1)) )", "s1", "o1", "s", "o") ; }
+ @Test public void opvar_03() { opVarPattern("(leftjoin (bgp (?s :p ?o)) (bgp (?s :p ?o)) )", "s", "o") ; }
+
+ @Test public void opvar_04() { opVarPattern("(project (?s) (bgp(?s :p ?o)))", "s") ; }
+ @Test public void opvar_05() { opVarPattern("(minus (bgp (?s :p ?o)) (bgp (?s1 :p ?o1)) )", "s", "o") ; }
+ @Test public void opvar_06() { opVarPattern("(join (project (?x) (bgp(?x :p ?z))) (bgp(?s :p 1)) )", "x", "s") ; }
+
+ private static void opVarPattern(String string, String... vars)
+ {
+ Op op = SSE.parseOp(string) ;
+ Collection<Var> c = OpVars.visibleVars(op) ;
+ check(vars, c) ;
+ }
+
+ private static void check(String[] varsExpected, Collection<Var> varsFound)
+ {
+ Var[] vars = new Var[varsExpected.length] ;
+ for ( int i = 0 ; i < varsExpected.length ; i++ )
+ {
+ Var v = Var.alloc(varsExpected[i]) ;
+ vars[i] = v ;
+ }
+
+ List<Var> varList = Arrays.asList(vars) ;
+ HashSet<Var> varSet = new HashSet<Var>() ;
+ varSet.addAll(varList) ;
+ assertEquals(varSet, varsFound) ;
+ }
+}
+