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/02/03 12:46:30 UTC

svn commit: r1441897 - in /jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql: algebra/BeforeAfterVisitor.java algebra/OpVisitorByType.java algebra/OpVisitorByTypeBase.java algebra/OpWalker.java algebra/Transformer.java expr/ExprTransformer.java

Author: andy
Date: Sun Feb  3 11:46:29 2013
New Revision: 1441897

URL: http://svn.apache.org/viewvc?rev=1441897&view=rev
Log:
Treat OpFilter as it's own type of Visitor, not simply an Op1, 
because Ops can occur in expressions (e.g. NOT EXISTS).
This refactoring does not change any banhaviour but does
highlight that fact that transformations need to be aware
of this fact. See also ApplyTransformVisitor.

Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/BeforeAfterVisitor.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByType.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByTypeBase.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpWalker.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/ExprTransformer.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/BeforeAfterVisitor.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/BeforeAfterVisitor.java?rev=1441897&r1=1441896&r2=1441897&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/BeforeAfterVisitor.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/BeforeAfterVisitor.java Sun Feb  3 11:46:29 2013
@@ -18,11 +18,7 @@
 
 package com.hp.hpl.jena.sparql.algebra;
 
-import com.hp.hpl.jena.sparql.algebra.op.Op0 ;
-import com.hp.hpl.jena.sparql.algebra.op.Op1 ;
-import com.hp.hpl.jena.sparql.algebra.op.Op2 ;
-import com.hp.hpl.jena.sparql.algebra.op.OpExt ;
-import com.hp.hpl.jena.sparql.algebra.op.OpN ;
+import com.hp.hpl.jena.sparql.algebra.op.* ;
 
 public class BeforeAfterVisitor extends OpVisitorByType//implements OpVisitor
 {
@@ -39,45 +35,43 @@ public class BeforeAfterVisitor extends 
         this.afterVisitor = afterVisitor ;
     }
     
-    private void before(Op op)
-    { 
+    private void before(Op op) { 
         if ( beforeVisitor != null )
             op.visit(beforeVisitor) ;
     }
 
-    private void after(Op op)
-    {
+    private void after(Op op) {
         if ( afterVisitor != null )
             op.visit(afterVisitor) ;
     }
 
     @Override
-    protected void visit0(Op0 op)
-    { 
+    protected void visit0(Op0 op) { 
+        before(op) ; op.visit(mainVisitor) ; after(op) ;
+    }
+
+    @Override
+    protected void visit1(Op1 op) { 
         before(op) ; op.visit(mainVisitor) ; after(op) ;
     }
 
     @Override
-    protected void visit1(Op1 op)
-    { 
+    protected void visit2(Op2 op) { 
         before(op) ; op.visit(mainVisitor) ; after(op) ;
     }
 
     @Override
-    protected void visit2(Op2 op)
-    { 
+    protected void visitN(OpN op) { 
         before(op) ; op.visit(mainVisitor) ; after(op) ;
     }
 
     @Override
-    protected void visitExt(OpExt op)
-    { 
+    protected void visitFilter(OpFilter op) { 
         before(op) ; op.visit(mainVisitor) ; after(op) ;
     }
 
     @Override
-    protected void visitN(OpN op)
-    { 
+    protected void visitExt(OpExt op) { 
         before(op) ; op.visit(mainVisitor) ; after(op) ;
     }
 }

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByType.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByType.java?rev=1441897&r1=1441896&r2=1441897&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByType.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByType.java Sun Feb  3 11:46:29 2013
@@ -36,6 +36,8 @@ public abstract class OpVisitorByType im
     
     protected abstract void visitExt(OpExt op) ;    
 
+    protected abstract void visitFilter(OpFilter op) ;
+    
     protected void visitModifer(OpModifier opMod)
     { visit1(opMod) ; }
 
@@ -101,7 +103,7 @@ public abstract class OpVisitorByType im
 
     @Override
     public void visit(OpFilter opFilter)
-    { visit1(opFilter) ; }
+    { visitFilter(opFilter) ; }
 
     @Override
     public void visit(OpGraph opGraph)

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByTypeBase.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByTypeBase.java?rev=1441897&r1=1441896&r2=1441897&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByTypeBase.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByTypeBase.java Sun Feb  3 11:46:29 2013
@@ -38,6 +38,9 @@ public class OpVisitorByTypeBase extends
     protected void visitExt(OpExt op) {}    
 
     @Override
+    protected void visitFilter(OpFilter op) {}    
+
+    @Override
     protected void visitModifer(OpModifier opMod) 
     { visit1(opMod) ; }
 

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpWalker.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpWalker.java?rev=1441897&r1=1441896&r2=1441897&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpWalker.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpWalker.java Sun Feb  3 11:46:29 2013
@@ -20,11 +20,7 @@ package com.hp.hpl.jena.sparql.algebra;
 
 import java.util.Iterator ;
 
-import com.hp.hpl.jena.sparql.algebra.op.Op0 ;
-import com.hp.hpl.jena.sparql.algebra.op.Op1 ;
-import com.hp.hpl.jena.sparql.algebra.op.Op2 ;
-import com.hp.hpl.jena.sparql.algebra.op.OpExt ;
-import com.hp.hpl.jena.sparql.algebra.op.OpN ;
+import com.hp.hpl.jena.sparql.algebra.op.* ;
 
 /** Apply a visitor to the whole structure of Ops, recursively.
  *  Visit sub Op before the current level
@@ -92,6 +88,13 @@ public class OpWalker
         }
 
         @Override
+        protected void visitFilter(OpFilter op)
+        {
+            // Treat OpFilter as an Op1 (not perfect - seeJENA 340)
+            visit1(op) ;
+        }
+        
+        @Override
         protected void visit2(Op2 op)
         {
             before(op) ;

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java?rev=1441897&r1=1441896&r2=1441897&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java Sun Feb  3 11:46:29 2013
@@ -127,7 +127,8 @@ public class Transformer
         private final ExprTransformApplyTransform exprTransform ;
 
         private final Deque<Op> stack = new ArrayDeque<Op>() ;
-        protected final Op pop() { return stack.pop(); }
+        protected final Op pop() 
+        { return stack.pop(); }
         
         protected final void push(Op op)
         { 
@@ -332,6 +333,14 @@ public class Transformer
         }
         
         @Override
+        protected void visitFilter(OpFilter op) {
+            Op subOp = null ;
+            if ( op.getSubOp() != null )
+                subOp = pop() ;
+            push(op.apply(transform, subOp)) ;
+        }
+        
+        @Override
         protected void visitExt(OpExt op)
         {
             push(transform.transform(op)) ;
@@ -432,6 +441,10 @@ public class Transformer
         { result = op.apply(transform) ; }
 
         @Override
+        protected void visitFilter(OpFilter op)
+        { result = op.apply(transform, op.getSubOp()) ; }
+        
+        @Override
         protected void visitExt(OpExt op)
         { op.apply(transform) ; }
     }

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/ExprTransformer.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/ExprTransformer.java?rev=1441897&r1=1441896&r2=1441897&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/ExprTransformer.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/ExprTransformer.java Sun Feb  3 11:46:29 2013
@@ -149,7 +149,7 @@ public class ExprTransformer
             if ( funcOp.getArgs() != null )
                 x = process(funcOp.getArgs()) ;
             Op op = funcOp.getGraphPattern() ;
-            // Caution: the experssion can have a pattern inside it.
+            // Caution: the expression can have a pattern inside it.
             // See also: ExprTransformApplyTransform which does much the same in a different way.
             if ( transform instanceof ExprTransformOp )
             {