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