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());
+       }
 }

Reply via email to