You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by cl...@apache.org on 2016/03/08 21:57:44 UTC

[2/5] jena git commit: Added additional GroupBy methods similar to new OrderBy methods.

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 <cl...@apache.org>
Authored: Tue Mar 8 20:28:39 2016 +0000
Committer: Claude Warren <cl...@apache.org>
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