Repository: jena Updated Branches: refs/heads/master 25b365221 -> b03ce37bf
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/master Commit: b03ce37bf932949b59f40467b6212c0d7c25afd9 Parents: 25b3652 Author: Claude Warren <[email protected]> Authored: Sat May 16 23:30:18 2015 +0100 Committer: Claude Warren <[email protected]> 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()); + } }
