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 2018/04/29 15:10:00 UTC

[1/5] jena git commit: JENA-1534: Test for filter-only variables in EXISTS.

Repository: jena
Updated Branches:
  refs/heads/master ad5b4455c -> 52377b8e1


JENA-1534: Test for filter-only variables in EXISTS.

Tighten the classifer, assumes proper use of (sequence)
Relates to JENA-1167, JENA-1280.


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

Branch: refs/heads/master
Commit: 1bd5fdcf3ac0694e0bbabd2f8e63deb92d3c2bff
Parents: 4bf5e3c
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Apr 27 19:12:37 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Apr 27 19:15:04 2018 +0100

----------------------------------------------------------------------
 .../jena/sparql/engine/main/JoinClassifier.java | 19 +++++++++----
 .../jena/sparql/engine/main/VarFinder.java      | 12 ++++-----
 .../jena/sparql/algebra/TestClassify.java       | 28 +++++++++++++++-----
 .../jena/sparql/algebra/TestTransformQuads.java | 14 ++++++----
 .../sparql/algebra/optimize/TestOptimizer.java  |  2 +-
 5 files changed, 51 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/1bd5fdcf/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/JoinClassifier.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/JoinClassifier.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/JoinClassifier.java
index 3f3416c..58b1773 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/JoinClassifier.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/JoinClassifier.java
@@ -111,11 +111,20 @@ public class JoinClassifier
         // Step 1 : If there are any variables in the LHS that are filter-only or filter-before define,
         // we can't do anything.
         if ( ! vRightFilterOnly.isEmpty() ) {
-            // A tigher condition is to see of any of the getFilterOnly are possible from the
-            // left.  If not, then we can still use a sequence. 
-            // But an outer sequence may push arbitrary here so play safe on the argument
-            // this is a relative uncommon case.
-            return false ;
+            if ( SetUtils.intersectionP(vLeftFixed, vRightFilterOnly) ||
+                 SetUtils.intersectionP(vLeftOpt, vRightFilterOnly) ) {
+                if ( print )
+                    System.err.println("vRightFilterOnly has variables used in the left");
+                return false;
+            }
+            // JENA-1534 fixes this.
+//            // The above is the tigher condition to see of any of the getFilterOnly are
+//            // possible from the left. If not, then we can still use a sequence.
+//            // An outer sequence should not push arbitrary variables here but ... play
+//            // safe on the argument this is a relative uncommon case.
+//            if ( print )
+//                System.err.println("vRightFilterOnly.not isEmpty");
+//            return false;
         }
         
         // Step 2 : remove any variable definitely fixed from the floating sets

http://git-wip-us.apache.org/repos/asf/jena/blob/1bd5fdcf/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 8db255e..54533e0 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
@@ -89,11 +89,11 @@ public class VarFinder
     }
     
     public void print(PrintStream out) {
-        out.printf("  Filter:  %s\n", getFilter()) ;
-        out.printf("  Filter2: %s\n", getFilterOnly()) ;
-        out.printf("  Fixed :  %s\n", getFixed()) ;
-        out.printf("  Opt:     %s\n", getOpt()) ;
-        out.printf("  Assign:  %s\n", getAssign()) ;
+        out.printf("  Filter:       %s\n", getFilter()) ;
+        out.printf("  Filter only:  %s\n", getFilterOnly()) ;
+        out.printf("  Fixed :       %s\n", getFixed()) ;
+        out.printf("  Opt:          %s\n", getOpt()) ;
+        out.printf("  Assign:       %s\n", getAssign()) ;
     }
 
     private static class VarUsageVisitor 
@@ -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.getNonOpVarsMentioned(exprs);
+            Set<Var> vars = ExprVars.getVarsMentioned(exprs);
             filterMentions.addAll(vars) ;
             for ( Var v : vars ) {
                 if ( ! defines.contains(v) && (additionalDefines == null || ! additionalDefines.contains(v) ) )

http://git-wip-us.apache.org/repos/asf/jena/blob/1bd5fdcf/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 ea20e92..05db391 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
@@ -40,11 +40,9 @@ public class TestClassify extends BaseTest
 	{ classifyJ("{?s :p :o . { ?s :p ?o FILTER(?o) } }", true) ; }
 
     // JENA-1167
-    // This actually safe in this case but as general component.
-    // the JoinClassifier is not clever enough to know that ?o is completely
-    // unbound. It may be bound by whatever feeds into the potential sequence.
+    // This safe; ?o is not an input to the filter block.
     @Test public void testClassify_Join_04() 
-	{ classifyJ("{?s :p :o . { ?s :p :o FILTER(?o) } }", false) ; }
+	{ classifyJ("{?s :p :o . { ?s :p :o FILTER(?o) } }", true) ; }
 
     @Test public void testClassify_Join_05() 
 	{ classifyJ("{?s :p :o . { ?x :p :o FILTER(?s) } }", false) ; }
@@ -82,7 +80,7 @@ public class TestClassify extends BaseTest
 
 	// See testClassify_Join_04()
 	@Test public void testClassify_Join_14() 
-	{ classifyJ("{?s :p :o . { OPTIONAL { :s :p :o FILTER(?o) } } }", false) ; }
+	{ classifyJ("{?s :p :o . { OPTIONAL { :s :p :o FILTER(?o) } } }", true) ; }
 
     @Test public void testClassify_Join_14a() 
     { classifyJ("{?s :p :o . { OPTIONAL { :s :p ?o FILTER(?o) } } }", true) ; }
@@ -104,9 +102,8 @@ public class TestClassify extends BaseTest
     { classifyJ("{ ?x ?y ?z {SELECT ?s { ?s ?p ?o} } }", true) ; }
 
     // JENA-1167 : Use of a filter variable not in the LHS
-    // Could be safe but the optimizer is not spotting it. 
     @Test public void testClassify_Join_32() 
-    { classifyJ("{ GRAPH ?g { ?x ?y ?z } { FILTER (?a) } }", false) ; }
+    { classifyJ("{ GRAPH ?g { ?x ?y ?z } { FILTER (?a) } }", true) ; }
 
     // Use of a filter variable from the LHS
     @Test public void testClassify_Join_33() 
@@ -150,6 +147,18 @@ public class TestClassify extends BaseTest
         TestClassify.classifyJ(x1, true);
     }
     
+    // JENA-1167, JENA-1280, JENA-1534
+    @Test public void testClassify_Join_52() { 
+        String x1 = "{ ?s  ?p  ?V0 GRAPH ?g { ?s1  ?p  ?o1 FILTER EXISTS { _:b0  ?p  ?V1 } } }";
+        TestClassify.classifyJ(x1, true);
+    }
+    
+    // JENA-1167, JENA-1280, JENA-1534
+    @Test public void testClassify_Join_53() { 
+        String x1 = "{ ?s  ?p  ?V GRAPH ?g { ?s1  ?p  ?o1 FILTER EXISTS { _:b0  ?p  ?V } } }";
+        TestClassify.classifyJ(x1, false);
+    }
+
     public static void classifyJ(String pattern, boolean expected)
     {
         String qs1 = "PREFIX : <http://example/>\n" ;
@@ -160,6 +169,11 @@ public class TestClassify extends BaseTest
             fail("Not a join: "+pattern) ;
 
         boolean nonLinear = JoinClassifier.isLinear((OpJoin)op) ;
+        if ( nonLinear != expected ) {
+            System.out.println(query);
+            System.out.println(op);
+        }
+        
         assertEquals("Join: "+pattern, expected, nonLinear) ;
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/1bd5fdcf/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTransformQuads.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTransformQuads.java b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTransformQuads.java
index 019b800..403eec9 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTransformQuads.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/TestTransformQuads.java
@@ -75,10 +75,15 @@ public class TestTransformQuads extends BaseTest
     // ?g is unbound in the filter. 
     @Test public void quads20() { test ("{ GRAPH ?g { ?s ?p ?o GRAPH ?g1 { ?s1 ?p1 ?o1 FILTER (str(?g) = 'graphURI') } } }",
                                         "(assign ((?g ?*g0))" +
-                                        "   (join" +
-                                        "     (quadpattern (quad ?*g0 ?s ?p ?o))" +
-                                        "     (filter (= (str ?g) 'graphURI')" +
-                                        "       (quadpattern (quad ?g1 ?s1 ?p1 ?o1)))))"
+                                        "    (sequence" +
+                                        "        (quadpattern (quad ?*g0 ?s ?p ?o))" +
+                                        "        (filter (= (str ?g) 'graphURI')" +
+                                        "          (quadpattern (quad ?g1 ?s1 ?p1 ?o1)))))"
+// If untransformed.                                            
+//                                        "   (join" +
+//                                        "     (quadpattern (quad ?*g0 ?s ?p ?o))" +
+//                                        "     (filter (= (str ?g) 'graphURI')" +
+//                                        "       (quadpattern (quad ?g1 ?s1 ?p1 ?o1)))))"
                                         ) ; }
     
     @Test public void quads21() { test ("{ GRAPH ?g { ?s ?p ?o GRAPH ?g1 { ?s1 ?p1 ?o1 FILTER (str(?g1) = 'graphURI') } } }",
@@ -196,7 +201,6 @@ public class TestTransformQuads extends BaseTest
         if ( optimize )
             op = Algebra.optimize(op) ;
         op = Algebra.toQuadForm(op) ;
-        
         Op op2 = SSE.parseOp(StrUtils.strjoinNL(strExpected)) ;
         assertEquals(op2, op) ;
     }

http://git-wip-us.apache.org/repos/asf/jena/blob/1bd5fdcf/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 0f6d04f..75b98e1 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
@@ -450,7 +450,7 @@ public class TestOptimizer extends AbstractTestTransform
                                , "  }"
                                , "}"
             );
-        // Fro reference, which is ...
+        // For reference, which is ...
         String x = StrUtils.strjoinNL(
             "(join"
             ,"    (bgp (triple ?s ?p ?o))"


[3/5] jena git commit: Fix javadoc

Posted by an...@apache.org.
Fix javadoc


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

Branch: refs/heads/master
Commit: dbb0bab66e34095e02ab03793153badbc2804317
Parents: 1bd5fdc
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Apr 28 10:09:01 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat Apr 28 10:09:01 2018 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/jena/sparql/algebra/op/OpSequence.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/dbb0bab6/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpSequence.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpSequence.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpSequence.java
index 4dcc1f4..7046881 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpSequence.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/op/OpSequence.java
@@ -26,7 +26,7 @@ import org.apache.jena.sparql.algebra.Transform ;
 import org.apache.jena.sparql.sse.Tags ;
 import org.apache.jena.sparql.util.NodeIsomorphismMap ;
 
-/** A "sequence" is a join-like operation where it is know that the 
+/** A "sequence" is a join-like operation where it is known that
  * the output of one step can be fed into the input of the next 
  * (that is, no scoping issues arise). */
 


[5/5] jena git commit: JENA-1535: Merge commit 'refs/pull/410/head' of https://github.com/apache/jena

Posted by an...@apache.org.
JENA-1535: Merge commit 'refs/pull/410/head' of https://github.com/apache/jena

This closes #410.


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

Branch: refs/heads/master
Commit: 52377b8e1184c616b3fde00afe22c90d16238f7f
Parents: f5d7ffd 3632029
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Apr 29 16:04:08 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Apr 29 16:04:08 2018 +0100

----------------------------------------------------------------------
 jena-cmds/src/main/java/riotcmd/CmdLangParse.java | 12 +++++++++---
 jena-cmds/src/main/java/riotcmd/riot.java         |  3 ---
 2 files changed, 9 insertions(+), 6 deletions(-)
----------------------------------------------------------------------



[2/5] jena git commit: JENA-1535: Parse a specified language if given --syntax.

Posted by an...@apache.org.
JENA-1535: Parse a specified language if given --syntax.


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

Branch: refs/heads/master
Commit: 36320298fdb38a9db6674ba8604f679009326b13
Parents: ad5b445
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Apr 27 23:27:38 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Apr 27 23:49:56 2018 +0100

----------------------------------------------------------------------
 jena-cmds/src/main/java/riotcmd/CmdLangParse.java | 12 +++++++++---
 jena-cmds/src/main/java/riotcmd/riot.java         |  3 ---
 2 files changed, 9 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/36320298/jena-cmds/src/main/java/riotcmd/CmdLangParse.java
----------------------------------------------------------------------
diff --git a/jena-cmds/src/main/java/riotcmd/CmdLangParse.java b/jena-cmds/src/main/java/riotcmd/CmdLangParse.java
index 10d1d57..c14f220 100644
--- a/jena-cmds/src/main/java/riotcmd/CmdLangParse.java
+++ b/jena-cmds/src/main/java/riotcmd/CmdLangParse.java
@@ -218,8 +218,14 @@ public abstract class CmdLangParse extends CmdGeneral
         RDFParserBuilder builder = RDFParser.create();
         if ( baseURI != null )
             builder.base(baseURI);
-        Lang lang = selectLang(null, null, RDFLanguages.NQUADS) ;
-        builder.lang(lang);
+        if ( modLangParse.getLang() != null )
+            // Always use the command line specified syntax.
+            builder.forceLang(modLangParse.getLang());
+        else {
+            // Otherwise, use the command selected langauge, with N-Quads as the ultimate fallback.  
+            Lang lang = selectLang(null, null, RDFLanguages.NQUADS) ;
+            builder.lang(RDFLanguages.NQUADS);
+        }
 
         // Set the source.
         if ( filename.equals("-") ) {
@@ -234,7 +240,7 @@ public abstract class CmdLangParse extends CmdGeneral
         return parseRIOT(builder, filename);
     }
 
-    protected abstract Lang selectLang(String filename, ContentType contentType, Lang dftLang  ) ;
+    protected abstract Lang selectLang(String filename, ContentType contentType, Lang dftLang) ;
 
     protected ParseRecord parseRIOT(RDFParserBuilder builder, /*Info for the ProcessOutcome*/ String filename) {
         boolean checking = true ;

http://git-wip-us.apache.org/repos/asf/jena/blob/36320298/jena-cmds/src/main/java/riotcmd/riot.java
----------------------------------------------------------------------
diff --git a/jena-cmds/src/main/java/riotcmd/riot.java b/jena-cmds/src/main/java/riotcmd/riot.java
index 4ef6df8..d332d17 100644
--- a/jena-cmds/src/main/java/riotcmd/riot.java
+++ b/jena-cmds/src/main/java/riotcmd/riot.java
@@ -42,9 +42,6 @@ public class riot extends CmdLangParse
     @Override
     protected Lang selectLang(String filename, ContentType contentType, Lang dftLang)
     {
-        if ( modLangParse.getLang() != null )
-            return modLangParse.getLang() ;
-        
         if ( contentType != null && ! WebContent.matchContentType(WebContent.ctTextPlain, contentType) )
             return RDFLanguages.contentTypeToLang(contentType) ;
         


[4/5] jena git commit: JENA-1543: Merge commit 'refs/pull/409/head' of https://github.com/apache/jena

Posted by an...@apache.org.
JENA-1543: Merge commit 'refs/pull/409/head' of https://github.com/apache/jena

This closes #409.


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

Branch: refs/heads/master
Commit: f5d7ffd27b9df66e8d14ae41afe5d65a8edee3fc
Parents: ad5b445 dbb0bab
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Apr 29 16:03:20 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Apr 29 16:03:20 2018 +0100

----------------------------------------------------------------------
 .../jena/sparql/algebra/op/OpSequence.java      |  2 +-
 .../jena/sparql/engine/main/JoinClassifier.java | 19 +++++++++----
 .../jena/sparql/engine/main/VarFinder.java      | 12 ++++-----
 .../jena/sparql/algebra/TestClassify.java       | 28 +++++++++++++++-----
 .../jena/sparql/algebra/TestTransformQuads.java | 14 ++++++----
 .../sparql/algebra/optimize/TestOptimizer.java  |  2 +-
 6 files changed, 52 insertions(+), 25 deletions(-)
----------------------------------------------------------------------