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 2012/08/11 19:12:17 UTC

svn commit: r1371979 - in /jena/trunk/jena-arq/src: main/java/com/hp/hpl/jena/sparql/algebra/optimize/ test/java/com/hp/hpl/jena/sparql/algebra/ test/java/com/hp/hpl/jena/sparql/algebra/optimize/

Author: andy
Date: Sat Aug 11 17:12:16 2012
New Revision: 1371979

URL: http://svn.apache.org/viewvc?rev=1371979&view=rev
Log:
Push filter-equality through UNION.

Added:
    jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestPattern2Join.java
      - copied, changed from r1370004, jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestPattern2Join.java
Removed:
    jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestPattern2Join.java
Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterEquality.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterPlacement.java
    jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java
    jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestFilterTransform.java
    jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterEquality.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterEquality.java?rev=1371979&r1=1371978&r2=1371979&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterEquality.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterEquality.java Sat Aug 11 17:12:16 2012
@@ -116,7 +116,7 @@ public class TransformFilterEquality ext
             return true ; 
         }
         
-        if ( op instanceof OpJoin )
+        if ( op instanceof OpJoin || op instanceof OpUnion)
         {
             Op2 op2 = (Op2)op ;
             return safeToTransform(exprs, op2.getLeft()) && safeToTransform(exprs, op2.getRight()) ; 

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterPlacement.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterPlacement.java?rev=1371979&r1=1371978&r2=1371979&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterPlacement.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/TransformFilterPlacement.java Sat Aug 11 17:12:16 2012
@@ -98,8 +98,8 @@ public class TransformFilterPlacement ex
     
     private static Op transform(ExprList exprs, Set<Var> varsScope, Op x)
     {
-        // OpAssign could be done if the assignment and exprs are independent.
-        // TODO Dispatch by visitor
+        // OpAssign/OpExtend could be done if the assignment and exprs are independent.
+        // TODO Dispatch by visitor??
         if ( x instanceof OpBGP )
             return transformFilterBGP(exprs, varsScope, (OpBGP)x) ;
 

Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java?rev=1371979&r1=1371978&r2=1371979&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java Sat Aug 11 17:12:16 2012
@@ -20,7 +20,6 @@ package com.hp.hpl.jena.sparql.algebra;
 
 
 import com.hp.hpl.jena.sparql.algebra.optimize.TestOptimizer ;
-import com.hp.hpl.jena.sparql.algebra.optimize.TestPattern2Join ;
 import com.hp.hpl.jena.sparql.algebra.optimize.TestTransformMergeBGPs ;
 import com.hp.hpl.jena.sparql.algebra.optimize.TestVarRename ;
 

Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestFilterTransform.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestFilterTransform.java?rev=1371979&r1=1371978&r2=1371979&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestFilterTransform.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestFilterTransform.java Sat Aug 11 17:12:16 2012
@@ -132,7 +132,20 @@ public class TestFilterTransform
              "(filter (= ?x1 <x>) (leftjoin (bgp ( ?s ?p ?x))  (bgp ( ?s ?p ?x1))))") ;
     }
 
-    
+    @Test public void equality13()
+    {
+        test("(filter (= ?x1 <x>) (join (bgp ( ?s ?p ?x1))  (bgp ( ?s ?p ?x1))))",
+             t_equality,
+             "(assign((?x1 <x>))  (join (bgp ( ?s ?p <x>))  (bgp ( ?s ?p <x>))))") ;
+    }
+
+    @Test public void equality14()
+    {
+        test("(filter (= ?x1 <x>) (union (bgp ( ?s ?p ?x1))  (bgp ( ?s ?p ?x1))))",
+             t_equality,
+             "(assign((?x1 <x>))  (union (bgp ( ?s ?p <x>))  (bgp ( ?s ?p <x>))))") ;
+    }
+
     @Test public void disjunction01()
     {
         test("(filter (|| (= ?x <x>) (= ?x <y>)) (bgp ( ?s ?p ?x)) )",

Copied: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestPattern2Join.java (from r1370004, jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestPattern2Join.java)
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestPattern2Join.java?p2=jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestPattern2Join.java&p1=jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestPattern2Join.java&r1=1370004&r2=1371979&rev=1371979&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestPattern2Join.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TestPattern2Join.java Sat Aug 11 17:12:16 2012
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package com.hp.hpl.jena.sparql.algebra.optimize;
+package com.hp.hpl.jena.sparql.algebra;
 
 import org.junit.Test ;
 import org.openjena.atlas.junit.BaseTest ;
@@ -27,6 +27,7 @@ import com.hp.hpl.jena.query.QueryFactor
 import com.hp.hpl.jena.sparql.algebra.Algebra ;
 import com.hp.hpl.jena.sparql.algebra.Op ;
 import com.hp.hpl.jena.sparql.algebra.Transformer ;
+import com.hp.hpl.jena.sparql.algebra.optimize.TransformPattern2Join ;
 import com.hp.hpl.jena.sparql.sse.SSE ;
 
 public class TestPattern2Join extends BaseTest

Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java?rev=1371979&r1=1371978&r2=1371979&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java Sat Aug 11 17:12:16 2012
@@ -20,6 +20,7 @@ package com.hp.hpl.jena.sparql.algebra.o
 
 import org.junit.Test ;
 import org.openjena.atlas.junit.BaseTest ;
+import org.openjena.atlas.lib.StrUtils ;
 
 import com.hp.hpl.jena.query.ARQ ;
 import com.hp.hpl.jena.query.Query ;
@@ -49,7 +50,6 @@ public class TestOptimizer extends BaseT
         check(queryString, opExpectedString) ;
     }
 
-
     @Test public void query_rename_02()
     {
         String queryString = 
@@ -60,14 +60,7 @@ public class TestOptimizer extends BaseT
             "    (bgp (triple ?s ?p ?o))\n" + 
             "    (slice _ 50\n" + 
             "      (project (?v)\n" + 
-
-//            // Old - no BGP merge
-//            "        (sequence\n" + 
-//            "          (bgp (triple ?/x ?/y ?v))\n" + 
-//            "          (bgp (triple ?/a ?/y ?/w)))" +
-            // Merged BGP
             "(bgp (triple ?/x ?/y ?v) (triple ?/a ?/y ?/w))" +
-
             "))))" ; 
         check(queryString, opExpectedString) ;
     }
@@ -313,6 +306,25 @@ public class TestOptimizer extends BaseT
         }
     }
     
+    @Test public void optimize_01()
+    { 
+        String queryString = "SELECT * { { ?s ?p ?x } UNION { ?s1 ?p1 ?x } FILTER(?x = <urn:x1> || ?x = <urn:x2>) }" ;
+        String opExpectedString =  StrUtils.strjoinNL(
+                                            "(disjunction",
+                                            "    (assign ((?x <urn:x1>))" ,
+                                            "      (union" ,
+                                            "        (bgp (triple ?s ?p <urn:x1>))" ,
+                                            "        (bgp (triple ?s1 ?p1 <urn:x1>))))" ,
+                                            "    (assign ((?x <urn:x2>))" ,
+                                            "      (union" ,
+                                            "        (bgp (triple ?s ?p <urn:x2>))" ,
+                                            "        (bgp (triple ?s1 ?p1 <urn:x2>)))))" ) ;
+        check(queryString, opExpectedString) ; 
+    }
+
+    
+
+    
     private static void check(String queryString, String opExpectedString)
     {
         queryString = "PREFIX : <http://example/>\n"+queryString ;