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 2011/11/05 12:58:43 UTC

svn commit: r1197938 - in /incubator/jena/Jena2/ARQ/trunk/src: main/java/com/hp/hpl/jena/query/ main/java/com/hp/hpl/jena/sparql/ main/java/com/hp/hpl/jena/sparql/algebra/ main/java/com/hp/hpl/jena/sparql/engine/ main/java/com/hp/hpl/jena/sparql/engine...

Author: andy
Date: Sat Nov  5 11:58:43 2011
New Revision: 1197938

URL: http://svn.apache.org/viewvc?rev=1197938&view=rev
Log:
Tidy up

Added:
    incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/algebra/TestTransformQuads.java   (with props)
Modified:
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DatasetFactory.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/ARQConstants.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/AlgebraQuad.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformUnionQuery.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/QueryEngineRegistry.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/ref/Eval.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineRegistry.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/org/openjena/atlas/lib/PropertyUtils.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/riotcmd/CmdLangParse.java
    incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DatasetFactory.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DatasetFactory.java?rev=1197938&r1=1197937&r2=1197938&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DatasetFactory.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/DatasetFactory.java Sat Nov  5 11:58:43 2011
@@ -63,7 +63,7 @@ public class DatasetFactory
     public static DataSource create(DatasetGraph dataset)
     { return DataSourceImpl.wrap(dataset) ; }
     
-    /** Create a dataset based on a list of URIs : these are merged into the default graph of teh dataset.
+    /** Create a dataset based on a list of URIs : these are merged into the default graph of the dataset.
      * 
      * @param uriList   URIs merged to form the default dataset 
      * @return Dataset
@@ -81,7 +81,7 @@ public class DatasetFactory
     public static Dataset create(String uri)
     { return create(uri, null, null, null) ; }
 
-    /** Create a dataset based on a list of URIs : these are merged into the default graph of teh dataset.
+    /** Create a dataset based on a list of URIs : these are merged into the default graph of the dataset.
      * 
      * @param uriList   URIs merged to form the default dataset 
      * @param fileManager
@@ -91,7 +91,7 @@ public class DatasetFactory
     public static Dataset create(List<String> uriList, FileManager fileManager)
     { return create(uriList, null, fileManager, null) ; }
                                               
-    /** Create a dataset based on a list of URIs : these are merged into the default graph of teh dataset.
+    /** Create a dataset based on a list of URIs : these are merged into the default graph of the dataset.
      * 
      * @param uri              graph to be loaded into the unnamed, default graph
      * @param fileManager

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/ARQConstants.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/ARQConstants.java?rev=1197938&r1=1197937&r2=1197938&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/ARQConstants.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/ARQConstants.java Sat Nov  5 11:58:43 2011
@@ -155,7 +155,7 @@ public class ARQConstants
     public static final String allocVarScopeHiding =  "/" ;
 
     /** Marker for variables renamed to make variables hidden because of quad transformation */
-    public static final String allocVarQuad =  "*" ;
+    public static final String allocVarQuad =  "*g" ;
 
     // Spare primary marker.
     //private static final String executionVar =  "@" ;

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/AlgebraQuad.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/AlgebraQuad.java?rev=1197938&r1=1197937&r2=1197938&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/AlgebraQuad.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/AlgebraQuad.java Sat Nov  5 11:58:43 2011
@@ -23,17 +23,10 @@ import java.util.Stack ;
 
 import com.hp.hpl.jena.graph.Node ;
 import com.hp.hpl.jena.sparql.ARQConstants ;
-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.OpDatasetNames ;
-import com.hp.hpl.jena.sparql.algebra.op.OpGraph ;
-import com.hp.hpl.jena.sparql.algebra.op.OpPath ;
-import com.hp.hpl.jena.sparql.algebra.op.OpPropFunc ;
-import com.hp.hpl.jena.sparql.algebra.op.OpQuadPattern ;
-import com.hp.hpl.jena.sparql.algebra.op.OpTable ;
+import com.hp.hpl.jena.sparql.algebra.op.* ;
 import com.hp.hpl.jena.sparql.core.Quad ;
 import com.hp.hpl.jena.sparql.core.Var ;
-import com.hp.hpl.jena.sparql.engine.Rename ;
+import com.hp.hpl.jena.sparql.core.VarAlloc ;
 import com.hp.hpl.jena.sparql.expr.ExprVar ;
 
 /** Convert an algebra expression into a quad form */
@@ -51,8 +44,9 @@ public class AlgebraQuad extends Transfo
 
     public static Op quadize(Op op)
     {
-        final Stack<Node> stack = new Stack<Node>() ;
-        stack.push(Quad.defaultGraphNodeGenerated) ;             // Starting condition
+        final Stack<QuadSlot> stack = new Stack<QuadSlot>() ;
+        QuadSlot qSlot = new QuadSlot(Quad.defaultGraphNodeGenerated, Quad.defaultGraphNodeGenerated) ;  
+        stack.push(qSlot) ;             // Starting condition
         
         OpVisitor before = new Pusher(stack) ;
         OpVisitor after = new Popper(stack) ;
@@ -60,35 +54,69 @@ public class AlgebraQuad extends Transfo
         TransformQuadGraph qg = new TransformQuadGraph(stack) ;
         return Transformer.transformSkipService(qg, 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.
+     *  If they are the same (by ==), the quadrewrite is OK as is.
+     *  If they are different (and that means they are variables)
+     *  an assign is done after the execution of the graph pattern block. 
+     */
+    private static class QuadSlot
+    {   // Oh scala, where art thou!
+        final Node actualGraphName ;
+        final Node rewriteGraphName ;
+        QuadSlot(Node actualGraphName, Node rewriteGraphName)
+        {
+            this.actualGraphName = actualGraphName ;
+            this.rewriteGraphName = rewriteGraphName ;
+        }
+    }
+    
     private static class Pusher extends OpVisitorBase
     {
-        Stack<Node> stack ;
-        Pusher(Stack<Node> stack) { this.stack = stack ; }
+        Stack<QuadSlot> stack ;
+        VarAlloc varAlloc = new VarAlloc(ARQConstants.allocVarQuad) ;
+        Pusher(Stack<QuadSlot> stack) { this.stack = stack ; }
         @Override
         public void visit(OpGraph opGraph)
-        {
-            stack.push(opGraph.getNode()) ;
+        {
+            // Name in SPARQL
+            Node gn = opGraph.getNode() ;
+            // Name in rewrite
+            Node gnQuad = gn ;
+            
+            if ( Var.isVar(gn) )
+            {
+                Collection<Var> vars = OpVars.allVars(opGraph.getSubOp()) ;
+                if ( vars.contains(gn) )
+                    gnQuad = varAlloc.allocVar() ;
+            }
+            stack.push(new QuadSlot(gn, gnQuad)) ;
         }
     }
     
     private static class Popper extends OpVisitorBase
     {
-        Stack<Node> stack ;
-        Popper(Stack<Node> stack) { this.stack = stack ; }
+        Stack<QuadSlot> stack ;
+        Popper(Stack<QuadSlot> stack) { this.stack = stack ; }
         @Override
         public void visit(OpGraph opGraph)
-        {
-            Node n = stack.pop() ;
+        {
+            // The final work is done in the main vistor, 
+            // which is called after the subnode has been 
+            // rewritten.
+            stack.pop() ;
         }
     }
 
     private static class TransformQuadGraph extends TransformCopy
     {
-        private Stack<Node> tracker ;
+        private Stack<QuadSlot> tracker ;
 
-        public TransformQuadGraph(Stack<Node> tracker) { this.tracker = tracker ; }
-        private Node getNode() { return tracker.peek() ; }
+        public TransformQuadGraph(Stack<QuadSlot> tracker) { this.tracker = tracker ; }
+        
+        private Node getNode() { return tracker.peek().rewriteGraphName ; }
 
         @Override
         public Op transform(OpGraph opGraph, Op op)
@@ -108,19 +136,10 @@ public class AlgebraQuad extends Transfo
             // Note: op is already quads by this point.
             // Must test scoping by the subOp of GRAPH
             
-            Node gn = getNode() ;
-            if ( Var.isVar(gn) )
-            {
-                Collection<Var> vars = OpVars.allVars(opGraph.getSubOp()) ;
-                if ( vars.contains(gn) )
-                {
-                    Var gVar = Var.alloc(gn) ;
-                    Var var = Rename.chooseVarName(gVar, vars, ARQConstants.allocVarQuad) ;
-                    op = Rename.renameNode(op, gn, var) ;
-                    op = OpAssign.assign(op, gVar, new ExprVar(var)) ;
-                }
-            }
-            
+            QuadSlot qSlot = tracker.peek() ;
+            Node actualName= qSlot.actualGraphName ;
+            Node rewriteName= qSlot.rewriteGraphName ; 
+            
             if ( OpBGP.isBGP(op) )
             {
                 // Empty BGP
@@ -141,7 +160,10 @@ public class AlgebraQuad extends Transfo
                 // 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 ;

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformUnionQuery.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformUnionQuery.java?rev=1197938&r1=1197937&r2=1197938&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformUnionQuery.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/TransformUnionQuery.java Sat Nov  5 11:58:43 2011
@@ -29,7 +29,7 @@ import com.hp.hpl.jena.sparql.algebra.op
 import com.hp.hpl.jena.sparql.core.Quad ;
 import com.hp.hpl.jena.sparql.core.Var ;
 
-/** Convert query in algrebra form so that the default graph of the query is teh union of named graphs */  
+/** Convert query in algrebra form so that the default graph of the query is the union of named graphs */  
 public class TransformUnionQuery extends TransformCopy
 {
     public static Op transform(Op op)

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java?rev=1197938&r1=1197937&r2=1197938&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java Sat Nov  5 11:58:43 2011
@@ -365,7 +365,7 @@ public class Transformer
 //            if ( op.getSubOp() != null ) op.getSubOp().visit(this) ;
             
             // Just visit the OpService node itself.
-            // The transformer needs to push teh code as a result (see ApplyTransformVisitorSkipService)
+            // The transformer needs to push the code as a result (see ApplyTransformVisitorSkipService)
             if ( visitor != null ) op.visit(visitor) ;
             
             after(op) ;

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/QueryEngineRegistry.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/QueryEngineRegistry.java?rev=1197938&r1=1197937&r2=1197938&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/QueryEngineRegistry.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/QueryEngineRegistry.java Sat Nov  5 11:58:43 2011
@@ -140,7 +140,7 @@ public class QueryEngineRegistry
     /** Allow <b>careful</b> manipulation of the factories list */
     public List<QueryEngineFactory> factories() { return factories ; }
 
-    /** Check whether a query engine factory is already registered in teh default registry*/
+    /** Check whether a query engine factory is already registered in the default registry*/
     public static boolean containsFactory(QueryEngineFactory f) { return get().contains(f) ; }
 
     /** Check whether a query engine factory is already registered */

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/ref/Eval.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/ref/Eval.java?rev=1197938&r1=1197937&r2=1197938&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/ref/Eval.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/ref/Eval.java Sat Nov  5 11:58:43 2011
@@ -171,7 +171,7 @@ public class Eval
                 ExecutionContext cxt2 = new ExecutionContext(cxt, g) ;
 
                 // Eval the pattern, eval the variable, join.
-                // Pattern may be non-linear in tehvariable - do a pure execution.  
+                // Pattern may be non-linear in the variable - do a pure execution.  
                 Table t1 = TableFactory.create(gVar, gn) ;
                 QueryIterator qIter = StageBuilder.execute(pattern, QueryIterRoot.create(cxt2), cxt2) ;
                 Table t2 = TableFactory.create(qIter) ;

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineRegistry.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineRegistry.java?rev=1197938&r1=1197937&r2=1197938&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineRegistry.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineRegistry.java Sat Nov  5 11:58:43 2011
@@ -93,7 +93,7 @@ public class UpdateEngineRegistry
     /** Allow <b>careful</b> manipulation of the factories list */
     public List<UpdateEngineFactory> factories() { return factories ; }
 
-    /** Check whether a query engine factory is already registered in teh default registry*/
+    /** Check whether a query engine factory is already registered in the default registry*/
     public static boolean containsFactory(UpdateEngineFactory f) { return get().contains(f) ; }
 
     /** Check whether a query engine factory is already registered */

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/org/openjena/atlas/lib/PropertyUtils.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/org/openjena/atlas/lib/PropertyUtils.java?rev=1197938&r1=1197937&r2=1197938&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/org/openjena/atlas/lib/PropertyUtils.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/org/openjena/atlas/lib/PropertyUtils.java Sat Nov  5 11:58:43 2011
@@ -136,7 +136,7 @@ public class PropertyUtils
         inconsistent(properties, key, x, expected) ; 
     }
 
-    /** Check property has teh vakue given - throw exception if not. */
+    /** Check property has the vakue given - throw exception if not. */
     public void checkMetadata(Properties properties, String key, String expected)
     {
         String value = properties.getProperty(key) ;

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/riotcmd/CmdLangParse.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/riotcmd/CmdLangParse.java?rev=1197938&r1=1197937&r2=1197938&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/riotcmd/CmdLangParse.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/riotcmd/CmdLangParse.java Sat Nov  5 11:58:43 2011
@@ -110,7 +110,7 @@ public abstract class CmdLangParse exten
     
     protected LangHandler langHandlerOverall = null ;
 
-    // This is teh setup for command for their message via the logging in ErrorHandlers
+    // This is the setup for command for their message via the logging in ErrorHandlers
     private static final String log4Jsetup = StrUtils.strjoin("\n"
 //                    , "## Plain output to stdout"
 //                    , "log4j.appender.riot.plain=org.apache.log4j.ConsoleAppender"

Modified: incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java?rev=1197938&r1=1197937&r2=1197938&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java Sat Nov  5 11:58:43 2011
@@ -34,7 +34,8 @@ import org.junit.runners.Suite ;
     , TestFilterTransform.class
     , TestVarRename.class
     , TestOptimizer.class
-    , TestPattern2Join.class
+    , TestPattern2Join.class
+    , TestTransformQuads.class
 //    , TestUnionGraph.class
 //    , TestUnionTransformTriples.class
 //    , TestUnionTransformQuads.class

Added: incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/algebra/TestTransformQuads.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/algebra/TestTransformQuads.java?rev=1197938&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/algebra/TestTransformQuads.java (added)
+++ incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/algebra/TestTransformQuads.java Sat Nov  5 11:58:43 2011
@@ -0,0 +1,126 @@
+/**
+ * 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;
+
+import org.junit.Test ;
+import org.openjena.atlas.junit.BaseTest ;
+import org.openjena.atlas.lib.StrUtils ;
+
+import com.hp.hpl.jena.query.Query ;
+import com.hp.hpl.jena.query.QueryFactory ;
+import com.hp.hpl.jena.sparql.sse.SSE ;
+
+//Tests for conversion of algebra forms to quad form. 
+public class TestTransformQuads extends BaseTest
+{
+    /*
+     *  
+"(sequence   (quadpattern (quad ?g ?s ?p ?o))   (quadpattern (quad ?g1 ?s1 ?p1 ?o1)))"
+"(sequence   (quadpattern (quad ?g ?s ?p ?o))   (quadpattern (quad ?g ?s1 ?p1 ?o1)))"
+"(sequence   (quadpattern (quad ?g ?s ?p ?o))   (quadpattern (quad ?g1 ?s1 ?p1 ?o1)))"
+"(assign ((?g ?*g0))   (sequence     (quadpattern (quad ?*g0 ?s ?p ?o))     (quadpattern (quad ?g ?s1 ?p1 ?o1))))" 
+"(assign ((?g ?*g0))   (filter (= (str ?g) "graphURI")     (quadpattern (quad ?*g0 ?s ?p ?o))))" 
+"(filter (= (str ?g) "graphURI")   (quadpattern (quad ?g ?s ?p ?o)))"
+"(assign ((?g ?*g0))   (sequence     (quadpattern (quad ?*g0 ?s ?p ?o))     (filter (= (str ?g) "graphURI")       (quadpattern (quad ?g1 ?s1 ?p1 ?o1)))))"
+"(sequence   (quadpattern (quad ?g ?s ?p ?o))   (assign ((?g1 ?*g0))     (filter (= (str ?g1) "graphURI")       (quadpattern (quad ?*g0 ?s1 ?p1 ?o1)))))"
+"(sequence   (assign ((?g ?*g0))     (filter (= (str ?g) "graphURI")       (quadpattern (quad ?*g0 ?s ?p ?o))))   (assign ((?g ?*g1))     (filter (= (str ?g) "graphURI")       (quadpattern (quad ?*g1 ?s ?p ?o)))))" 
+
+     */
+    // Simple
+    @Test public void quads01() { test ("{ GRAPH ?g { ?s ?p ?o } }", 
+                                        "(quadpattern (quad ?g ?s ?p ?o))" 
+                                        ) ; }
+    // Not nested
+    @Test public void quads02() { test ("{ GRAPH ?g { ?s ?p ?o } GRAPH ?g1 { ?s1 ?p1 ?o1 }  }", 
+                                        "(sequence" +
+                                        "    (quadpattern (quad ?g ?s ?p ?o))",
+                                        "    (quadpattern (quad ?g1 ?s1 ?p1 ?o1)))"
+                                       ) ; }
+    
+    @Test public void quads03() { test ("{ GRAPH ?g { ?s ?p ?o } GRAPH ?g { ?s1 ?p1 ?o1 }  }",
+                                        "(sequence" +
+                                        "   (quadpattern (quad ?g ?s ?p ?o))" +
+                                        "   (quadpattern (quad ?g ?s1 ?p1 ?o1)))"
+                                        ) ; }
+    // Nested
+    @Test public void quads04() { test ("{ GRAPH ?g { ?s ?p ?o GRAPH ?g1 { ?s1 ?p1 ?o1 }  } }",
+                                        "(sequence" +
+                                        "   (quadpattern (quad ?g ?s ?p ?o))" +
+                                        "   (quadpattern (quad ?g1 ?s1 ?p1 ?o1)))"
+                                        ) ; }
+    
+    @Test public void quads05() { test ("{ GRAPH ?g { ?s ?p ?o GRAPH ?g { ?s1 ?p1 ?o1 }  } }", 
+                                        "(assign ((?g ?*g0))" +
+                                        "   (sequence" +
+                                        "     (quadpattern (quad ?*g0 ?s ?p ?o))" +
+                                        "     (quadpattern (quad ?g ?s1 ?p1 ?o1))))" 
+                                        ) ; }
+    // Filters
+    @Test public void quads10() { test ("{ GRAPH ?g { ?s ?p ?o FILTER (str(?g) = 'graphURI') } }", 
+                                        "(assign ((?g ?*g0))" +
+                                        "   (filter (= (str ?g) 'graphURI')" +
+                                        "     (quadpattern (quad ?*g0 ?s ?p ?o))))" 
+                                        ) ; }
+    
+    @Test public void quads11() { test ("{ GRAPH ?g { ?s ?p ?o } FILTER (str(?g) = 'graphURI') }",
+                                        "(filter (= (str ?g) 'graphURI')" +
+                                        "   (quadpattern (quad ?g ?s ?p ?o)))"
+                                        ) ; }
+    
+    // Nested and filter
+    @Test public void quads20() { test ("{ GRAPH ?g { ?s ?p ?o GRAPH ?g1 { ?s1 ?p1 ?o1 FILTER (str(?g) = 'graphURI') } } }",
+                                        "(assign ((?g ?*g0))" +
+                                        "   (sequence" +
+                                        "     (quadpattern (quad ?*g0 ?s ?p ?o))" +
+                                        "     (filter (= (str ?g) 'graphURI')" +
+                                        "       (quadpattern (quad ?g1 ?s1 ?p1 ?o1)))))"
+                                        ) ; }
+    
+    @Test public void quads21() { test ("{ GRAPH ?g { ?s ?p ?o GRAPH ?g1 { ?s1 ?p1 ?o1 FILTER (str(?g1) = 'graphURI') } } }",
+                                        "(sequence" +
+                                        "   (quadpattern (quad ?g ?s ?p ?o))" +
+                                        "   (assign ((?g1 ?*g0))" +
+                                        "     (filter (= (str ?g1) 'graphURI')" +
+                                        "       (quadpattern (quad ?*g0 ?s1 ?p1 ?o1)))))"
+                                       ) ; }
+    
+    // Tricky pattern ... twice.
+    @Test public void quads30() { test ( "{ GRAPH ?g { ?s ?p ?o FILTER (str(?g) = 'graphURI') } " +
+                                         "  GRAPH ?g { ?s ?p ?o FILTER (str(?g) = 'graphURI') } }",
+                                         "(sequence" +
+                                         "   (assign ((?g ?*g0))" +
+                                         "     (filter (= (str ?g) 'graphURI')" +
+                                         "       (quadpattern (quad ?*g0 ?s ?p ?o))))" +
+                                         "   (assign ((?g ?*g1))" +
+                                         "     (filter (= (str ?g) 'graphURI')" +
+                                         "       (quadpattern (quad ?*g1 ?s ?p ?o)))))"
+                                         ) ; }
+
+    private static void test(String patternString, String... strExpected)
+    {
+        Query q = QueryFactory.create("SELECT * WHERE "+patternString) ;
+        Op op = Algebra.compile(q) ;
+        op = Algebra.optimize(op) ;
+        op = Algebra.toQuadForm(op) ;
+        
+        Op op2 = SSE.parseOp(StrUtils.strjoinNL(strExpected)) ;
+        assertEquals(op2, op) ;
+    }
+}
+

Propchange: incubator/jena/Jena2/ARQ/trunk/src/test/java/com/hp/hpl/jena/sparql/algebra/TestTransformQuads.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain