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)
         {


Reply via email to