Author: andy
Date: Wed Apr 17 11:36:25 2013
New Revision: 1468844

URL: http://svn.apache.org/r1468844
Log:
More optimizer tests.

Added:
    
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilters.java
      - copied, changed from r1468591, 
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestFilterTransform.java
Removed:
    
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestFilterTransform.java
Modified:
    
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/optimize/TestOptimizer.java

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=1468844&r1=1468843&r2=1468844&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
 Wed Apr 17 11:36:25 2013
@@ -19,7 +19,7 @@
 package com.hp.hpl.jena.sparql.algebra;
 
 
-import com.hp.hpl.jena.sparql.algebra.optimize.TestFilterTransform ;
+import com.hp.hpl.jena.sparql.algebra.optimize.TestTransformFilters ;
 import com.hp.hpl.jena.sparql.algebra.optimize.TestOptimizer ;
 import com.hp.hpl.jena.sparql.algebra.optimize.TestTransformMergeBGPs ;
 import com.hp.hpl.jena.sparql.algebra.optimize.TestVarRename ;
@@ -33,7 +33,7 @@ import org.junit.runners.Suite ;
     TestVarFinder.class
     , TestAlgebraTranslate.class
     , TestClassify.class
-    , TestFilterTransform.class
+    , TestTransformFilters.class
     , TestTransformQuads.class
 
     , TestVarRename.class

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=1468844&r1=1468843&r2=1468844&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
 Wed Apr 17 11:36:25 2013
@@ -200,6 +200,40 @@ public class TestOptimizer extends BaseT
         }
     }
     
+    @Test public void subQueryProject_01() {
+        String qs = StrUtils.strjoinNL
+            ( "SELECT *"
+            , "WHERE {"
+            , "    ?test ?p1 ?X." 
+            , "    { SELECT ?s1 ?test { ?test ?p2 ?o2 } }"
+            , "}") ; 
+        
+        String ops = StrUtils.strjoinNL
+            ("(sequence"
+            ,"  (bgp (triple ?test ?p1 ?X))"
+            ,"  (project (?s1 ?test)"
+            ,"    (bgp (triple ?test ?/p2 ?/o2))))"
+            ) ;
+        check(qs, ops) ;
+    }
+
+    @Test public void subQueryProject_02() {
+        String qs = StrUtils.strjoinNL
+            ( "SELECT *"
+            , "WHERE {"
+            , "    ?test ?p1 ?X." 
+            , "    { SELECT ?s1 { ?test ?p2 ?o2 } }"
+            , "}") ; 
+        
+        String ops = StrUtils.strjoinNL
+            ("(sequence"
+            ,"  (bgp (triple ?test ?p1 ?X))"
+            ,"  (project (?s1)"
+            ,"    (bgp (triple ?/test ?/p2 ?/o2))))"
+            ) ;
+        check(qs, ops) ;
+    }
+    
     @Test public void optimize_01()
     { 
         String queryString = "SELECT * { { ?s ?p ?x } UNION { ?s1 ?p1 ?x } 
FILTER(?x = <urn:x1> || ?x = <urn:x2>) }" ;

Copied: 
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilters.java
 (from r1468591, 
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestFilterTransform.java)
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilters.java?p2=jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilters.java&p1=jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestFilterTransform.java&r1=1468591&r2=1468844&rev=1468844&view=diff
==============================================================================
--- 
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestFilterTransform.java
 (original)
+++ 
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilters.java
 Wed Apr 17 11:36:25 2013
@@ -34,11 +34,12 @@ import com.hp.hpl.jena.sparql.algebra.op
 import com.hp.hpl.jena.sparql.algebra.optimize.TransformFilterPlacement ;
 import com.hp.hpl.jena.sparql.sse.SSE ;
 
-public class TestFilterTransform
+/** Tests of transforms related to filters */
+public class TestTransformFilters
 {
     public static junit.framework.Test suite()
     {
-        return new JUnit4TestAdapter(TestFilterTransform.class) ;
+        return new JUnit4TestAdapter(TestTransformFilters.class) ;
     }
     
     private Transform t_equality    = new TransformFilterEquality() ;
@@ -195,6 +196,163 @@ public class TestFilterTransform
             ) ;
     }
 
+    // Related to JENA-432
+    @Test public void optionalEqualitySubQuery_01() {
+        // Presence of ?test in the projection blocks the rewrite.
+        // (this is actually over cautious).
+        String qs = StrUtils.strjoinNL
+            ( "SELECT *"
+            , "WHERE {"
+            , "    ?test ?p1 ?X." 
+            , "    FILTER ( ?test = <http://localhost/t1> )"
+            , "    { SELECT ?s1 ?test { ?test ?p2 ?o2 } }"
+            , "}") ; 
+        
+        String ops = StrUtils.strjoinNL
+            ("(filter (= ?test <http://localhost/t1>)"
+            ,"    (sequence"
+            ,"      (bgp (triple ?test ?p1 ?X))"
+            ,"      (project (?s1 ?test)"
+            ,"        (bgp (triple ?test ?/p2 ?/o2)))))"
+            ) ;
+        TestOptimizer.check(qs, ops) ;
+    }
+    
+    // Related to JENA-432
+    @Test public void optionalEqualitySubQuery_02() {
+        String qs = StrUtils.strjoinNL
+            ( "SELECT *"
+            , "WHERE {"
+            , "    ?test ?p1 ?X." 
+            , "    FILTER ( ?test = <http://localhost/t1> )"
+            , "    { SELECT ?s1 { ?test ?p2 ?o2 } }"
+            , "}") ;
+        String ops = StrUtils.strjoinNL
+            ( "  (assign ((?test <http://localhost/t1>))"
+            , "    (sequence"
+            , "       (bgp (triple <http://localhost/t1> ?p1 ?X))"
+            , "       (project (?s1)"
+            , "         (bgp (triple ?/test ?/p2 ?/o2))) ))"
+            ) ;
+        
+        TestOptimizer.check(qs, ops) ;
+    }
+    
+    // JENA-383, simplified.
+    @Test public void optionalEquality_01() {
+        // Not optimized because the TransformFilterEquality does not notice
+        // ?x is fixed in the expression by the join.  
+        String qs = StrUtils.strjoinNL
+            ( "PREFIX : <http://example/> SELECT * {"
+              , "    OPTIONAL { ?x :q ?o }"
+              , "    FILTER(?x = :x)"
+              , "    ?x :p ?o2"
+              , "}"
+                ) ;
+        String ops = StrUtils.strjoinNL
+            ( "(filter (= ?x <http://example/x>)"
+            , "  (sequence"
+            , "     (conditional"
+            , "        (table unit)"
+            , "        (bgp (triple ?x <http://example/q> ?o)))"
+            , "     (bgp (triple ?x <http://example/p> ?o2))"
+            , " ))" 
+            ) ;
+        TestOptimizer.check(qs, ops) ;
+    }
+    
+    @Test public void optionalEqualityScope_01() {
+        String qs = StrUtils.strjoinNL
+            ( "PREFIX : <http://example/> SELECT * {"
+              , "    OPTIONAL { ?x :q ?o }"
+              , "    FILTER(?x = :x)"
+              , "    ?x :p ?o2"
+              , "}"
+                ) ;
+        // Possible transformation:
+        // Safe to transform:  This (sequence) always defined ?x 
+        String ops = StrUtils.strjoinNL
+            ("(assign ((?x <http://example/x>))"
+            , "   (sequence"
+            , "       (conditional"
+            , "         (table unit)"
+            , "         (bgp (triple <http://example/x> <http://example/q> 
?o)))"
+            , "       (bgp (triple <http://example/x> <http://example/p> 
?o2))))"
+            ) ;
+        // Currently :
+        String ops1 = StrUtils.strjoinNL
+            ("(filter (= ?x <http://example/x>)"
+            ,"  (sequence"
+            ,"    (conditional"
+            ,"      (table unit)"
+            ,"      (bgp (triple ?x <http://example/q> ?o)) )"
+            ,"    (bgp (triple ?x <http://example/p> ?o2)) ))"
+            ) ;
+        
+        TestOptimizer.check(qs, ops1) ;
+    }
+
+    // JENA-294 part II
+    @Test public void optionalEqualityScope_02() {
+        String qs = StrUtils.strjoinNL
+            ( "PREFIX : <http://example/> SELECT * {"
+              , "    ?x :p ?o2"
+              , "    OPTIONAL { ?x :q ?o }"
+              , "    FILTER(?x = :x)"
+              , "}"
+                ) ;
+        // Safe to transform:  ?x is fixed. 
+        String ops = StrUtils.strjoinNL
+            ( "(assign ((?x <http://example/x>))"
+            , "   (conditional"
+            , "     (bgp (triple <http://example/x> <http://example/p> ?o2))"
+            , "     (bgp (triple <http://example/x> <http://example/q> ?o))"
+            , "   ))"
+            ) ;
+        TestOptimizer.check(qs, ops) ;
+    }
+    
+    // JENA-294 part II
+    @Test public void optionalEqualityScope_03() {
+        String qs = StrUtils.strjoinNL
+            ( "PREFIX : <http://example/> SELECT * {"
+              , "    ?z :p ?o2"
+              , "    OPTIONAL { ?x :q ?o }"
+              , "    FILTER(?x = :x)"
+              , "}"
+                ) ;
+        // Unsafe to transform:  ?x is optional. 
+        String ops = StrUtils.strjoinNL
+            ( "(filter (= ?x <http://example/x>)"
+            , "   (conditional"
+            , "     (bgp (triple ?z <http://example/p> ?o2))"
+            , "     (bgp (triple ?x <http://example/q> ?o))"
+            , "))"
+            ) ;
+        TestOptimizer.check(qs, ops) ;
+    }
+
+    // Scope of variable (optional, defined) cases 
+    @Test public void test_OptEqualityScope_04() {
+        String qs = StrUtils.strjoinNL
+            ( "PREFIX : <http://example/> SELECT * {"
+              , "    OPTIONAL { ?x :q ?o }"
+              , "    FILTER(?x = :x)"
+              , "}"
+                ) ;
+        // Unsafe to transform:  This may not defined ?x, then FILTER -> 
unbound -> error -> false
+        String ops1 = StrUtils.strjoinNL
+            ("(filter (= ?x <http://example/x>)"
+            ,"    (conditional"
+            ,"      (table unit)"
+            ,"      (assign ((?x <http://example/x>))"
+            ,"        (bgp (triple <http://example/x> <http://example/q> 
?o)))))"
+            ) ;
+        
+        TestOptimizer.check(qs, ops1) ;
+    }
+
+    
     @Test public void disjunction01()
     {
         test("(filter (|| (= ?x <x>) (= ?x <y>)) (bgp ( ?s ?p ?x)) )",


Reply via email to