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);
+ }
}