You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by cl...@apache.org on 2015/05/19 21:14:47 UTC
[02/11] jena git commit: Changes to support JENA-947
Changes to support JENA-947
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/b03ce37b
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/b03ce37b
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/b03ce37b
Branch: refs/heads/add-contract-tests
Commit: b03ce37bf932949b59f40467b6212c0d7c25afd9
Parents: 25b3652
Author: Claude Warren <cl...@apache.org>
Authored: Sat May 16 23:30:18 2015 +0100
Committer: Claude Warren <cl...@apache.org>
Committed: Sat May 16 23:30:18 2015 +0100
----------------------------------------------------------------------
.../arq/querybuilder/AbstractQueryBuilder.java | 28 ++++--
.../jena/arq/querybuilder/AskBuilder.java | 12 +++
.../jena/arq/querybuilder/ConstructBuilder.java | 31 +++---
.../jena/arq/querybuilder/SelectBuilder.java | 18 +++-
.../arq/querybuilder/clauses/WhereClause.java | 20 ++++
.../jena/arq/querybuilder/handlers/Handler.java | 17 ++++
.../querybuilder/handlers/SelectHandler.java | 9 +-
.../arq/querybuilder/handlers/WhereHandler.java | 26 +++++
.../jena/arq/AbstractRegexpBasedTest.java | 1 +
.../querybuilder/clauses/WhereClauseTest.java | 100 ++++++++++++++-----
.../querybuilder/handlers/WhereHandlerTest.java | 22 ++++
11 files changed, 218 insertions(+), 66 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/b03ce37b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java
index dfe6732..63f068a 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java
@@ -17,7 +17,6 @@
*/
package org.apache.jena.arq.querybuilder;
-import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
@@ -263,17 +262,24 @@ public abstract class AbstractQueryBuilder<T extends AbstractQueryBuilder<T>>
*/
public final Query build() {
Query q = new Query();
- try {
- Field f = Query.class.getDeclaredField("queryType");
- f.setAccessible(true);
- f.set(q, query.getQueryType());
- } catch (NoSuchFieldException e) {
- throw new IllegalStateException(e.getMessage(), e);
- } catch (SecurityException e) {
- throw new IllegalStateException(e.getMessage(), e);
- } catch (IllegalAccessException e) {
- throw new IllegalStateException(e.getMessage(), e);
+ switch (query.getQueryType())
+ {
+ case Query.QueryTypeAsk:
+ q.setQueryAskType();
+ break;
+ case Query.QueryTypeConstruct:
+ q.setQueryConstructType();
+ break;
+ case Query.QueryTypeDescribe:
+ q.setQueryDescribeType();
+ break;
+ case Query.QueryTypeSelect:
+ q.setQuerySelectType();
+ break;
+ default:
+ throw new IllegalStateException( "Internal query is not a known type: "+q.getQueryType());
}
+
Stack<Handler> handlerStack = new Stack<Handler>();
PrologHandler ph = new PrologHandler(q);
handlerStack.push(ph);
http://git-wip-us.apache.org/repos/asf/jena/blob/b03ce37b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java
index b828f2d..42c213c 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java
@@ -27,6 +27,7 @@ import org.apache.jena.arq.querybuilder.handlers.SolutionModifierHandler;
import org.apache.jena.arq.querybuilder.handlers.WhereHandler;
import org.apache.jena.graph.FrontsTriple ;
import org.apache.jena.graph.Triple ;
+import org.apache.jena.sparql.expr.Expr;
import org.apache.jena.sparql.lang.sparql_11.ParseException ;
/**
@@ -158,8 +159,19 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder> implements
whereHandler.addGraph(makeNode(graph), subQuery.getWhereHandler());
return this;
}
+
+ @Override
+ public AskBuilder addBind(Expr expression, Object var) {
+ whereHandler.addBind( expression, makeVar(var) );
+ return this;
+ }
@Override
+ public AskBuilder addBind(String expression, Object var) throws ParseException {
+ whereHandler.addBind( expression, makeVar(var) );
+ return this;
+ }
+ @Override
public AskBuilder addOrderBy(String orderBy) {
solutionModifier.addOrderBy(orderBy);
return this;
http://git-wip-us.apache.org/repos/asf/jena/blob/b03ce37b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java
index 1d95a4b..f935e2b 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java
@@ -28,8 +28,8 @@ import org.apache.jena.arq.querybuilder.handlers.DatasetHandler;
import org.apache.jena.arq.querybuilder.handlers.SolutionModifierHandler;
import org.apache.jena.arq.querybuilder.handlers.WhereHandler;
import org.apache.jena.graph.FrontsTriple ;
-import org.apache.jena.graph.Node ;
import org.apache.jena.graph.Triple ;
+import org.apache.jena.sparql.expr.Expr;
import org.apache.jena.sparql.lang.sparql_11.ParseException ;
/**
@@ -145,23 +145,6 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder>
return this;
}
- // convert a node to a string
- private static String toString(Node node) {
- if (node.isBlank()) {
- return node.getBlankNodeLabel();
- }
- if (node.isLiteral()) {
- return node.toString();
- }
- if (node.isURI()) {
- return String.format("<%s>", node.getURI());
- }
- if (node.isVariable()) {
- return String.format("?%s", node.getName());
- }
- return node.toString();
- }
-
@Override
public ConstructBuilder addWhere(Triple t) {
whereHandler.addWhere(t);
@@ -225,6 +208,18 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder>
}
@Override
+ public ConstructBuilder addBind(Expr expression, Object var) {
+ whereHandler.addBind( expression, makeVar(var) );
+ return this;
+ }
+
+ @Override
+ public ConstructBuilder addBind(String expression, Object var) throws ParseException {
+ whereHandler.addBind( expression, makeVar(var) );
+ return this;
+ }
+
+ @Override
public ConstructBuilder addConstruct(Triple t) {
constructHandler.addConstruct(t);
return this;
http://git-wip-us.apache.org/repos/asf/jena/blob/b03ce37b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java
index 7829aca..8ca8de3 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java
@@ -17,7 +17,6 @@
*/
package org.apache.jena.arq.querybuilder;
-import java.io.ByteArrayInputStream;
import java.util.Collection;
import java.util.List;
@@ -33,12 +32,9 @@ import org.apache.jena.graph.FrontsNode ;
import org.apache.jena.graph.FrontsTriple ;
import org.apache.jena.graph.Node ;
import org.apache.jena.graph.Triple ;
-import org.apache.jena.sparql.core.Prologue;
import org.apache.jena.sparql.core.Var ;
import org.apache.jena.sparql.expr.Expr;
import org.apache.jena.sparql.lang.sparql_11.ParseException ;
-import org.apache.jena.sparql.lang.sparql_11.SPARQLParser11;
-import org.apache.jena.sparql.syntax.ElementFilter;
/**
* Build a select query.
@@ -111,6 +107,7 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
* @param expression The expression string to add.
* @throws ParseException If the expression can not be parsed.
*/
+ @Override
public SelectBuilder addVar(String expression, Object var) throws ParseException {
selectHandler.addVar( expression, makeVar(var) );
return this;
@@ -295,8 +292,19 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
}
@Override
+ public SelectBuilder addBind(Expr expression, Object var) {
+ whereHandler.addBind( expression, makeVar(var) );
+ return this;
+ }
+
+ @Override
+ public SelectBuilder addBind(String expression, Object var) throws ParseException {
+ whereHandler.addBind( expression, makeVar(var) );
+ return this;
+ }
+
+ @Override
public SelectHandler getSelectHandler() {
return selectHandler;
}
-
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jena/blob/b03ce37b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java
index 12c9a74..2e814ad 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java
@@ -22,6 +22,7 @@ import org.apache.jena.arq.querybuilder.SelectBuilder;
import org.apache.jena.arq.querybuilder.handlers.WhereHandler;
import org.apache.jena.graph.FrontsTriple ;
import org.apache.jena.graph.Triple ;
+import org.apache.jena.sparql.expr.Expr;
import org.apache.jena.sparql.lang.sparql_11.ParseException ;
/**
@@ -142,8 +143,27 @@ public interface WhereClause<T extends AbstractQueryBuilder<T>> {
* @return This builder for chaining.
*/
public T addGraph(Object graph, SelectBuilder subQuery);
+
+ /**
+ * Add a bind statement to the query
+ * * http://www.w3.org/TR/2013/REC-sparql11-query-20130321/#rGraphGraphPattern.
+ * @param expression The expression to bind to the var.
+ * @param var The variable to bind to.
+ * @return This builder for chaining.
+ */
+ public T addBind( Expr expression, Object var);
/**
+ * Add a bind statement to the query
+ * * http://www.w3.org/TR/2013/REC-sparql11-query-20130321/#rGraphGraphPattern.
+ * @param expression The expression to bind to the var.
+ * @param var The variable to bind to.
+ * @return This builder for chaining.
+ * @throws ParseException
+ */
+ public T addBind( String expression, Object var) throws ParseException;
+
+ /**
* Get the Where handler for this clause.
* @return The WhereHandler used by this clause.
*/
http://git-wip-us.apache.org/repos/asf/jena/blob/b03ce37b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/Handler.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/Handler.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/Handler.java
index faa1c00..2070225 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/Handler.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/Handler.java
@@ -17,10 +17,16 @@
*/
package org.apache.jena.arq.querybuilder.handlers;
+import java.io.ByteArrayInputStream;
import java.util.Map;
import org.apache.jena.graph.Node ;
+import org.apache.jena.query.Query;
+import org.apache.jena.sparql.core.Prologue;
import org.apache.jena.sparql.core.Var ;
+import org.apache.jena.sparql.expr.Expr;
+import org.apache.jena.sparql.lang.sparql_11.ParseException;
+import org.apache.jena.sparql.lang.sparql_11.SPARQLParser11;
/**
* The base interface for handlers.
@@ -39,4 +45,15 @@ public interface Handler {
* the build completes. The adjustments are made after setVars() has been called.
*/
public void build();
+
+ public static class Utils {
+ public static Expr parseExpression( Query query, String expression ) throws ParseException
+ {
+ SPARQLParser11 parser = new SPARQLParser11(new ByteArrayInputStream(
+ expression.getBytes()));
+ Prologue prologue = new Prologue( query.getPrefixMapping() );
+ parser.setPrologue(prologue);
+ return parser.Expression();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/jena/blob/b03ce37b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java
index 37726d8..df3261b 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java
@@ -17,19 +17,16 @@
*/
package org.apache.jena.arq.querybuilder.handlers;
-import java.io.ByteArrayInputStream;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
import org.apache.jena.graph.Node ;
import org.apache.jena.query.Query ;
-import org.apache.jena.sparql.core.Prologue;
import org.apache.jena.sparql.core.Var ;
import org.apache.jena.sparql.core.VarExprList ;
import org.apache.jena.sparql.expr.Expr;
import org.apache.jena.sparql.lang.sparql_11.ParseException;
-import org.apache.jena.sparql.lang.sparql_11.SPARQLParser11;
/**
* A Select clause handler.
@@ -97,11 +94,7 @@ public class SelectHandler implements Handler {
* @throws ParseException
*/
public void addVar(String expression, Var var) throws ParseException {
- SPARQLParser11 parser = new SPARQLParser11(new ByteArrayInputStream(
- expression.getBytes()));
- Prologue prologue = new Prologue( query.getPrefixMapping() );
- parser.setPrologue(prologue);
- addVar( parser.Expression(), var );
+ addVar( Utils.parseExpression(query, expression), var );
}
/**
http://git-wip-us.apache.org/repos/asf/jena/blob/b03ce37b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java
index 03c33c6..754e7a3 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java
@@ -285,7 +285,32 @@ public class WhereHandler implements Handler {
getClause().addElement(
new ElementNamedGraph(graph, subQuery.getElement()));
}
+
+ /**
+ * Add a binding to the where clause.
+ * @param expr The expression to bind.
+ * @param var The variable to bind it to.
+ */
+ public void addBind( Expr expr, Var var )
+ {
+ getClause().addElement(
+ new ElementBind(var,expr)
+ );
+ }
+ /**
+ * Add a binding to the where clause.
+ * @param expr The expression to bind.
+ * @param var The variable to bind it to.
+ * @throws ParseException
+ */
+ public void addBind( String expression, Var var ) throws ParseException
+ {
+ getClause().addElement(
+ new ElementBind(var, Utils.parseExpression(query, expression))
+ );
+ }
+
@Override
public void setVars(Map<Var, Node> values) {
if (values.isEmpty()) {
@@ -304,4 +329,5 @@ public class WhereHandler implements Handler {
public void build() {
// no special operations required.
}
+
}
http://git-wip-us.apache.org/repos/asf/jena/blob/b03ce37b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/AbstractRegexpBasedTest.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/AbstractRegexpBasedTest.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/AbstractRegexpBasedTest.java
index 2090193..c2af399 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/AbstractRegexpBasedTest.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/AbstractRegexpBasedTest.java
@@ -46,6 +46,7 @@ public abstract class AbstractRegexpBasedTest {
protected static final String LIMIT = "LIMIT" + SPACE;
protected static final String OFFSET = "OFFSET" + SPACE;
protected static final String OPTIONAL = "OPTIONAL" + SPACE;
+ protected static final String BIND = "BIND";
protected final String quote(String s) {
return String.format("%s%s%s", QUOTE, s, QUOTE);
http://git-wip-us.apache.org/repos/asf/jena/blob/b03ce37b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java
index ecfbd85..f6587a9 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java
@@ -17,17 +17,27 @@
*/
package org.apache.jena.arq.querybuilder.clauses;
-import org.apache.jena.arq.querybuilder.AbstractQueryBuilder ;
-import org.apache.jena.arq.querybuilder.SelectBuilder ;
-import org.apache.jena.graph.NodeFactory ;
-import org.apache.jena.graph.Triple ;
-import org.apache.jena.graph.impl.LiteralLabelFactory ;
-import org.apache.jena.sparql.core.Var ;
-import org.apache.jena.sparql.lang.sparql_11.ParseException ;
-import org.junit.After ;
-import org.xenei.junit.contract.Contract ;
-import org.xenei.junit.contract.ContractTest ;
-import org.xenei.junit.contract.IProducer ;
+import java.util.List;
+
+import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
+import org.apache.jena.arq.querybuilder.SelectBuilder;
+import org.apache.jena.graph.NodeFactory;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.graph.impl.LiteralLabelFactory;
+import org.apache.jena.query.Query;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.expr.E_Random;
+import org.apache.jena.sparql.lang.sparql_11.ParseException;
+import org.apache.jena.sparql.syntax.Element;
+import org.apache.jena.sparql.syntax.ElementGroup;
+import org.apache.jena.sparql.syntax.ElementTriplesBlock;
+import org.junit.After;
+
+import static org.junit.Assert.*;
+
+import org.xenei.junit.contract.Contract;
+import org.xenei.junit.contract.ContractTest;
+import org.xenei.junit.contract.IProducer;
@Contract(WhereClause.class)
public class WhereClauseTest<T extends WhereClause<?>> extends
@@ -54,20 +64,22 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
@ContractTest
public void testAddWhereStrings() {
WhereClause<?> whereClause = getProducer().newInstance();
- AbstractQueryBuilder<?> builder = whereClause.addWhere("<one>", "<two>", "three");
+ AbstractQueryBuilder<?> builder = whereClause.addWhere("<one>",
+ "<two>", "three");
assertContainsRegex(WHERE + OPEN_CURLY + node("one") + SPACE
- + node("two") + SPACE + quote("three") + presentStringType() + OPT_SPACE
- + DOT + CLOSE_CURLY, builder.buildString());
+ + node("two") + SPACE + quote("three") + presentStringType()
+ + OPT_SPACE + DOT + CLOSE_CURLY, builder.buildString());
}
@ContractTest
public void testAddOptionalString() {
WhereClause<?> whereClause = getProducer().newInstance();
- AbstractQueryBuilder<?> builder = whereClause.addOptional("<one>", "<two>", "three");
+ AbstractQueryBuilder<?> builder = whereClause.addOptional("<one>",
+ "<two>", "three");
assertContainsRegex(WHERE + OPEN_CURLY + "OPTIONAL" + SPACE
+ OPEN_CURLY + node("one") + SPACE + node("two") + SPACE
- + quote("three") + presentStringType() + OPT_SPACE
- + DOT + CLOSE_CURLY + CLOSE_CURLY, builder.buildString());
+ + quote("three") + presentStringType() + OPT_SPACE + DOT
+ + CLOSE_CURLY + CLOSE_CURLY, builder.buildString());
}
@@ -75,8 +87,7 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
public void testAddOptionalObjects() {
WhereClause<?> whereClause = getProducer().newInstance();
AbstractQueryBuilder<?> builder = whereClause.addOptional(
- NodeFactory.createURI("one"),
- NodeFactory.createURI("two"),
+ NodeFactory.createURI("one"), NodeFactory.createURI("two"),
NodeFactory.createURI("three"));
assertContainsRegex(WHERE + OPEN_CURLY + "OPTIONAL" + SPACE
+ OPEN_CURLY + node("one") + SPACE + node("two") + SPACE
@@ -135,8 +146,8 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
assertContainsRegex(PREFIX + "pfx:" + SPACE + node("uri") + ".+"
+ UNION + OPEN_CURLY + SELECT + var("x") + SPACE + WHERE
+ OPEN_CURLY + node("one") + SPACE + node("two") + SPACE
- + quote("three") + presentStringType() + OPT_SPACE
- + DOT + CLOSE_CURLY + CLOSE_CURLY, builder.buildString());
+ + quote("three") + presentStringType() + OPT_SPACE + DOT
+ + CLOSE_CURLY + CLOSE_CURLY, builder.buildString());
}
@@ -172,15 +183,14 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
@ContractTest
public void testSetVarsInFilter() throws ParseException {
- Var v = Var.alloc("v");
WhereClause<?> whereClause = getProducer().newInstance();
AbstractQueryBuilder<?> builder = whereClause.addFilter("?one < ?v");
assertContainsRegex(WHERE + OPEN_CURLY + "FILTER" + OPT_SPACE
+ OPEN_PAREN + var("one") + OPT_SPACE + LT + OPT_SPACE
+ var("v") + CLOSE_PAREN + CLOSE_CURLY, builder.buildString());
- builder.setVar(Var.alloc("v"),
- NodeFactory.createLiteral(LiteralLabelFactory.createTypedLiteral(10)));
+ builder.setVar(Var.alloc("v"), NodeFactory
+ .createLiteral(LiteralLabelFactory.createTypedLiteral(10)));
assertContainsRegex(WHERE + OPEN_CURLY + "FILTER" + OPT_SPACE
+ OPEN_PAREN + var("one") + OPT_SPACE + LT + OPT_SPACE
@@ -242,4 +252,46 @@ public class WhereClauseTest<T extends WhereClause<?>> extends
+ node("one") + ".+" + node("two") + ".+" + node("three")
+ ".+" + CLOSE_CURLY, builder.buildString());
}
+
+ @ContractTest
+ public void testBindStringVar() throws ParseException {
+ Var v = Var.alloc("foo");
+ WhereClause<?> whereClause = getProducer().newInstance();
+ AbstractQueryBuilder<?> builder = whereClause.addBind("rand()", v);
+
+ assertContainsRegex(
+ OPEN_CURLY + BIND + OPEN_PAREN + "rand\\(\\)" + SPACE + "AS"
+ + SPACE + var("foo") + CLOSE_PAREN + CLOSE_CURLY,
+ builder.buildString());
+ builder.setVar(v, NodeFactory.createURI("three"));
+ Query q = builder.build();
+ ElementGroup eg = (ElementGroup) q.getQueryPattern();
+ List<Element> lst = eg.getElements();
+ assertEquals( "Should only be one element", 1, lst.size());
+ assertTrue( "Should have an ElementTriplesBlock", lst.get(0) instanceof ElementTriplesBlock );
+ ElementTriplesBlock etb = (ElementTriplesBlock)lst.get(0);
+ assertTrue( "ElementGroup should be empty", etb.isEmpty() );
+ }
+
+ @ContractTest
+ public void testBindExprVar() throws ParseException {
+ Var v = Var.alloc("foo");
+ WhereClause<?> whereClause = getProducer().newInstance();
+ AbstractQueryBuilder<?> builder = whereClause
+ .addBind(new E_Random(), v);
+
+ assertContainsRegex(
+ OPEN_CURLY + BIND + OPEN_PAREN + "rand\\(\\)" + SPACE + "AS"
+ + SPACE + var("foo") + CLOSE_PAREN + CLOSE_CURLY,
+ builder.buildString());
+
+ builder.setVar(v, NodeFactory.createURI("three"));
+ Query q = builder.build();
+ ElementGroup eg = (ElementGroup) q.getQueryPattern();
+ List<Element> lst = eg.getElements();
+ assertEquals( "Should only be one element", 1, lst.size());
+ assertTrue( "Should have an ElementTriplesBlock", lst.get(0) instanceof ElementTriplesBlock );
+ ElementTriplesBlock etb = (ElementTriplesBlock)lst.get(0);
+ assertTrue( "ElementGroup should be empty", etb.isEmpty() );
+ }
}
http://git-wip-us.apache.org/repos/asf/jena/blob/b03ce37b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/WhereHandlerTest.java
----------------------------------------------------------------------
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/WhereHandlerTest.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/WhereHandlerTest.java
index 08c5147..678630a 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/WhereHandlerTest.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/WhereHandlerTest.java
@@ -29,6 +29,7 @@ import org.apache.jena.graph.impl.LiteralLabelFactory;
import org.apache.jena.query.Query;
import org.apache.jena.rdf.model.ResourceFactory;
import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.expr.E_Random;
import org.apache.jena.sparql.lang.sparql_11.ParseException;
import org.apache.jena.vocabulary.RDF;
import org.junit.Before;
@@ -303,4 +304,25 @@ public class WhereHandlerTest extends AbstractHandlerTest {
+ ".+" + CLOSE_CURLY, query.toString());
}
+ @Test
+ public void testBindStringVar() throws ParseException {
+ Var v = Var.alloc("foo");
+ handler.addBind("rand()", v);
+
+ assertContainsRegex(
+ OPEN_CURLY + BIND + OPEN_PAREN + "rand\\(\\)" + SPACE + "AS"
+ + SPACE + var("foo") + CLOSE_PAREN + CLOSE_CURLY,
+ query.toString());
+ }
+
+ @Test
+ public void testBindExprVar() throws ParseException {
+ Var v = Var.alloc("foo");
+ handler.addBind(new E_Random(), v);
+
+ assertContainsRegex(
+ OPEN_CURLY + BIND + OPEN_PAREN + "rand\\(\\)" + SPACE + "AS"
+ + SPACE + var("foo") + CLOSE_PAREN + CLOSE_CURLY,
+ query.toString());
+ }
}