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 2017/01/18 11:19:45 UTC

[4/4] jena git commit: JENA-1280: Variables in BGPs in EXISTS should not block join->sequence.

JENA-1280: Variables in BGPs in EXISTS should not block join->sequence.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/f07bff3b
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/f07bff3b
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/f07bff3b

Branch: refs/heads/master
Commit: f07bff3bfe909f9fa032ac4c0ce03414ac9ec5de
Parents: 771f740
Author: Andy Seaborne <an...@apache.org>
Authored: Wed Jan 18 09:46:34 2017 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Wed Jan 18 10:44:14 2017 +0000

----------------------------------------------------------------------
 .../jena/sparql/engine/main/VarFinder.java      |  4 +--
 .../jena/sparql/algebra/TestClassify.java       |  6 ++++
 .../sparql/algebra/optimize/TestOptimizer.java  | 37 ++++++++++++++++++--
 3 files changed, 43 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/f07bff3b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java
index a4bc61d..b781ba2 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/VarFinder.java
@@ -258,7 +258,7 @@ public class VarFinder
 
         // additionalDefines - set of variables which are defined is the filter is executed. 
         private void processExpr(ExprList exprs, Set<Var> additionalDefines) {
-            Set<Var> vars = ExprVars.getVarsMentioned(exprs);
+            Set<Var> vars = ExprVars.getNonOpVarsMentioned(exprs);
             filterMentions.addAll(vars) ;
             for ( Var v : vars ) {
                 if ( ! defines.contains(v) && (additionalDefines == null || ! additionalDefines.contains(v) ) )
@@ -325,7 +325,7 @@ public class VarFinder
             varExprList.forEachVarExpr((v,e)-> {
                 defines.add(v) ; // Expression may eval to error -> unset? 
                 if ( e != null )
-                    ExprVars.varsMentioned(assignMentions, e);
+                    ExprVars.nonOpVarsMentioned(assignMentions, e);
             }) ;
         }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/f07bff3b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestClassify.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestClassify.java b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestClassify.java
index 6e53804..ea20e92 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestClassify.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestClassify.java
@@ -144,6 +144,12 @@ public class TestClassify extends BaseTest
     @Test public void testClassify_Join_50() 
     { classifyJ("{ ?x ?y ?z { ?x1 ?y1 ?z1 MINUS { ?a ?b ?c } } UNION {} }", false) ; }
     
+    // JENA-1280
+    @Test public void testClassify_Join_51() { 
+        String x1 = "{ ?s ?p ?o   GRAPH ?g { ?s1 ?p ?o1 FILTER EXISTS {  [] ?p ?unique } }  }";
+        TestClassify.classifyJ(x1, true);
+    }
+    
     public static void classifyJ(String pattern, boolean expected)
     {
         String qs1 = "PREFIX : <http://example/>\n" ;

http://git-wip-us.apache.org/repos/asf/jena/blob/f07bff3b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestOptimizer.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestOptimizer.java b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestOptimizer.java
index 94c0b8d..2fc0f76 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestOptimizer.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestOptimizer.java
@@ -29,13 +29,16 @@ import org.apache.jena.sparql.core.VarExprList ;
 import org.apache.jena.sparql.expr.ExprVar ;
 import org.apache.jena.sparql.expr.nodevalue.NodeValueInteger ;
 import org.apache.jena.sparql.sse.SSE ;
+import org.apache.jena.system.JenaSystem;
 import org.junit.Test ;
 
 public class TestOptimizer extends AbstractTestTransform
 {
-    // These test call the whole optimzier.
+    static { JenaSystem.init(); }
+    
+    // These test calls of the whole optimzier.
     // A lot of the optimizer is tested by using the scripted queries.
-    // Theer are many tests of individual transforms.
+    // There are many tests of individual transforms.
     
     @Test public void slice_order_to_topn_01() 
     {
@@ -435,5 +438,35 @@ public class TestOptimizer extends AbstractTestTransform
             ,"    (bgp (triple ?s ?p ?label))))") ;
         check(qs, expected) ;
     }
+    
+    // JENA-1280 : Test that variables in FILTER EXISTS do not block sequence
+    @Test public void joinSequence_01() {
+        String queryString = StrUtils.strjoinNL(
+                               "SELECT * {"
+                               , "  ?s ?p ?o"
+                               , "  GRAPH ?g {"
+                               , "    ?s1 ?p ?o1 ."
+                               , "    FILTER EXISTS {  [] ?p ?unique } ."
+                               , "  }"
+                               , "}"
+            );
+        // Fro reference, which is ...
+        String x = StrUtils.strjoinNL(
+            "(join"
+            ,"    (bgp (triple ?s ?p ?o))"
+            ,"    (graph ?g"
+            ,"      (filter (exists (bgp (triple ??0 ?p ?unique)))"
+            ,"        (bgp (triple ?s1 ?p ?o1)))))"
+            );
+        
+        String optimized = StrUtils.strjoinNL(
+                                      "(sequence"
+                                      ,"    (bgp (triple ?s ?p ?o))"
+                                      ,"    (graph ?g"
+                                      ,"      (filter (exists (bgp (triple ??0 ?p ?unique)))"
+                                      ,"        (bgp (triple ?s1 ?p ?o1)))))"
+                                      );
 
+        check(queryString, optimized);
+    }
 }