Author: andy
Date: Fri Jul 12 16:43:53 2013
New Revision: 1502606
URL: http://svn.apache.org/r1502606
Log:
OpQuadBlock - a list of quads without the condition they all have the same
graph node.
Added:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuadBlock.java
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitor.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorBase.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByType.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transform.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformBase.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformCopy.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformWrapper.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpBase.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuadPattern.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/BasicPattern.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/QuadPattern.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/ExecutionDispatch.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/OpExecutor.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/ref/EvaluatorDispatch.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/Tags.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/writers/WriterOp.java
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpAsQuery.java
Fri Jul 12 16:43:53 2013
@@ -20,6 +20,8 @@ package com.hp.hpl.jena.sparql.algebra;
import java.util.* ;
+import org.apache.jena.atlas.lib.NotImplemented ;
+
import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.graph.Triple ;
import com.hp.hpl.jena.query.Query ;
@@ -270,6 +272,13 @@ public class OpAsQuery
}
@Override
+ public void visit(OpQuadBlock quadBlock)
+ {
+ // Gather into OpQuadPatterns.
+ throw new NotImplemented("OpQuadBlock") ;
+ }
+
+ @Override
public void visit(OpPath opPath)
{
ElementPathBlock epb = new ElementPathBlock() ;
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitor.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitor.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitor.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitor.java
Fri Jul 12 16:43:53 2013
@@ -25,6 +25,7 @@ public interface OpVisitor
// Op0
public void visit(OpBGP opBGP) ;
public void visit(OpQuadPattern quadPattern) ;
+ public void visit(OpQuadBlock quadBlock) ;
public void visit(OpTriple opTriple) ;
public void visit(OpQuad opQuad) ;
public void visit(OpPath opPath) ;
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorBase.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorBase.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorBase.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorBase.java
Fri Jul 12 16:43:53 2013
@@ -27,6 +27,8 @@ public class OpVisitorBase implements Op
@Override public void visit(OpBGP opBGP) {}
@Override public void visit(OpQuadPattern quadPattern) {}
+
+ @Override public void visit(OpQuadBlock quadBlock) {}
@Override public void visit(OpTriple opTriple) {}
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByType.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByType.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByType.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/OpVisitorByType.java
Fri Jul 12 16:43:53 2013
@@ -50,6 +50,10 @@ public abstract class OpVisitorByType im
{ visit0(quadPattern) ; }
@Override
+ public void visit(OpQuadBlock quadBlock)
+ { visit0(quadBlock) ; }
+
+ @Override
public void visit(OpTriple opTriple)
{ visit0(opTriple) ; }
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transform.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transform.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transform.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transform.java
Fri Jul 12 16:43:53 2013
@@ -32,6 +32,7 @@ public interface Transform
public Op transform(OpPath opPath) ;
public Op transform(OpDatasetNames dsNames) ;
public Op transform(OpQuadPattern quadPattern) ;
+ public Op transform(OpQuadBlock quadBlock) ;
public Op transform(OpNull opNull) ;
// Op1
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformBase.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformBase.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformBase.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformBase.java
Fri Jul 12 16:43:53 2013
@@ -44,6 +44,8 @@ public class TransformBase implements Tr
public Op transform(OpDatasetNames dsNames) { return dsNames ;
}
@Override
public Op transform(OpQuadPattern quadPattern) { return
quadPattern ; }
+ @Override
+ public Op transform(OpQuadBlock quadBlock) { return quadBlock
; }
@Override
public Op transform(OpFilter opFilter, Op subOp) { return opFilter
; }
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformCopy.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformCopy.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformCopy.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformCopy.java
Fri Jul 12 16:43:53 2013
@@ -41,6 +41,8 @@ public class TransformCopy implements Tr
@Override
public Op transform(OpQuadPattern opQuadPattern) { return
xform(opQuadPattern) ; }
@Override
+ public Op transform(OpQuadBlock opQuadBlock) { return
xform(opQuadBlock) ; }
+ @Override
public Op transform(OpTriple opTriple) { return
xform(opTriple) ; }
@Override
public Op transform(OpQuad opQuad) { return
xform(opQuad) ; }
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformWrapper.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformWrapper.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformWrapper.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformWrapper.java
Fri Jul 12 16:43:53 2013
@@ -52,6 +52,8 @@ public class TransformWrapper implements
public Op transform(OpDatasetNames dsNames) { return
transform.transform(dsNames) ; }
@Override
public Op transform(OpQuadPattern quadPattern) { return
transform.transform(quadPattern) ; }
+ @Override
+ public Op transform(OpQuadBlock quadBlock) { return
transform.transform(quadBlock) ; }
@Override
public Op transform(OpFilter opFilter, Op subOp) { return
transform.transform(opFilter, subOp) ; }
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpBase.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpBase.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpBase.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpBase.java
Fri Jul 12 16:43:53 2013
@@ -73,7 +73,8 @@ public abstract class OpBase extends Pri
static final int HashSequence = 0xB8 ;
static final int HashLabel = 0xB9 ;
static final int HashTriple = 0xBA ;
- static final int HashQuad = 0xBB ;
+ static final int HashQuad = 0xBB ;
+ static final int HashQuadBlock = 0xBC ;
}
Added:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuadBlock.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuadBlock.java?rev=1502606&view=auto
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuadBlock.java
(added)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuadBlock.java
Fri Jul 12 16:43:53 2013
@@ -0,0 +1,141 @@
+/*
+ * 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 com.hp.hpl.jena.sparql.algebra.op;
+
+import java.util.ArrayList ;
+import java.util.List ;
+
+import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.graph.Triple ;
+import com.hp.hpl.jena.sparql.algebra.Op ;
+import com.hp.hpl.jena.sparql.algebra.OpVisitor ;
+import com.hp.hpl.jena.sparql.algebra.Transform ;
+import com.hp.hpl.jena.sparql.core.BasicPattern ;
+import com.hp.hpl.jena.sparql.core.Quad ;
+import com.hp.hpl.jena.sparql.core.QuadPattern ;
+import com.hp.hpl.jena.sparql.sse.Tags ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
+
+/** A list of quads.
+ *
+ * <code>OpQuadBlock</code> is anny colelction of quads, whereas
+ * {@linkplain OpQuadPattern} is quads with the same graph node.
+ * The flip in naming is historical.
+ */
+public class OpQuadBlock extends Op0
+{
+ public static boolean isQuadBlock(Op op)
+ {
+ return (op instanceof OpQuadBlock ) ;
+ }
+
+ private final QuadPattern quads ;
+
+ // A QuadPattern is a block of quads with the same graph arg.
+ // i.e. a BasicGraphPattern. This gets the blank node scoping right.
+
+ // Quads are for a specific quad store.
+
+ // Later, we may introduce OpQuadBlock for this and OpQuadPattern becomes
+ // a sequence of such blocks.
+
+
+
+ public static OpQuadBlock create(Node quadNode, BasicPattern triples) {
+ QuadPattern qp = new QuadPattern() ;
+ for ( Triple t : triples ) {
+ qp.add(new Quad(quadNode, t)) ;
+ }
+ return new OpQuadBlock(qp) ;
+ }
+
+ public OpQuadBlock() { quads = new QuadPattern() ; }
+ public OpQuadBlock(QuadPattern quads) { this.quads = quads ; }
+ public OpQuadBlock(OpQuadPattern quadPattern) { this.quads =
quadPattern.getPattern() ; }
+
+ public QuadPattern getPattern() {
+ return quads ;
+ }
+
+ public boolean isEmpty() { return quads.size() == 0 ; }
+
+ @Override
+ public String getName() { return Tags.tagQuadBlock ; }
+ @Override
+ public Op apply(Transform transform) { return transform.transform(this)
; }
+ @Override
+ public void visit(OpVisitor opVisitor) { opVisitor.visit(this) ; }
+ @Override
+ public Op0 copy() { return new OpQuadBlock(quads) ; }
+
+ public List<OpQuadPattern> convert() {
+ List<OpQuadPattern> x = new ArrayList<OpQuadPattern>() ;
+ Node gn = null ;
+ BasicPattern bgp = null ;
+
+ for ( Quad q : quads ) {
+ if ( gn == null || ! gn.equals(q.getGraph()) ) {
+ if ( gn != null )
+ x.add(new OpQuadPattern(gn, bgp)) ;
+ gn = q.getGraph() ;
+ bgp = new BasicPattern() ;
+ }
+ bgp.add(q.asTriple());
+ }
+ x.add(new OpQuadPattern(gn, bgp)) ;
+ return x ;
+ }
+
+ /** Convenience - convert to OpQuadPatterns which are more widely used
(currently?) */
+ public Op convertOp() {
+ if ( quads.size() == 0 )
+ return OpTable.empty() ;
+
+ if ( quads.size() == 1 )
+ {
+ Quad q = quads.get(0) ;
+ BasicPattern bgp = new BasicPattern() ;
+ bgp.add(q.asTriple()) ;
+ return new OpQuadPattern(q.getGraph(), bgp) ;
+ }
+
+ List<OpQuadPattern> x = convert() ;
+ OpSequence ops = OpSequence.create() ;
+ for ( OpQuadPattern oqp : x )
+ ops.add(oqp);
+ return ops ;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int calcHashCode = OpBase.HashBasicGraphPattern ;
+ calcHashCode ^= quads.hashCode() ;
+ return calcHashCode ;
+ }
+
+ @Override
+ public boolean equalTo(Op other, NodeIsomorphismMap labelMap)
+ {
+ if ( ! ( other instanceof OpQuadBlock ) ) return false ;
+ OpQuadBlock opQuad = (OpQuadBlock)other ;
+ return quads.equiv(opQuad.quads, labelMap) ;
+ }
+
+}
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuadPattern.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuadPattern.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuadPattern.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/op/OpQuadPattern.java
Fri Jul 12 16:43:53 2013
@@ -29,6 +29,11 @@ import com.hp.hpl.jena.sparql.core.QuadP
import com.hp.hpl.jena.sparql.sse.Tags ;
import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
+/** The main Op used in converting SPARQL algebra to quad form.
+ * OpQuadPattern reflects the fact that quads come in per-GRAPH units.
+ * {@linkplain OpQuadBlock} is for a general containers of quads
+ * without any contract on the quads sharing the same garph node.
+ */
public class OpQuadPattern extends Op0
{
public static boolean isQuadPattern(Op op)
@@ -42,12 +47,10 @@ public class OpQuadPattern extends Op0
private QuadPattern quads = null ;
// A QuadPattern is a block of quads with the same graph arg.
- // i.e. a BasicGraphPattern. This gets the blank node scoping right.
-
- // Quads are for a specific quad store.
-
- // Later, we may introduce OpQuadBlock for this and OpQuadPattern becomes
- // a sequence of such blocks.
+ // i.e. a BasicGraphPattern.
+
+ // Match switch so OpQuadPattern is a
+ // a sequence of OpQuadBlocks.
public OpQuadPattern(Node quadNode, BasicPattern triples)
{
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/BasicPattern.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/BasicPattern.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/BasicPattern.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/BasicPattern.java
Fri Jul 12 16:43:53 2013
@@ -101,7 +101,7 @@ public class BasicPattern implements Ite
{
IndentedLineBuffer out = new IndentedLineBuffer() ;
- SerializationContext sCxt = SSE.sCxt((SSE.defaultPrefixMapWrite)) ;
+ SerializationContext sCxt = SSE.sCxt(SSE.defaultPrefixMapWrite) ;
boolean first = true ;
for ( Triple t : triples )
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/QuadPattern.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/QuadPattern.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/QuadPattern.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/QuadPattern.java
Fri Jul 12 16:43:53 2013
@@ -27,6 +27,8 @@ import org.apache.jena.atlas.io.Indented
import com.hp.hpl.jena.sparql.serializer.SerializationContext ;
import com.hp.hpl.jena.sparql.sse.SSE ;
import com.hp.hpl.jena.sparql.sse.writers.WriterNode ;
+import com.hp.hpl.jena.sparql.util.Iso ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
/** A class whose purpose is to give a name to a collection of quads
@@ -53,26 +55,39 @@ public class QuadPattern implements Iter
@Override
public int hashCode() { return quads.hashCode() ; }
+
@Override
- public boolean equals(Object other)
- {
- if ( this == other ) return true ;
- if ( ! ( other instanceof QuadPattern) )
+ public boolean equals(Object other) {
+ if ( this == other )
+ return true ;
+ if ( !(other instanceof QuadPattern) )
return false ;
QuadPattern bp = (QuadPattern)other ;
return quads.equals(bp.quads) ;
}
+
+ public boolean equiv(QuadPattern other, NodeIsomorphismMap isoMap) {
+ if ( this.quads.size() != other.quads.size() )
+ return false ;
+
+ for (int i = 0; i < this.quads.size(); i++) {
+ Quad q1 = get(i) ;
+ Quad q2 = other.get(i) ;
+
+ if ( !Iso.quadIso(q1, q2, isoMap) )
+ return false ;
+ }
+ return true ;
+ }
@Override
- public String toString()
- {
+ public String toString() {
IndentedLineBuffer out = new IndentedLineBuffer() ;
-
+
SerializationContext sCxt = SSE.sCxt((SSE.defaultPrefixMapWrite)) ;
-
+
boolean first = true ;
- for ( Quad quad : quads )
- {
+ for (Quad quad : quads) {
if ( !first )
out.print(" ") ;
else
@@ -83,7 +98,7 @@ public class QuadPattern implements Iter
WriterNode.outputPlain(out, quad, sCxt) ;
out.print(")") ;
}
- out.flush();
+ out.flush() ;
return out.toString() ;
}
}
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/ExecutionDispatch.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/ExecutionDispatch.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/ExecutionDispatch.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/ExecutionDispatch.java
Fri Jul 12 16:43:53 2013
@@ -69,6 +69,14 @@ class ExecutionDispatch implements OpVis
}
@Override
+ public void visit(OpQuadBlock quadBlock)
+ {
+ QueryIterator input = pop() ;
+ QueryIterator qIter = opExecutor.execute(quadBlock, input) ;
+ push(qIter) ;
+ }
+
+ @Override
public void visit(OpTriple opTriple)
{
QueryIterator input = pop() ;
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/OpExecutor.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/OpExecutor.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/OpExecutor.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/main/OpExecutor.java
Fri Jul 12 16:43:53 2013
@@ -184,6 +184,11 @@ public class OpExecutor
OpGraph op = new OpGraph(quadPattern.getGraphNode(), opBGP) ;
return execute(op, input) ;
}
+
+ protected QueryIterator execute(OpQuadBlock quadBlock, QueryIterator
input) {
+ Op op = quadBlock.convertOp() ;
+ return executeOp(op, input) ;
+ }
protected QueryIterator execute(OpPath opPath, QueryIterator input) {
return new QueryIterPath(opPath.getTriplePath(), input, execCxt) ;
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/ref/EvaluatorDispatch.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/ref/EvaluatorDispatch.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/ref/EvaluatorDispatch.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/ref/EvaluatorDispatch.java
Fri Jul 12 16:43:53 2013
@@ -75,6 +75,13 @@ public class EvaluatorDispatch implement
}
@Override
+ public void visit(OpQuadBlock quadBlock)
+ {
+ push(eval(quadBlock.convertOp())) ;
+ //push(Eval.evalQuadPattern(quadBlock, evaluator)) ;
+ }
+
+ @Override
public void visit(OpTriple opTriple)
{
visit(opTriple.asBGP()) ;
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/Tags.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/Tags.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/Tags.java
(original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/Tags.java Fri
Jul 12 16:43:53 2013
@@ -58,6 +58,7 @@ public class Tags
// SPARQL algebra
public static final String tagBGP = "bgp" ;
public static final String tagQuadPattern = "quadpattern" ;
+ public static final String tagQuadBlock = "quadblock" ;
public static final String tagFilter = "filter" ;
// public static final String tagGraph = "graph" ;
public static final String tagLabel = "label" ;
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java
Fri Jul 12 16:43:53 2013
@@ -18,11 +18,7 @@
package com.hp.hpl.jena.sparql.sse.builders;
-import java.util.ArrayList ;
-import java.util.HashMap ;
-import java.util.Iterator ;
-import java.util.List ;
-import java.util.Map ;
+import java.util.* ;
import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.graph.Triple ;
@@ -30,44 +26,8 @@ import com.hp.hpl.jena.query.Query ;
import com.hp.hpl.jena.query.SortCondition ;
import com.hp.hpl.jena.sparql.algebra.Op ;
import com.hp.hpl.jena.sparql.algebra.Table ;
-import com.hp.hpl.jena.sparql.algebra.op.OpAssign ;
-import com.hp.hpl.jena.sparql.algebra.op.OpBGP ;
-import com.hp.hpl.jena.sparql.algebra.op.OpConditional ;
-import com.hp.hpl.jena.sparql.algebra.op.OpDatasetNames ;
-import com.hp.hpl.jena.sparql.algebra.op.OpDiff ;
-import com.hp.hpl.jena.sparql.algebra.op.OpDisjunction ;
-import com.hp.hpl.jena.sparql.algebra.op.OpDistinct ;
-import com.hp.hpl.jena.sparql.algebra.op.OpExtend ;
-import com.hp.hpl.jena.sparql.algebra.op.OpFilter ;
-import com.hp.hpl.jena.sparql.algebra.op.OpGraph ;
-import com.hp.hpl.jena.sparql.algebra.op.OpGroup ;
-import com.hp.hpl.jena.sparql.algebra.op.OpJoin ;
-import com.hp.hpl.jena.sparql.algebra.op.OpLabel ;
-import com.hp.hpl.jena.sparql.algebra.op.OpLeftJoin ;
-import com.hp.hpl.jena.sparql.algebra.op.OpList ;
-import com.hp.hpl.jena.sparql.algebra.op.OpMinus ;
-import com.hp.hpl.jena.sparql.algebra.op.OpN ;
-import com.hp.hpl.jena.sparql.algebra.op.OpNull ;
-import com.hp.hpl.jena.sparql.algebra.op.OpOrder ;
-import com.hp.hpl.jena.sparql.algebra.op.OpPath ;
-import com.hp.hpl.jena.sparql.algebra.op.OpProcedure ;
-import com.hp.hpl.jena.sparql.algebra.op.OpProject ;
-import com.hp.hpl.jena.sparql.algebra.op.OpPropFunc ;
-import com.hp.hpl.jena.sparql.algebra.op.OpQuad ;
-import com.hp.hpl.jena.sparql.algebra.op.OpQuadPattern ;
-import com.hp.hpl.jena.sparql.algebra.op.OpReduced ;
-import com.hp.hpl.jena.sparql.algebra.op.OpSequence ;
-import com.hp.hpl.jena.sparql.algebra.op.OpService ;
-import com.hp.hpl.jena.sparql.algebra.op.OpSlice ;
-import com.hp.hpl.jena.sparql.algebra.op.OpTable ;
-import com.hp.hpl.jena.sparql.algebra.op.OpTopN ;
-import com.hp.hpl.jena.sparql.algebra.op.OpTriple ;
-import com.hp.hpl.jena.sparql.algebra.op.OpUnion ;
-import com.hp.hpl.jena.sparql.core.BasicPattern ;
-import com.hp.hpl.jena.sparql.core.Quad ;
-import com.hp.hpl.jena.sparql.core.TriplePath ;
-import com.hp.hpl.jena.sparql.core.Var ;
-import com.hp.hpl.jena.sparql.core.VarExprList ;
+import com.hp.hpl.jena.sparql.algebra.op.* ;
+import com.hp.hpl.jena.sparql.core.* ;
import com.hp.hpl.jena.sparql.expr.Expr ;
import com.hp.hpl.jena.sparql.expr.ExprAggregator ;
import com.hp.hpl.jena.sparql.expr.ExprList ;
@@ -106,6 +66,7 @@ public class BuilderOp
{
addBuild(Tags.tagBGP, buildBGP) ;
addBuild(Tags.tagQuadPattern, buildQuadPattern) ;
+ addBuild(Tags.tagQuadBlock, buildQuadBlock) ;
addBuild(Tags.tagTriple, buildTriple) ;
addBuild(Tags.tagQuad, buildQuad) ;
addBuild(Tags.tagTriplePath, buildTriplePath) ;
@@ -289,6 +250,28 @@ public class BuilderOp
}
} ;
+ final protected Build buildQuadBlock = new Build()
+ {
+ @Override
+ public Op make(ItemList list)
+ {
+ Node g = null ;
+ QuadPattern qp = new QuadPattern() ;
+ for ( int i = 1 ; i < list.size() ; i++ )
+ {
+ Item item = list.get(i) ;
+ if ( ! item.isList() )
+ BuilderLib.broken(item, "Not a quad structure") ;
+ Quad q = BuilderGraph.buildQuad(item.getList()) ;
+ qp.add(q) ;
+ }
+
+ OpQuadBlock op = new OpQuadBlock(qp) ;
+ return op ;
+ }
+ } ;
+
+
final protected Build buildTriple = new Build(){
@Override
public Op make(ItemList list)
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/writers/WriterOp.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/writers/WriterOp.java?rev=1502606&r1=1502605&r2=1502606&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/writers/WriterOp.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/sse/writers/WriterOp.java
Fri Jul 12 16:43:53 2013
@@ -167,6 +167,22 @@ public class WriterOp
}
@Override
+ public void visit(OpBGP opBGP)
+ {
+ if ( opBGP.getPattern().size() == 1 )
+ {
+ start(opBGP, NoNL) ;
+ write(opBGP.getPattern(), true) ;
+ finish(opBGP) ;
+ return ;
+ }
+
+ start(opBGP, NL) ;
+ write(opBGP.getPattern(), false) ;
+ finish(opBGP) ;
+ }
+
+ @Override
public void visit(OpQuadPattern opQuadP)
{
QuadPattern quads = opQuadP.getPattern() ;
@@ -178,28 +194,24 @@ public class WriterOp
return ;
}
start(opQuadP, NL) ;
- for ( Quad quad : quads )
- {
- formatQuad(quad) ;
- out.println() ;
- }
+ write(quads, false) ;
finish(opQuadP) ;
}
@Override
- public void visit(OpBGP opBGP)
- {
- if ( opBGP.getPattern().size() == 1 )
+ public void visit(OpQuadBlock opQuads)
+ {
+ QuadPattern quads = opQuads.getPattern() ;
+ if ( quads.size() == 1 )
{
- start(opBGP, NoNL) ;
- write(opBGP.getPattern(), true) ;
- finish(opBGP) ;
+ start(opQuads, NoNL) ;
+ formatQuad(quads.get(0)) ;
+ finish(opQuads) ;
return ;
}
-
- start(opBGP, NL) ;
- write(opBGP.getPattern(), false) ;
- finish(opBGP) ;
+ start(opQuads, NL) ;
+ write(quads, false) ;
+ finish(opQuads) ;
}
private void write(BasicPattern pattern, boolean oneLine)
@@ -218,6 +230,20 @@ public class WriterOp
}
}
+ private void write(QuadPattern quads, boolean oneLine) {
+ boolean first = true ;
+ for ( Quad t : quads )
+ {
+ formatQuad(t) ;
+ if ( oneLine ) {
+ if ( ! first ) out.print(" ") ;
+ }
+ else
+ out.println() ;
+ first = false ;
+ }
+ }
+
@Override
public void visit(OpTriple opTriple)
{