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/13 14:05:05 UTC

[1/5] jena git commit: Implement missing override in OpVarsPattern visitor

Repository: jena
Updated Branches:
  refs/heads/master 77b313d50 -> db818ea3f


Implement missing override in OpVarsPattern visitor


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

Branch: refs/heads/master
Commit: 537ffba8c3802595b9a35e5ac423acb54a775bb6
Parents: 3390615
Author: Jeremy Coulon <je...@3ds.com>
Authored: Mon Apr 9 14:40:51 2018 +0200
Committer: Jeremy Coulon <je...@3ds.com>
Committed: Mon Apr 9 14:40:51 2018 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/jena/sparql/algebra/OpVars.java    | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/537ffba8/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java
index 70f649e..61891e7 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/OpVars.java
@@ -223,6 +223,11 @@ public class OpVars
             addVar(acc, quadPattern.getGraphNode()) ;
             VarUtils.addVars(acc, quadPattern.getBasicPattern()) ;
         }
+        
+        @Override
+        public void visit(OpQuadBlock quadBlock) {
+            VarUtils.addVars(acc, quadBlock.getPattern()) ;
+        }
 
         @Override
         public void visit(OpTriple opTriple) {


[4/5] jena git commit: UTs for EXISTS/NOT EXISTS.

Posted by an...@apache.org.
UTs for EXISTS/NOT EXISTS.


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

Branch: refs/heads/master
Commit: 50f277fbcb697c9e57d039cc5dac2a24f08e89e1
Parents: f547447
Author: Jeremy Coulon <je...@3ds.com>
Authored: Mon Apr 9 15:48:18 2018 +0200
Committer: Jeremy Coulon <je...@3ds.com>
Committed: Mon Apr 9 15:48:18 2018 +0200

----------------------------------------------------------------------
 .../jena/sparql/core/TestSpecialGraphNames.java | 36 ++++++++++++++++++++
 1 file changed, 36 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/50f277fb/jena-arq/src/test/java/org/apache/jena/sparql/core/TestSpecialGraphNames.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/TestSpecialGraphNames.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/TestSpecialGraphNames.java
index 77fd1e2..c9d06e6 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/TestSpecialGraphNames.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/TestSpecialGraphNames.java
@@ -217,6 +217,42 @@ public class TestSpecialGraphNames {
         List<Binding> results = exec("(minus (bgp (?s ?p ?o)) (bgp (<x2> ?p ?o)))", QUADBLOCKS) ;
         assertEquals(2, results.size()) ;
     }
+    
+    @Test
+    public void filter_exists_1() {
+        List<Binding> results = exec("(filter (exists (bgp (?s <p> <o>))) (bgp (?s ?p ?o)))", TRIPLES) ;
+        assertEquals(1, results.size()) ;
+    }
+    
+    @Test
+    public void filter_exists_2() {
+        List<Binding> results = exec("(filter (exists (bgp (?s <p> <o>))) (bgp (?s ?p ?o)))", QUADS) ;
+        assertEquals(1, results.size()) ;
+    }
+    
+    @Test
+    public void filter_exists_3() {
+        List<Binding> results = exec("(filter (exists (bgp (?s <p> <o>))) (bgp (?s ?p ?o)))", QUADBLOCKS) ;
+        assertEquals(1, results.size()) ;
+    }
+    
+    @Test
+    public void filter_notexists_1() {
+        List<Binding> results = exec("(filter (notexists (bgp (?s <p> <o>))) (bgp (?s ?p ?o)))", TRIPLES) ;
+        assertEquals(4, results.size()) ;
+    }
+    
+    @Test
+    public void filter_notexists_2() {
+        List<Binding> results = exec("(filter (notexists (bgp (?s <p> <o>))) (bgp (?s ?p ?o)))", QUADS) ;
+        assertEquals(4, results.size()) ;
+    }
+    
+    @Test
+    public void filter_notexists_3() {
+        List<Binding> results = exec("(filter (notexists (bgp (?s <p> <o>))) (bgp (?s ?p ?o)))", QUADBLOCKS) ;
+        assertEquals(4, results.size()) ;
+    }
 
     private List<Binding> exec(String string, Mode mode) {
         Op op = op(string, mode) ;


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

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

This closes #393.


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

Branch: refs/heads/master
Commit: db818ea3f70e15b9b0c9cd9bec0e16c6fa9ae6e6
Parents: 77b313d 50f277f
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Apr 13 14:53:24 2018 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Apr 13 14:53:24 2018 +0100

----------------------------------------------------------------------
 .../org/apache/jena/sparql/algebra/Algebra.java |   8 +-
 .../apache/jena/sparql/algebra/AlgebraQuad.java |  13 ++
 .../org/apache/jena/sparql/algebra/OpVars.java  |   5 +
 .../sparql/algebra/TransformQuadBlockGraph.java | 128 +++++++++++++++++++
 .../jena/sparql/core/TestSpecialGraphNames.java |  59 ++++++++-
 5 files changed, 211 insertions(+), 2 deletions(-)
----------------------------------------------------------------------



[3/5] jena git commit: UT for MINUS and QuadBlock/QuadPattern

Posted by an...@apache.org.
UT for MINUS and QuadBlock/QuadPattern


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

Branch: refs/heads/master
Commit: f5474471d6eef0de453810213f221731416eb1ea
Parents: 8aef2f1
Author: Jeremy Coulon <je...@3ds.com>
Authored: Mon Apr 9 15:24:45 2018 +0200
Committer: Jeremy Coulon <je...@3ds.com>
Committed: Mon Apr 9 15:24:45 2018 +0200

----------------------------------------------------------------------
 .../jena/sparql/core/TestSpecialGraphNames.java | 23 +++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/f5474471/jena-arq/src/test/java/org/apache/jena/sparql/core/TestSpecialGraphNames.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/TestSpecialGraphNames.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/TestSpecialGraphNames.java
index 364fa54..77fd1e2 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/TestSpecialGraphNames.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/TestSpecialGraphNames.java
@@ -18,6 +18,7 @@
 
 package org.apache.jena.sparql.core;
 
+import static org.apache.jena.sparql.core.TestSpecialGraphNames.Mode.QUADBLOCKS ;
 import static org.apache.jena.sparql.core.TestSpecialGraphNames.Mode.QUADS ;
 import static org.apache.jena.sparql.core.TestSpecialGraphNames.Mode.TRIPLES ;
 import static org.junit.Assert.assertEquals ;
@@ -58,7 +59,7 @@ public class TestSpecialGraphNames {
             });
     }
     
-    static enum Mode { TRIPLES, QUADS } 
+    static enum Mode { TRIPLES, QUADS, QUADBLOCKS } 
     
     static String x1 = StrUtils.strjoinNL("(dataset",
                                           "  (graph (<s> <p> <x>) (<x> <p> <o>) (<x2> <p> <o1>) (<x2> <p> <o3>) (<x2> <p> <o4>))",
@@ -198,6 +199,24 @@ public class TestSpecialGraphNames {
         List<Binding> results = exec("(graph <g2> (bgp (<s2> ?p ?o)))", TRIPLES) ;
         assertEquals(2, results.size()) ;
     }
+    
+    @Test
+    public void minus_1() {
+        List<Binding> results = exec("(minus (bgp (?s ?p ?o)) (bgp (<x2> ?p ?o)))", TRIPLES) ;
+        assertEquals(2, results.size()) ;
+    }
+    
+    @Test
+    public void minus_2() {
+        List<Binding> results = exec("(minus (bgp (?s ?p ?o)) (bgp (<x2> ?p ?o)))", QUADS) ;
+        assertEquals(2, results.size()) ;
+    }
+    
+    @Test
+    public void minus_3() {
+        List<Binding> results = exec("(minus (bgp (?s ?p ?o)) (bgp (<x2> ?p ?o)))", QUADBLOCKS) ;
+        assertEquals(2, results.size()) ;
+    }
 
     private List<Binding> exec(String string, Mode mode) {
         Op op = op(string, mode) ;
@@ -213,6 +232,8 @@ public class TestSpecialGraphNames {
         Op op = SSE.parseOp(pattern) ;
         if ( mode == Mode.QUADS )
             op = Algebra.toQuadForm(op) ;
+        else if ( mode == Mode.QUADBLOCKS )
+            op = Algebra.toQuadBlockForm(op) ;
         return op ;
     }
 }


[2/5] jena git commit: Helpers to transform BGP to QuadBlock

Posted by an...@apache.org.
Helpers to transform BGP to QuadBlock


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

Branch: refs/heads/master
Commit: 8aef2f1da4e44dcc8bf1d55356f32b284f57d2e2
Parents: 537ffba
Author: Jeremy Coulon <je...@3ds.com>
Authored: Mon Apr 9 15:23:58 2018 +0200
Committer: Jeremy Coulon <je...@3ds.com>
Committed: Mon Apr 9 15:23:58 2018 +0200

----------------------------------------------------------------------
 .../org/apache/jena/sparql/algebra/Algebra.java |   8 +-
 .../apache/jena/sparql/algebra/AlgebraQuad.java |  13 ++
 .../sparql/algebra/TransformQuadBlockGraph.java | 128 +++++++++++++++++++
 3 files changed, 148 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/8aef2f1d/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Algebra.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Algebra.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Algebra.java
index 7657c6d..32728ac 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Algebra.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/Algebra.java
@@ -83,12 +83,18 @@ public class Algebra
         return new AlgebraGenerator().compile(elt) ;
     }
 
-    /** Turn an algebra expression into quad form */
+    /** Turn an algebra expression into quadpattern form */
     public static Op toQuadForm(Op op)
     {
         return AlgebraQuad.quadize(op) ;
     }
     
+    /** Turn an algebra expression into quadblock form */
+    public static Op toQuadBlockForm(Op op)
+    {
+        return AlgebraQuad.quadizeBlock(op) ;
+    }
+    
     /** Transform an algebra expression so that default graph is union of the named graphs. */
     public static Op unionDefaultGraph(Op op)
     {

http://git-wip-us.apache.org/repos/asf/jena/blob/8aef2f1d/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraQuad.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraQuad.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraQuad.java
index c00d887..cb0e454 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraQuad.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraQuad.java
@@ -57,6 +57,19 @@ public class AlgebraQuad
         return Transformer.transformSkipService(qg, null, op, before, after) ;
     }
     
+    public static Op quadizeBlock(Op op)
+    {
+        final Deque<QuadSlot> stack = new ArrayDeque<>() ;
+        QuadSlot qSlot = new QuadSlot(Quad.defaultGraphNodeGenerated, Quad.defaultGraphNodeGenerated) ;  
+        stack.push(qSlot) ;             // Starting condition
+        
+        OpVisitor before = new Pusher(stack) ;
+        OpVisitor after = new Popper(stack) ;
+        
+        TransformQuadBlockGraph qg = new TransformQuadBlockGraph(stack, before, after) ;
+        return Transformer.transformSkipService(qg, null, op, before, after) ;
+    }
+    
     /** This is the record of the transformation.
      *  The rewriteGraphName is the node to put in the graph slot of the quad.
      *  The actualGraphName is the node used in SPARQL.

http://git-wip-us.apache.org/repos/asf/jena/blob/8aef2f1d/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadBlockGraph.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadBlockGraph.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadBlockGraph.java
new file mode 100644
index 0000000..5ad1cce
--- /dev/null
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadBlockGraph.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.sparql.algebra;
+
+import java.util.Deque ;
+
+import org.apache.jena.graph.Node ;
+import org.apache.jena.sparql.algebra.AlgebraQuad.QuadSlot ;
+import org.apache.jena.sparql.algebra.op.* ;
+import org.apache.jena.sparql.core.Var ;
+import org.apache.jena.sparql.expr.ExprVar ;
+
+/**
+ * Transform that rewrites an algebra into quadblock form
+ *
+ */
+public class TransformQuadBlockGraph extends TransformCopy
+{
+    private Deque<QuadSlot> tracker ;
+    private OpVisitor beforeVisitor ;
+    private OpVisitor afterVisitor ;
+
+    public TransformQuadBlockGraph(Deque<QuadSlot> tracker, OpVisitor before, OpVisitor after) {
+        this.tracker = tracker ;
+        this.beforeVisitor = before ;
+        this.afterVisitor = after ;
+    }
+    
+    private Node getNode() { return tracker.peek().rewriteGraphName ; }
+
+    @Override
+    public Op transform(OpGraph opGraph, Op op) {
+        
+        //System.err.println("transform(OpGraph)\n"+opGraph+op) ;
+        
+        // ?? Could just leave the (graph) in place always - just rewrite BGPs. 
+        boolean noPattern = false ;
+        
+        /* One case to consider is when the pattern for the GRAPH
+         * statement includes uses the variable inside the GRAPH clause. 
+         * In this case, we must rename away the inner variable
+         * to allow stream execution via index joins, 
+         * and then put back the value via an assign.
+         * (This is what QueryIterGraph does using a streaming join
+         * for triples)
+         */
+
+        // Note: op is already quads by this point.
+        // Must test scoping by the subOp of GRAPH
+        
+        QuadSlot qSlot = tracker.peek() ;
+        Node actualName= qSlot.actualGraphName ;
+        Node rewriteName= qSlot.rewriteGraphName ; 
+        
+        if ( OpBGP.isBGP(op) )
+        {
+            // Empty BGP
+            if ( ((OpBGP)op).getPattern().isEmpty() )
+                noPattern = true ;
+        }
+        else if ( op instanceof OpTable )
+        {
+            // Empty BGP compiled to a unit table
+            if ( ((OpTable)op).isJoinIdentity() )
+                noPattern = true ;
+        }
+        
+        if ( noPattern )
+        {
+            // The case of something like:
+            // GRAPH ?g {} or GRAPH <v> {}
+            // which are ways of accessing the names in the dataset.
+            return new OpDatasetNames(opGraph.getNode()) ;
+        }
+        
+        if ( actualName != rewriteName )
+            op = OpAssign.assign(op, Var.alloc(actualName), new ExprVar(rewriteName)) ;
+
+        // Drop (graph...) because inside nodes
+        // have been converted to quads.
+        return op ;
+    }
+    
+    @Override
+    public Op transform(OpPropFunc opPropFunc, Op subOp) {
+        if ( opPropFunc.getSubOp() != subOp )
+            opPropFunc = new OpPropFunc(opPropFunc.getProperty(), opPropFunc.getSubjectArgs(), opPropFunc.getObjectArgs(), subOp) ;
+        // Put the (graph) back round it so the property function works on the named graph.
+        return new OpGraph(getNode() , opPropFunc) ;
+    }
+    
+    @Override
+    public Op transform(OpPath opPath) {
+        // Put the (graph) back round it
+        // ?? inc default graph node.
+        return new OpGraph(getNode() , opPath) ;
+        // Does not get removed by transform above because this is
+        // not the OpGraph that gets walked by the transform.  
+    }
+    
+    @Override
+    public Op transform(OpBGP opBGP) { 
+        //System.out.print("transform(OpBGP) : "+getNode()+"\n"+opBGP) ;
+        return OpQuadBlock.create(getNode(), opBGP.getPattern()) ;
+    }
+    
+    @Override
+    public Op transform(OpExt opExt) {
+        return opExt.apply(this, beforeVisitor, afterVisitor) ;
+    }
+
+}
\ No newline at end of file