Added additional GroupBy methods similar to new OrderBy methods.

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

Branch: refs/heads/master
Commit: 2ec5019836780e789819494e5985929ad64f07d4
Parents: 581d289
Author: Claude Warren <[email protected]>
Authored: Tue Mar 8 20:28:39 2016 +0000
Committer: Claude Warren <[email protected]>
Committed: Tue Mar 8 20:28:39 2016 +0000

----------------------------------------------------------------------
 .../jena/arq/querybuilder/AskBuilder.java       | 20 ++++++++-
 .../jena/arq/querybuilder/ConstructBuilder.java | 21 ++++++++-
 .../jena/arq/querybuilder/SelectBuilder.java    | 20 ++++++++-
 .../clauses/SolutionModifierClause.java         | 31 +++++++++++--
 .../handlers/SolutionModifierHandler.java       |  8 ----
 .../jena/arq/AbstractRegexpBasedTest.java       |  6 +--
 .../clauses/SolutionModifierTest.java           | 31 ++++++++++++-
 .../handlers/SolutionModifierHandlerTest.java   | 46 +++++++++++++++-----
 8 files changed, 152 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/2ec50198/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 23965a8..69cb570 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
@@ -210,12 +210,30 @@ public class AskBuilder extends 
AbstractQueryBuilder<AskBuilder> implements
        }
 
        @Override
-       public AskBuilder addGroupBy(String groupBy) {
+       public AskBuilder addGroupBy(Object groupBy) {
+               getSolutionModifierHandler().addGroupBy(makeVar(groupBy));
+               return this;
+       }
+
+       @Override
+       public AskBuilder addGroupBy(Expr groupBy) {
                getSolutionModifierHandler().addGroupBy(groupBy);
                return this;
        }
 
        @Override
+       public AskBuilder addGroupBy(Object var, Expr expr) {
+               getSolutionModifierHandler().addGroupBy(makeVar( var ), expr);
+               return this;
+       }
+
+       @Override
+       public AskBuilder addGroupBy(Object var, String expr) {
+               getSolutionModifierHandler().addGroupBy(makeVar( var ), 
makeExpr(expr));
+               return this;
+       }
+
+       @Override
        public AskBuilder addHaving(String having) throws ParseException {
                getSolutionModifierHandler().addHaving(having);
                return this;

http://git-wip-us.apache.org/repos/asf/jena/blob/2ec50198/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 9db1dae..3809633 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
@@ -145,12 +145,30 @@ public class ConstructBuilder extends 
AbstractQueryBuilder<ConstructBuilder>
        }
 
        @Override
-       public ConstructBuilder addGroupBy(String groupBy) {
+       public ConstructBuilder addGroupBy(Object groupBy) {
+               getSolutionModifierHandler().addGroupBy(makeVar(groupBy));
+               return this;
+       }
+
+       @Override
+       public ConstructBuilder addGroupBy(Expr groupBy) {
                getSolutionModifierHandler().addGroupBy(groupBy);
                return this;
        }
 
        @Override
+       public ConstructBuilder addGroupBy(Object var, Expr expr) {
+               getSolutionModifierHandler().addGroupBy(makeVar(var), expr);
+               return this;
+       }
+
+       @Override
+       public ConstructBuilder addGroupBy(Object var, String expr) {
+               getSolutionModifierHandler().addGroupBy(makeVar(var), 
makeExpr(expr));
+               return this;    }
+
+
+       @Override
        public ConstructBuilder addHaving(String having) throws ParseException {
                getSolutionModifierHandler().addHaving(having);
                return this;
@@ -269,4 +287,5 @@ public class ConstructBuilder extends 
AbstractQueryBuilder<ConstructBuilder>
                return getWhereHandler().list(objs);
        }
 
+       
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/2ec50198/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 5979e07..1f1936e 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
@@ -173,14 +173,32 @@ public class SelectBuilder extends 
AbstractQueryBuilder<SelectBuilder>
                getSolutionModifierHandler().addOrderBy(makeVar(orderBy), 
order);
                return this;
        }
+       
+       @Override
+       public SelectBuilder addGroupBy(Object groupBy) {
+               getSolutionModifierHandler().addGroupBy(makeVar(groupBy));
+               return this;
+       }
 
        @Override
-       public SelectBuilder addGroupBy(String groupBy) {
+       public SelectBuilder addGroupBy(Expr groupBy) {
                getSolutionModifierHandler().addGroupBy(groupBy);
                return this;
        }
 
        @Override
+       public SelectBuilder addGroupBy(Object var, Expr expr) {
+               getSolutionModifierHandler().addGroupBy(makeVar(var), expr);
+               return this;
+       }
+
+       @Override
+       public SelectBuilder addGroupBy(Object var, String expr) {
+               getSolutionModifierHandler().addGroupBy(makeVar(var), 
makeExpr(expr));
+               return this;
+       }
+
+       @Override
        public SolutionModifierHandler getSolutionModifierHandler() {
                return handlerBlock.getModifierHandler();
        }

http://git-wip-us.apache.org/repos/asf/jena/blob/2ec50198/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 af0b602..820c1d6 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
@@ -22,6 +22,7 @@ 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.core.Var;
 import org.apache.jena.sparql.expr.Expr;
 import org.apache.jena.sparql.lang.sparql_11.ParseException ;
 
@@ -82,13 +83,35 @@ public interface SolutionModifierClause<T extends 
AbstractQueryBuilder<T>> {
        public T addOrderBy(Object orderBy, Order order);
 
        /**
-        * Add a group by
+        * Add a variable to the group by clause.
         * 
         * @param groupBy
-        *            The variable name to group by.
+        *            The object to group by.
         * @return The builder for chaining.
         */
-       public T addGroupBy(String groupBy);
+       public T addGroupBy(Object groupBy);
+       
+       /**
+        * Add an expression to the group by clause. 
+        * The expression may be created from a string using the makeExpr() 
method.
+        * @param groupBy The expression to add.
+        */
+       public T addGroupBy(Expr groupBy);
+
+       /**
+        * Add var and expression to the group by clause.
+        * @param var The variable to add.
+        * @param expr The expression to add.
+        */
+       public T addGroupBy(Object var, Expr expr);
+
+
+       /**
+        * Add var and expression to the group by clause.
+        * @param var The variable to add.
+        * @param expr The expression to add.
+        */
+       public T addGroupBy(Object var, String expr);
 
        /**
         * Add a having expression.
@@ -98,7 +121,7 @@ public interface SolutionModifierClause<T extends 
AbstractQueryBuilder<T>> {
         * @return The builder for chaining.
         */
        public T addHaving(String expression) throws ParseException;
-
+       
        /**
         * Set the limit.
         * 

http://git-wip-us.apache.org/repos/asf/jena/blob/2ec50198/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 eb0fbbb..c170ae0 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
@@ -107,14 +107,6 @@ public class SolutionModifierHandler implements Handler {
        }
 
        /**
-        * Add a variable to the group by clause. 
-        * @param varName The variable name to add.
-        */
-       public void addGroupBy(String varName) {
-               query.addGroupBy(varName);
-       }
-
-       /**
         * Add an expression to the group by clause. 
         * @param expr The expression to add.
         */

http://git-wip-us.apache.org/repos/asf/jena/blob/2ec50198/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 6be2010..57b1f77 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
@@ -33,9 +33,9 @@ public abstract class AbstractRegexpBasedTest {
        protected static final String OPEN_PAREN = "\\(" + OPT_SPACE;
        protected static final String CLOSE_PAREN = OPT_SPACE + "\\)";
        protected static final String QUOTE = "\\\"";
-       protected static final String LT = "\\<";
-       protected static final String GT = "\\>";
-       protected static final String EQ = "=";
+       protected static final String LT = "\\<"+OPT_SPACE;
+       protected static final String GT = "\\>"+OPT_SPACE;
+       protected static final String EQ = "="+OPT_SPACE;
        protected static final String DOT = OPT_SPACE+"\\.";
        protected static final String ORDER_BY = "ORDER" + SPACE + "BY" + SPACE;
        protected static final String GROUP_BY = "GROUP" + SPACE + "BY" + SPACE;

http://git-wip-us.apache.org/repos/asf/jena/blob/2ec50198/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 8e3244b..aa28f86 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
@@ -123,7 +123,7 @@ public class SolutionModifierTest<T extends 
SolutionModifierClause<?>> extends A
        }
 
        @ContractTest
-       public void testAddGroupBy() {
+       public void testAddGroupByString() {
                SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
                AbstractQueryBuilder<?> builder = 
solutionModifier.addGroupBy("foo");
                assertContainsRegex(GROUP_BY + var("foo"), 
builder.buildString());
@@ -131,6 +131,35 @@ public class SolutionModifierTest<T extends 
SolutionModifierClause<?>> extends A
                builder = solutionModifier.addGroupBy("bar");
                assertContainsRegex(GROUP_BY + var("foo") + SPACE + var("bar"), 
builder.buildString());
        }
+       
+       @ContractTest
+       public void testAddGroupByExpr() {
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
+               AbstractQueryBuilder<?> builder = solutionModifier.addGroupBy( 
new E_Random());
+               assertContainsRegex(GROUP_BY+"rand"+OPEN_PAREN+CLOSE_PAREN, 
builder.buildString());
+               builder = solutionModifier.addGroupBy("bar");
+               assertContainsRegex(GROUP_BY+"rand"+OPEN_PAREN+CLOSE_PAREN + 
SPACE + var("bar"), builder.buildString());
+       }
+       
+       @ContractTest
+       public void testAddGroupByVar() {
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
+               AbstractQueryBuilder<?> builder = 
solutionModifier.addGroupBy(Var.alloc("foo"));
+               assertContainsRegex(GROUP_BY + var("foo"), 
builder.buildString());
+
+               builder = solutionModifier.addGroupBy("bar");
+               assertContainsRegex(GROUP_BY + var("foo") + SPACE + var("bar"), 
builder.buildString());
+       }
+       
+       @ContractTest
+       public void testAddGroupByVarAndExpr() {
+               SolutionModifierClause<?> solutionModifier = 
getProducer().newInstance();
+               AbstractQueryBuilder<?> builder = 
solutionModifier.addGroupBy(Var.alloc("foo"), new E_Random());
+               
assertContainsRegex(GROUP_BY+OPEN_PAREN+"rand"+OPEN_PAREN+CLOSE_PAREN+SPACE+"AS"+SPACE+var("foo")+CLOSE_PAREN,
 builder.buildString());
+
+               builder = solutionModifier.addGroupBy("bar");
+               
assertContainsRegex(GROUP_BY+OPEN_PAREN+"rand"+OPEN_PAREN+CLOSE_PAREN+SPACE+"AS"+SPACE+var("foo")+CLOSE_PAREN+
 SPACE + var("bar"), builder.buildString());
+       }
 
        @ContractTest
        public void testAddHaving() throws ParseException {

http://git-wip-us.apache.org/repos/asf/jena/blob/2ec50198/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 1063ab2..1609d45 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
@@ -28,6 +28,7 @@ import org.apache.jena.graph.Node ;
 import org.apache.jena.query.Query ;
 import org.apache.jena.query.SortCondition ;
 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.junit.Before;
 import org.junit.Test;
@@ -48,7 +49,7 @@ public class SolutionModifierHandlerTest extends 
AbstractHandlerTest {
                SolutionModifierHandler solutionModifier2 = new 
SolutionModifierHandler(
                                new Query());
                solutionModifier2.addOrderBy( Var.alloc("orderBy"));
-               solutionModifier2.addGroupBy("groupBy");
+               solutionModifier2.addGroupBy( Var.alloc("groupBy"));
                solutionModifier2.addHaving("?having<10");
                solutionModifier2.setLimit(500);
                solutionModifier2.setOffset(200);
@@ -67,17 +68,17 @@ public class SolutionModifierHandlerTest extends 
AbstractHandlerTest {
        @Test
        public void testAll() throws ParseException {
                solutionModifier.addOrderBy(Var.alloc("orderBy"));
-               solutionModifier.addGroupBy("groupBy");
+               solutionModifier.addGroupBy(Var.alloc("groupBy"));
                solutionModifier.addHaving("SUM(?lprice) > 10");
                solutionModifier.setLimit(500);
                solutionModifier.setOffset(200);
 
                String[] s = byLine(query.toString());
-               assertContainsRegex("GROUP BY\\s+\\?groupBy", s);
-               assertContainsRegex("HAVING\\s+\\( SUM\\(\\?lprice\\) > 10 
\\)", s);
-               assertContainsRegex("ORDER BY\\s+\\?orderBy", s);
-               assertContainsRegex("LIMIT\\s+500", s);
-               assertContainsRegex("OFFSET\\s+200", s);
+               assertContainsRegex(GROUP_BY+var("groupBy"), s);
+               assertContainsRegex(HAVING + OPEN_PAREN+ "SUM" + OPEN_PAREN + 
var("lprice") + CLOSE_PAREN+ OPT_SPACE+GT+"10"+CLOSE_PAREN, s);
+               assertContainsRegex(ORDER_BY + var("orderBy"), s);
+               assertContainsRegex(LIMIT+"500", s);
+               assertContainsRegex(OFFSET+"200", s);
 
        }
 
@@ -99,17 +100,38 @@ public class SolutionModifierHandlerTest extends 
AbstractHandlerTest {
        }
 
        @Test
-       public void testAddGroupBy() {
-               solutionModifier.addGroupBy("groupBy");
+       public void testAddGroupByVar() {
+               solutionModifier.addGroupBy( Var.alloc("groupBy"));
                String[] s = byLine(query.toString());
-               assertContainsRegex("GROUP BY\\s+\\?groupBy", s);
+               assertContainsRegex(GROUP_BY+var("groupBy"), s);
 
-               solutionModifier.addGroupBy("groupBy2");
+               solutionModifier.addGroupBy( Var.alloc("groupBy2") );
                s = byLine(query.toString());
-               assertContainsRegex("GROUP BY\\s+\\?groupBy\\s+\\?groupBy2", s);
+               
assertContainsRegex(GROUP_BY+var("groupBy")+SPACE+var("groupBy2"), s);
        }
 
        @Test
+       public void testAddGroupByExpr() {
+               solutionModifier.addGroupBy( new E_Random());
+               String[] s = byLine(query.toString());
+               assertContainsRegex(GROUP_BY+"rand"+OPEN_PAREN+CLOSE_PAREN, s);
+
+               solutionModifier.addGroupBy( Var.alloc("groupBy2") );
+               s = byLine(query.toString());
+               
assertContainsRegex(GROUP_BY+"rand"+OPEN_PAREN+CLOSE_PAREN+SPACE+var("groupBy2"),
 s);
+       }
+       
+       @Test
+       public void testAddGroupByVarAndExpr() {
+               solutionModifier.addGroupBy( Var.alloc( "groupBy"), new 
E_Random());
+               String[] s = byLine(query.toString());
+               
assertContainsRegex(GROUP_BY+OPEN_PAREN+"rand"+OPEN_PAREN+CLOSE_PAREN+SPACE+"AS"+SPACE+var("groupBy")+CLOSE_PAREN,
 s);
+
+               solutionModifier.addGroupBy( Var.alloc("groupBy2") );
+               s = byLine(query.toString());
+               
assertContainsRegex(GROUP_BY+OPEN_PAREN+"rand"+OPEN_PAREN+CLOSE_PAREN+SPACE+"AS"+SPACE+var("groupBy")+CLOSE_PAREN+SPACE+var("groupBy2"),
 s);
+       }
+       @Test
        public void testAddHaving() throws ParseException {
                solutionModifier.addHaving("?having<10");
                assertContainsRegex(HAVING + OPEN_PAREN + var("having") + 
OPT_SPACE

Reply via email to