Repository: jena
Updated Branches:
  refs/heads/master b8540b431 -> 84f3b6734


Fixes for JENA-1153.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/581d2892
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/581d2892
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/581d2892

Branch: refs/heads/master
Commit: 581d2892d699e6127559fca94dd37f2fc4439df4
Parents: b8540b4
Author: Claude Warren <[email protected]>
Authored: Tue Mar 8 19:52:50 2016 +0000
Committer: Claude Warren <[email protected]>
Committed: Tue Mar 8 19:52:50 2016 +0000

----------------------------------------------------------------------
 .../arq/querybuilder/AbstractQueryBuilder.java  |  38 ++++++
 .../jena/arq/querybuilder/AskBuilder.java       |  29 ++++-
 .../jena/arq/querybuilder/ConstructBuilder.java |  29 ++++-
 .../org/apache/jena/arq/querybuilder/Order.java |   8 ++
 .../jena/arq/querybuilder/SelectBuilder.java    |  28 +++-
 .../clauses/SolutionModifierClause.java         |  50 +++++++-
 .../handlers/SolutionModifierHandler.java       |  55 ++------
 .../clauses/SolutionModifierTest.java           | 127 +++++++++++++------
 .../handlers/SolutionModifierHandlerTest.java   |   8 +-
 9 files changed, 279 insertions(+), 93 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/581d2892/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 0da573f..59f4bf2 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
@@ -27,14 +27,17 @@ import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.graph.impl.LiteralLabelFactory ;
 import org.apache.jena.query.Query ;
+import org.apache.jena.query.QueryParseException;
 import org.apache.jena.rdf.model.Resource ;
 import org.apache.jena.riot.RiotException;
 import org.apache.jena.riot.system.PrefixMapFactory;
 import org.apache.jena.shared.PrefixMapping;
 import org.apache.jena.sparql.ARQInternalErrorException ;
 import org.apache.jena.sparql.core.Var ;
+import org.apache.jena.sparql.expr.Expr;
 import org.apache.jena.sparql.expr.ExprVar ;
 import org.apache.jena.sparql.syntax.ElementGroup;
+import org.apache.jena.sparql.util.ExprUtils;
 import org.apache.jena.sparql.util.NodeFactoryExtra ;
 
 /**
@@ -74,6 +77,41 @@ public abstract class AbstractQueryBuilder<T extends 
AbstractQueryBuilder<T>>
        }
        
        /**
+        * A convenience method to make an expression from a string.  Evaluates 
the 
+        * expression with respect to the current query.
+        * 
+        * @param expression The expression to parse.
+        * @return the Expr object.
+        * @throws QueryParseExcpetion on error.
+        */
+       public Expr makeExpr(String expression) throws QueryParseException
+       {
+               return ExprUtils.parse(query, expression, true);
+       }
+       
+       /**
+        * A convenience method to quote a string.
+        * @param q the string to quote.
+        * 
+        * Will use single quotes if there are no single quotes in the string 
or if the 
+        * double quote is before the single quote in the string.
+        * 
+        * Will use double quote otherwise.
+        * 
+        * @return the quoted string. 
+        */
+       public String quote(String q) {
+               int qt = q.indexOf('"');
+               int sqt = q.indexOf("'");
+               
+               if (sqt == -1 || qt<sqt)
+               {
+                       return String.format( "'%s'", q);
+               }
+               return String.format( "\"%s\"", q);
+       }
+       
+       /**
         * Make a node from an object while using the associated prefix mapping.
         * <ul>
         * <li>Will return Node.ANY if object is null.</li>

http://git-wip-us.apache.org/repos/asf/jena/blob/581d2892/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 9ae7fa2..23965a8 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
@@ -29,6 +29,7 @@ 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.query.SortCondition;
 import org.apache.jena.sparql.expr.Expr;
 import org.apache.jena.sparql.lang.sparql_11.ParseException ;
 
@@ -177,13 +178,38 @@ public class AskBuilder extends 
AbstractQueryBuilder<AskBuilder> implements
                getWhereHandler().addBind( expression, makeVar(var) );
                return this;
        }
+       
+       @Override
+       public AskBuilder addOrderBy(Expr orderBy) {
+               getSolutionModifierHandler().addOrderBy(orderBy);
+               return this;
+       }
+
+       @Override
+       public AskBuilder addOrderBy(Object orderBy) {
+               getSolutionModifierHandler().addOrderBy(makeVar(orderBy));
+               return this;
+       }
+
        @Override
-       public AskBuilder addOrderBy(String orderBy) {
+       public AskBuilder addOrderBy(SortCondition orderBy) {
                getSolutionModifierHandler().addOrderBy(orderBy);
                return this;
        }
 
        @Override
+       public AskBuilder addOrderBy(Expr orderBy, Order order) {
+               getSolutionModifierHandler().addOrderBy(orderBy, order);
+               return this;
+       }
+
+       @Override
+       public AskBuilder addOrderBy(Object orderBy, Order order) {
+               getSolutionModifierHandler().addOrderBy(makeVar(orderBy), 
order);
+               return this;
+       }
+
+       @Override
        public AskBuilder addGroupBy(String groupBy) {
                getSolutionModifierHandler().addGroupBy(groupBy);
                return this;
@@ -216,4 +242,5 @@ public class AskBuilder extends 
AbstractQueryBuilder<AskBuilder> implements
        public Node list(Object... objs) {
                return getWhereHandler().list(objs);
        }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/581d2892/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 64324a4..9db1dae 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,9 +28,11 @@ import 
org.apache.jena.arq.querybuilder.handlers.DatasetHandler;
 import org.apache.jena.arq.querybuilder.handlers.HandlerBlock;
 import org.apache.jena.arq.querybuilder.handlers.SolutionModifierHandler;
 import org.apache.jena.arq.querybuilder.handlers.WhereHandler;
+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.query.SortCondition;
 import org.apache.jena.sparql.expr.Expr;
 import org.apache.jena.sparql.lang.sparql_11.ParseException ;
 
@@ -111,14 +113,38 @@ public class ConstructBuilder extends 
AbstractQueryBuilder<ConstructBuilder>
                getDatasetHandler().from(graphName);
                return this;
        }
+       
+       @Override
+       public ConstructBuilder addOrderBy(Expr orderBy) {
+               getSolutionModifierHandler().addOrderBy(orderBy);
+               return this;
+       }
+
+       @Override
+       public ConstructBuilder addOrderBy(Object orderBy) {
+               getSolutionModifierHandler().addOrderBy(makeVar(orderBy));
+               return this;
+       }
 
        @Override
-       public ConstructBuilder addOrderBy(String orderBy) {
+       public ConstructBuilder addOrderBy(SortCondition orderBy) {
                getSolutionModifierHandler().addOrderBy(orderBy);
                return this;
        }
 
        @Override
+       public ConstructBuilder addOrderBy(Expr orderBy, Order order) {
+               getSolutionModifierHandler().addOrderBy(orderBy, order);
+               return this;
+       }
+
+       @Override
+       public ConstructBuilder addOrderBy(Object orderBy, Order order) {
+               getSolutionModifierHandler().addOrderBy(makeVar(orderBy), 
order);
+               return this;
+       }
+
+       @Override
        public ConstructBuilder addGroupBy(String groupBy) {
                getSolutionModifierHandler().addGroupBy(groupBy);
                return this;
@@ -242,4 +268,5 @@ public class ConstructBuilder extends 
AbstractQueryBuilder<ConstructBuilder>
        public Node list(Object... objs) {
                return getWhereHandler().list(objs);
        }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/581d2892/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/Order.java
----------------------------------------------------------------------
diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/Order.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/Order.java
new file mode 100644
index 0000000..c72d4de
--- /dev/null
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/Order.java
@@ -0,0 +1,8 @@
+package org.apache.jena.arq.querybuilder;
+
+/**
+ * The order for the ORDER BY modifiers.
+ */
+public enum Order {
+       ASCENDING, DESCENDING
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/581d2892/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 03796e9..5979e07 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
@@ -33,6 +33,7 @@ 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.query.SortCondition;
 import org.apache.jena.sparql.core.Var ;
 import org.apache.jena.sparql.expr.Expr;
 import org.apache.jena.sparql.lang.sparql_11.ParseException ;
@@ -144,12 +145,36 @@ public class SelectBuilder extends 
AbstractQueryBuilder<SelectBuilder>
        }
 
        @Override
-       public SelectBuilder addOrderBy(String orderBy) {
+       public SelectBuilder addOrderBy(Expr orderBy) {
                getSolutionModifierHandler().addOrderBy(orderBy);
                return this;
        }
 
        @Override
+       public SelectBuilder addOrderBy(Object orderBy) {
+               getSolutionModifierHandler().addOrderBy( makeVar(orderBy));
+               return this;
+       }
+       
+       @Override
+       public SelectBuilder addOrderBy(SortCondition orderBy) {
+               getSolutionModifierHandler().addOrderBy(orderBy);
+               return this;
+       }
+
+       @Override
+       public SelectBuilder addOrderBy(Expr orderBy, Order order) {
+               getSolutionModifierHandler().addOrderBy(orderBy, order);
+               return this;
+       }
+
+       @Override
+       public SelectBuilder addOrderBy(Object orderBy, Order order) {
+               getSolutionModifierHandler().addOrderBy(makeVar(orderBy), 
order);
+               return this;
+       }
+
+       @Override
        public SelectBuilder addGroupBy(String groupBy) {
                getSolutionModifierHandler().addGroupBy(groupBy);
                return this;
@@ -313,4 +338,5 @@ public class SelectBuilder extends 
AbstractQueryBuilder<SelectBuilder>
        public Node list(Object... objs) {
                return getWhereHandler().list(objs);
        }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/581d2892/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SolutionModifierClause.java
----------------------------------------------------------------------
diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SolutionModifierClause.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SolutionModifierClause.java
index d38e715..af0b602 100644
--- 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SolutionModifierClause.java
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SolutionModifierClause.java
@@ -18,7 +18,11 @@
 package org.apache.jena.arq.querybuilder.clauses;
 
 import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
+import org.apache.jena.arq.querybuilder.Order;
 import org.apache.jena.arq.querybuilder.handlers.SolutionModifierHandler;
+import org.apache.jena.graph.FrontsNode;
+import org.apache.jena.query.SortCondition;
+import org.apache.jena.sparql.expr.Expr;
 import org.apache.jena.sparql.lang.sparql_11.ParseException ;
 
 /**
@@ -29,15 +33,53 @@ import org.apache.jena.sparql.lang.sparql_11.ParseException 
;
  *            The Builder type that the clause is part of.
  */
 public interface SolutionModifierClause<T extends AbstractQueryBuilder<T>> {
-
+       
+       /**
+        * Add an ascending order by.
+        * 
+        * @param orderBy
+        *            The expression to order by.
+        * @return The builder for chaining.
+        */
+       public T addOrderBy(Expr orderBy);
+       
+       /**
+        * Add an ascending order by.
+        * 
+        * @param orderBy
+        *            The object to order by.
+        * @return The builder for chaining.
+        */
+       public T addOrderBy(Object orderBy);
+       
+       /**
+        * Add an ascending order by.
+        * 
+        * @param orderBy
+        *            The SortCondition to order by.
+        * @return The builder for chaining.
+        */
+       public T addOrderBy(SortCondition orderBy);
+       
+       /**
+        * Add an order by with direction specified.
+        * 
+        * @param orderBy
+        *            The expression to order by.
+        * @param order The direction to order.  
+        * @return The builder for chaining.
+        */
+       public T addOrderBy(Expr orderBy, Order order);
+       
        /**
-        * Add an order by
+        * Add an order by with direction specified.
         * 
         * @param orderBy
-        *            The variable name to order by.
+        *            The object to order by.
+        * @param order The direction to order.  
         * @return The builder for chaining.
         */
-       public T addOrderBy(String orderBy);
+       public T addOrderBy(Object orderBy, Order order);
 
        /**
         * Add a group by

http://git-wip-us.apache.org/repos/asf/jena/blob/581d2892/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SolutionModifierHandler.java
----------------------------------------------------------------------
diff --git 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SolutionModifierHandler.java
 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SolutionModifierHandler.java
index c52a2e8..eb0fbbb 100644
--- 
a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SolutionModifierHandler.java
+++ 
b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SolutionModifierHandler.java
@@ -21,6 +21,7 @@ import java.io.ByteArrayInputStream ;
 import java.util.List ;
 import java.util.Map ;
 
+import org.apache.jena.arq.querybuilder.Order;
 import org.apache.jena.arq.querybuilder.rewriters.ExprRewriter ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.query.Query ;
@@ -38,13 +39,6 @@ import org.apache.jena.sparql.lang.sparql_11.SPARQLParser11 ;
  *
  */
 public class SolutionModifierHandler implements Handler {
-       /**
-        * The order for the ORDER BY modifiers.
-        */
-       public enum Order {
-               ASCENDING, DESCENDING
-       }
-
        // the query to modify
        private final Query query;
 
@@ -74,25 +68,6 @@ public class SolutionModifierHandler implements Handler {
        }
 
        /**
-        * Add an order by variable.
-        * @param varName The variable name.
-        */
-       public void addOrderBy(String varName) {
-               query.addOrderBy(varName, Query.ORDER_DEFAULT);
-       }
-
-       /**
-        * Add an order by variable.
-        * @param varName The variable name.
-        * @param order The direction for the ordering.
-        */
-       public void addOrderBy(String varName, Order order) {
-               query.addOrderBy(varName,
-                               order == Order.ASCENDING ? Query.ORDER_ASCENDING
-                                               : Query.ORDER_DESCENDING);
-       }
-
-       /**
         * Add an order by clause
         * @param condition The SortCondition to add to the order by.
         */
@@ -114,20 +89,20 @@ public class SolutionModifierHandler implements Handler {
        }
 
        /**
-        * Add a node to the order by clause.
-        * @param node
+        * Add a var to the order by clause.
+        * @param var
         */
-       public void addOrderBy(Node node) {
-               query.addOrderBy(node, Query.ORDER_DEFAULT);
+       public void addOrderBy(Var var) {
+               query.addOrderBy(var, Query.ORDER_DEFAULT);
        }
 
        /**
-        * Add a node to add to the order by clause.
-        * @param node The node to add
+        * Add a var to the order by clause.
+        * @param var The var to add
         * @param order The direction of the ordering. 
         */
-       public void addOrderBy(Node node, Order order) {
-               query.addOrderBy(node, order == Order.ASCENDING ? 
Query.ORDER_ASCENDING
+       public void addOrderBy(Var var, Order order) {
+               query.addOrderBy(var, order == Order.ASCENDING ? 
Query.ORDER_ASCENDING
                                : Query.ORDER_DESCENDING);
        }
 
@@ -151,8 +126,8 @@ public class SolutionModifierHandler implements Handler {
         * Add a node to the group by clause. 
         * @param node The node to add.
         */
-       public void addGroupBy(Node node) {
-               query.addGroupBy(node);
+       public void addGroupBy(Var var) {
+               query.addGroupBy(var);
        }
 
        /**
@@ -178,14 +153,6 @@ public class SolutionModifierHandler implements Handler {
        }
 
        /**
-        * Add a node to the having clause.
-        * @param exprNode The node to add.
-        */
-       public void addHaving(Node exprNode) {
-               query.addHavingCondition(new ExprVar(exprNode));
-       }
-
-       /**
         * Add a variable to the having clause.
         * @param var The variable to add.
         */

http://git-wip-us.apache.org/repos/asf/jena/blob/581d2892/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/SolutionModifierTest.java
----------------------------------------------------------------------
diff --git 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/SolutionModifierTest.java
 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/SolutionModifierTest.java
index 996e2bf..8e3244b 100644
--- 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/SolutionModifierTest.java
+++ 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/SolutionModifierTest.java
@@ -19,17 +19,19 @@ package org.apache.jena.arq.querybuilder.clauses;
 
 import static org.junit.Assert.assertFalse;
 import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
+import org.apache.jena.arq.querybuilder.Order;
 import org.apache.jena.arq.querybuilder.clauses.SolutionModifierClause;
-import org.apache.jena.sparql.core.Var ;
-import org.apache.jena.sparql.lang.sparql_11.ParseException ;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.expr.E_Random;
+import org.apache.jena.sparql.expr.Expr;
+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;
 
 @Contract(SolutionModifierClause.class)
-public class SolutionModifierTest<T extends SolutionModifierClause<?>> extends
-               AbstractClauseTest {
+public class SolutionModifierTest<T extends SolutionModifierClause<?>> extends 
AbstractClauseTest {
 
        // the producer we will user
        private IProducer<T> producer;
@@ -50,86 +52,137 @@ public class SolutionModifierTest<T extends 
SolutionModifierClause<?>> extends
        }
 
        @ContractTest
-       public void testAddOrderBy() {
-               SolutionModifierClause<?> solutionModifier = getProducer()
-                               .newInstance();
+       public void testAddOrderByString() {
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
                AbstractQueryBuilder<?> builder = 
solutionModifier.addOrderBy("foo");
                assertContainsRegex(ORDER_BY + var("foo"), 
builder.buildString());
 
                builder = solutionModifier.addOrderBy("bar");
-               assertContainsRegex(ORDER_BY + var("foo") + SPACE + var("bar"),
+               assertContainsRegex(ORDER_BY + var("foo") + SPACE + var("bar"), 
builder.buildString());
+       }
+
+       @ContractTest
+       public void testAddOrderByStringAscending() {
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
+               AbstractQueryBuilder<?> builder = 
solutionModifier.addOrderBy("foo", Order.ASCENDING);
+               assertContainsRegex(ORDER_BY + "ASC" + OPEN_PAREN + var("foo") 
+ CLOSE_PAREN, builder.buildString());
+
+               builder = solutionModifier.addOrderBy("bar");
+               assertContainsRegex(ORDER_BY + "ASC" + OPEN_PAREN + var("foo") 
+ CLOSE_PAREN + SPACE + var("bar"),
+                               builder.buildString());
+       }
+
+       @ContractTest
+       public void testAddOrderByStringDescending() {
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
+               AbstractQueryBuilder<?> builder = 
solutionModifier.addOrderBy("foo", Order.DESCENDING);
+               assertContainsRegex(ORDER_BY + "DESC" + OPEN_PAREN + var("foo") 
+ CLOSE_PAREN, builder.buildString());
+
+               builder = solutionModifier.addOrderBy("bar");
+               assertContainsRegex(ORDER_BY + "DESC" + OPEN_PAREN + var("foo") 
+ CLOSE_PAREN + SPACE + var("bar"),
+                               builder.buildString());
+       }
+
+       @ContractTest
+       public void testAddOrderByExpr() {
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
+               Expr e = new E_Random();
+               AbstractQueryBuilder<?> builder = 
solutionModifier.addOrderBy(e);
+               assertContainsRegex(ORDER_BY + "rand" + OPEN_PAREN + 
CLOSE_PAREN, builder.buildString());
+
+               builder = solutionModifier.addOrderBy("bar");
+               assertContainsRegex(ORDER_BY + "rand" + OPEN_PAREN + 
CLOSE_PAREN + SPACE + var("bar"), builder.buildString());
+       }
+
+       @ContractTest
+       public void testAddOrderByExprAscending() {
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
+               Expr e = new E_Random();
+               AbstractQueryBuilder<?> builder = 
solutionModifier.addOrderBy(e, Order.ASCENDING);
+               assertContainsRegex(ORDER_BY + "ASC" + OPEN_PAREN + "rand" + 
OPEN_PAREN + CLOSE_PAREN + CLOSE_PAREN,
+                               builder.buildString());
+
+               builder = solutionModifier.addOrderBy("bar");
+               assertContainsRegex(
+                               ORDER_BY + "ASC" + OPEN_PAREN + "rand" + 
OPEN_PAREN + CLOSE_PAREN + CLOSE_PAREN + SPACE + var("bar"),
+                               builder.buildString());
+       }
+
+       @ContractTest
+       public void testAddOrderByExprDescending() {
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
+               Expr e = new E_Random();
+               AbstractQueryBuilder<?> builder = 
solutionModifier.addOrderBy(e, Order.DESCENDING);
+               assertContainsRegex(ORDER_BY + "DESC" + OPEN_PAREN + "rand" + 
OPEN_PAREN + CLOSE_PAREN + CLOSE_PAREN,
+                               builder.buildString());
+
+               builder = solutionModifier.addOrderBy("bar");
+               assertContainsRegex(
+                               ORDER_BY + "DESC" + OPEN_PAREN + "rand" + 
OPEN_PAREN + CLOSE_PAREN + CLOSE_PAREN + SPACE + var("bar"),
                                builder.buildString());
        }
 
        @ContractTest
        public void testAddGroupBy() {
-               SolutionModifierClause<?> solutionModifier = getProducer()
-                               .newInstance();
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
                AbstractQueryBuilder<?> builder = 
solutionModifier.addGroupBy("foo");
                assertContainsRegex(GROUP_BY + var("foo"), 
builder.buildString());
 
                builder = solutionModifier.addGroupBy("bar");
-               assertContainsRegex(GROUP_BY + var("foo") + SPACE + var("bar"),
-                               builder.buildString());
+               assertContainsRegex(GROUP_BY + var("foo") + SPACE + var("bar"), 
builder.buildString());
        }
 
        @ContractTest
        public void testAddHaving() throws ParseException {
-               SolutionModifierClause<?> solutionModifier = getProducer()
-                               .newInstance();
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
                AbstractQueryBuilder<?> builder = 
solutionModifier.addHaving("?foo<10");
-               assertContainsRegex(HAVING + OPEN_PAREN + var("foo") + 
OPT_SPACE + LT
-                               + OPT_SPACE + "10" + CLOSE_PAREN, 
builder.buildString());
+               assertContainsRegex(HAVING + OPEN_PAREN + var("foo") + 
OPT_SPACE + LT + OPT_SPACE + "10" + CLOSE_PAREN,
+                               builder.buildString());
 
                builder = solutionModifier.addHaving("?bar < 10");
-               assertContainsRegex(HAVING + OPEN_PAREN + var("foo") + 
OPT_SPACE + LT
-                               + OPT_SPACE + "10" + CLOSE_PAREN + OPT_SPACE + 
OPEN_PAREN
-                               + var("bar") + OPT_SPACE + LT + OPT_SPACE + 
"10" + CLOSE_PAREN,
+               assertContainsRegex(
+                               HAVING + OPEN_PAREN + var("foo") + OPT_SPACE + 
LT + OPT_SPACE + "10" + CLOSE_PAREN + OPT_SPACE
+                                               + OPEN_PAREN + var("bar") + 
OPT_SPACE + LT + OPT_SPACE + "10" + CLOSE_PAREN,
                                builder.buildString());
        }
 
        @ContractTest
        public void testSetLimit() {
-               SolutionModifierClause<?> solutionModifier = getProducer()
-                               .newInstance();
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
                AbstractQueryBuilder<?> builder = 
solutionModifier.setLimit(500);
                assertContainsRegex("LIMIT\\s+500", builder.buildString());
 
                builder = solutionModifier.setLimit(200);
                String s = builder.buildString();
-               assertContainsRegex("LIMIT\\s+200", s);
-               assertNotContainsRegex("LIMIT\\s+500", s);
+               assertContainsRegex(LIMIT + "200", s);
+               assertNotContainsRegex(LIMIT + "500", s);
 
                builder = solutionModifier.setLimit(0);
-               assertFalse("Should not contain LIMIT",
-                               builder.buildString().contains("LIMIT"));
+               assertFalse("Should not contain LIMIT", 
builder.buildString().contains("LIMIT"));
        }
 
        @ContractTest
        public void testSetOffset() {
-               SolutionModifierClause<?> solutionModifier = getProducer()
-                               .newInstance();
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
                AbstractQueryBuilder<?> builder = 
solutionModifier.setOffset(500);
 
-               assertContainsRegex("OFFSET\\s+500", builder.buildString());
+               assertContainsRegex(OFFSET + "500", builder.buildString());
 
                builder = solutionModifier.setOffset(200);
 
                String s = builder.buildString();
-               assertContainsRegex("OFFSET\\s+200", s);
-               assertNotContainsRegex("OFFSET\\s+500", s);
+               assertContainsRegex(OFFSET + "200", s);
+               assertNotContainsRegex(OFFSET + "500", s);
 
                builder = solutionModifier.setOffset(0);
 
-               assertFalse("Should not contain OFFSET", builder.buildString()
-                               .contains("OFFSET"));
+               assertFalse("Should not contain OFFSET", 
builder.buildString().contains("OFFSET"));
        }
 
        @ContractTest
        public void testSetVarsGroupBy() {
                Var v = Var.alloc("v");
-               SolutionModifierClause<?> solutionModifier = getProducer()
-                               .newInstance();
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
                AbstractQueryBuilder<?> builder = 
solutionModifier.addGroupBy("?v");
 
                String[] s = byLine(builder);
@@ -143,8 +196,7 @@ public class SolutionModifierTest<T extends 
SolutionModifierClause<?>> extends
        @ContractTest
        public void testSetVarsHaving() throws ParseException {
                Var v = Var.alloc("v");
-               SolutionModifierClause<?> solutionModifier = getProducer()
-                               .newInstance();
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
                AbstractQueryBuilder<?> builder = 
solutionModifier.addHaving("?v");
 
                String[] s = byLine(builder);
@@ -158,8 +210,7 @@ public class SolutionModifierTest<T extends 
SolutionModifierClause<?>> extends
        @ContractTest
        public void testSetVarsOrderBy() {
                Var v = Var.alloc("v");
-               SolutionModifierClause<?> solutionModifier = getProducer()
-                               .newInstance();
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
                AbstractQueryBuilder<?> builder = 
solutionModifier.addOrderBy("?v");
 
                String[] s = byLine(builder);

http://git-wip-us.apache.org/repos/asf/jena/blob/581d2892/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/SolutionModifierHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/SolutionModifierHandlerTest.java
 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/SolutionModifierHandlerTest.java
index 8c6fe41..1063ab2 100644
--- 
a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/SolutionModifierHandlerTest.java
+++ 
b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/SolutionModifierHandlerTest.java
@@ -47,7 +47,7 @@ public class SolutionModifierHandlerTest extends 
AbstractHandlerTest {
        public void testAddAll() throws ParseException {
                SolutionModifierHandler solutionModifier2 = new 
SolutionModifierHandler(
                                new Query());
-               solutionModifier2.addOrderBy("orderBy");
+               solutionModifier2.addOrderBy( Var.alloc("orderBy"));
                solutionModifier2.addGroupBy("groupBy");
                solutionModifier2.addHaving("?having<10");
                solutionModifier2.setLimit(500);
@@ -66,7 +66,7 @@ public class SolutionModifierHandlerTest extends 
AbstractHandlerTest {
 
        @Test
        public void testAll() throws ParseException {
-               solutionModifier.addOrderBy("orderBy");
+               solutionModifier.addOrderBy(Var.alloc("orderBy"));
                solutionModifier.addGroupBy("groupBy");
                solutionModifier.addHaving("SUM(?lprice) > 10");
                solutionModifier.setLimit(500);
@@ -83,13 +83,13 @@ public class SolutionModifierHandlerTest extends 
AbstractHandlerTest {
 
        @Test
        public void testAddOrderBy() {
-               solutionModifier.addOrderBy("orderBy");
+               solutionModifier.addOrderBy(Var.alloc("orderBy"));
                List<SortCondition> sc = query.getOrderBy();
                assertEquals("Wrong number of conditions", 1, sc.size());
                assertEquals("Wrong value", sc.get(0).expression.asVar(),
                                Var.alloc("orderBy"));
 
-               solutionModifier.addOrderBy("orderBy2");
+               solutionModifier.addOrderBy(Var.alloc("orderBy2"));
                sc = query.getOrderBy();
                assertEquals("Wrong number of conditions", 2, sc.size());
                assertEquals("Wrong value", sc.get(0).expression.asVar(),

Reply via email to