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