Author: rvesse
Date: Fri Apr 18 20:10:04 2014
New Revision: 1588554

URL: http://svn.apache.org/r1588554
Log:
Added additional test cases that pertain to JENA-628.  This is a sanitized 
version of a customer query in our regression suite where the changed filter 
placement behaviour broke the query when using the don't break BGPs mode.  As 
part of adding this test case I also found and fixed a case where filter 
pushing was not respecting the includeBGPs flag when considering whether to 
push into quadpatterns

Modified:
    
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/optimize/TestTransformFilterPlacement.java

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=1588554&r1=1588553&r2=1588554&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
 Fri Apr 18 20:10:04 2014
@@ -258,7 +258,7 @@ public class TransformFilterPlacement ex
     }
 
     private Placement placeOrWrapQuadPattern(ExprList exprs, OpQuadPattern 
pattern) {
-        return placeQuadPattern(exprs, pattern.getGraphNode(), 
pattern.getBasicPattern()) ;
+        return placeOrWrapQuadPattern(exprs, pattern.getGraphNode(), 
pattern.getBasicPattern()) ;
     }
 
     private Placement placeOrWrapQuadPattern(ExprList exprsIn, Node graphNode, 
BasicPattern pattern) {

Modified: 
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilterPlacement.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilterPlacement.java?rev=1588554&r1=1588553&r2=1588554&view=diff
==============================================================================
--- 
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilterPlacement.java
 (original)
+++ 
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestTransformFilterPlacement.java
 Fri Apr 18 20:10:04 2014
@@ -27,6 +27,7 @@ import com.hp.hpl.jena.sparql.algebra.Op
 import com.hp.hpl.jena.sparql.algebra.Transform ;
 import com.hp.hpl.jena.sparql.algebra.Transformer ;
 import com.hp.hpl.jena.sparql.sse.SSE ;
+import com.hp.hpl.jena.sparql.util.StringUtils;
 
 public class TestTransformFilterPlacement extends BaseTest { //extends 
AbstractTestTransform {
     
@@ -68,6 +69,58 @@ public class TestTransformFilterPlacemen
         testNoBGP("(filter (= ?x 123) (bgp (?s ?p ?x) (?s ?p ?x1) (?s ?p ?x2)) 
)",
                 null) ;
     }
+    
+    @Test public void place_bgp_06() {
+        test(StrUtils.strjoinNL("(filter (exprlist (|| (|| (|| (&& (< 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?startDate1) (< ?endDate1 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime>)) (&& (< 
?startDate1 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime>) (< 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?endDate1))) (&& (&& (<= ?startDate1 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime>) (<= 
?endDate1 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime>)) (<= 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?endDate1))) (&& (&& (<= 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?startDate1) (<= 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?endDate1)) (<= ?startDate1 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime>))) (! 
(sameTerm ?node2 <urn:foo>)))",
+                                " (quadpattern",
+                                "  (quad <urn:x-arq:DefaultGraphNode> ?inst1 
?arg1Pred1 <urn:foo>)",
+                                "  (quad <urn:x-arq:DefaultGraphNode> ?inst1 
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class1)",
+                                "  (quad <urn:x-arq:DefaultGraphNode> ?inst1 
?arg2Pred1 ?node2)",
+                                "  (quad <urn:x-arq:DefaultGraphNode> ?inst1 
?startDatePred1 ?startDate1)",
+                                "  (quad <urn:x-arq:DefaultGraphNode> ?inst1 
?endDatePred1 ?endDate1)",
+                                "  (quad <urn:x-arq:DefaultGraphNode> ?class1 
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <urn:class>)",
+                                "  (quad <urn:x-arq:DefaultGraphNode> ?class1 
<urn:pred1> ?arg1Pred1)",
+                                "  (quad <urn:x-arq:DefaultGraphNode> ?class1 
<urn:pred2> ?arg2Pred1)",
+                                "  (quad <urn:x-arq:DefaultGraphNode> ?class1 
<urn:predStartDate> ?startDatePred1)",
+                                "  (quad <urn:x-arq:DefaultGraphNode> ?class1 
<urn:predEndDate> ?endDatePred1)",
+                                "))"),
+            StrUtils.strjoinNL("(sequence",
+                               "  (filter (|| (|| (|| (&& (< 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?startDate1) (< ?endDate1 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime>)) (&& (< 
?startDate1 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime>) (< 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?endDate1))) (&& (&& (<= ?startDate1 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime>) (<= 
?endDate1 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime>)) (<= 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?endDate1))) (&& (&& (<= 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?startDate1) (<= 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?endDate1)) (<= ?startDate1 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime>)))",
+                               "   (sequence",
+                               "    (filter (! (sameTerm ?node2 <urn:foo>))",
+                               "       (quadpattern",
+                               "         (quad <urn:x-arq:DefaultGraphNode> 
?inst1 ?arg1Pred1 <urn:foo>)",
+                               "         (quad <urn:x-arq:DefaultGraphNode> 
?inst1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class1)",
+                               "         (quad <urn:x-arq:DefaultGraphNode> 
?inst1 ?arg2Pred1 ?node2)",
+                               "       ))",
+                               "     (quadpattern",
+                               "       (quad <urn:x-arq:DefaultGraphNode> 
?inst1 ?startDatePred1 ?startDate1)",
+                               "       (quad <urn:x-arq:DefaultGraphNode> 
?inst1 ?endDatePred1 ?endDate1)",
+                               "     )))",
+                               " (quadpattern",
+                               "   (quad <urn:x-arq:DefaultGraphNode> ?class1 
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <urn:class>)",
+                               "   (quad <urn:x-arq:DefaultGraphNode> ?class1 
<urn:pred1> ?arg1Pred1)",
+                               "   (quad <urn:x-arq:DefaultGraphNode> ?class1 
<urn:pred2> ?arg2Pred1)",
+                               "   (quad <urn:x-arq:DefaultGraphNode> ?class1 
<urn:predStartDate> ?startDatePred1)",
+                               "   (quad <urn:x-arq:DefaultGraphNode> ?class1 
<urn:predEndDate> ?endDatePred1)",
+                               " ))"));
+    }
+    
+    @Test public void place_bgp_06a() {
+        testNoBGP(StrUtils.strjoinNL("(filter (exprlist (|| (|| (|| (&& (< 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?startDate1) (< ?endDate1 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime>)) (&& (< 
?startDate1 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime>) (< 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?endDate1))) (&& (&& (<= ?startDate1 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime>) (<= 
?endDate1 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime>)) (<= 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?endDate1))) (&& (&& (<= 
\"2012-01-01T00:00:00\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?startDate1) (<= 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime> 
?endDate1)) (<= ?startDate1 
\"2012-12-31T23:59:59\"^^<http://www.w3.org/2001/XMLSchema#dateTime>))) (! 
(sameTerm ?node2 <urn:foo>)))",
+                                     " (quadpattern",
+                                     "  (quad <urn:x-arq:DefaultGraphNode> 
?inst1 ?arg1Pred1 <urn:foo>)",
+                                     "  (quad <urn:x-arq:DefaultGraphNode> 
?inst1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class1)",
+                                     "  (quad <urn:x-arq:DefaultGraphNode> 
?inst1 ?arg2Pred1 ?node2)",
+                                     "  (quad <urn:x-arq:DefaultGraphNode> 
?inst1 ?startDatePred1 ?startDate1)",
+                                     "  (quad <urn:x-arq:DefaultGraphNode> 
?inst1 ?endDatePred1 ?endDate1)",
+                                     "  (quad <urn:x-arq:DefaultGraphNode> 
?class1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <urn:class>)",
+                                     "  (quad <urn:x-arq:DefaultGraphNode> 
?class1 <urn:pred1> ?arg1Pred1)",
+                                     "  (quad <urn:x-arq:DefaultGraphNode> 
?class1 <urn:pred2> ?arg2Pred1)",
+                                     "  (quad <urn:x-arq:DefaultGraphNode> 
?class1 <urn:predStartDate> ?startDatePred1)",
+                                     "  (quad <urn:x-arq:DefaultGraphNode> 
?class1 <urn:predEndDate> ?endDatePred1)",
+                                     "))"), null);
+    }
 
     @Test public void place_no_match_01() {
         // Unbound
@@ -527,6 +580,7 @@ public class TestTransformFilterPlacemen
         Transform t_placement = new TransformFilterPlacement(includeBGPs) ;
         Op op1 = SSE.parseOp(input) ;
         Op op2 = Transformer.transform(t_placement, op1) ;
+        System.out.println(op2.toString());
         if ( output == null ) {
             // No transformation.
             Assert.assertEquals(op1, op2) ;


Reply via email to