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