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
