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:45 UTC
[3/5] jena git commit: Added more addHaving() methods inline with
addGroupBy() and addOrderBy()
Added more addHaving() methods inline with addGroupBy() and addOrderBy()
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/cfa7c67b
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/cfa7c67b
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/cfa7c67b
Branch: refs/heads/master
Commit: cfa7c67be1e34bab6dfb9256c003aa75569c86b6
Parents: 2ec5019
Author: Claude Warren <cl...@apache.org>
Authored: Tue Mar 8 20:46:29 2016 +0000
Committer: Claude Warren <cl...@apache.org>
Committed: Tue Mar 8 20:46:29 2016 +0000
----------------------------------------------------------------------
.../jena/arq/querybuilder/AskBuilder.java | 54 +++++++------
.../jena/arq/querybuilder/ConstructBuilder.java | 57 ++++++++------
.../org/apache/jena/arq/querybuilder/Order.java | 17 ++++
.../jena/arq/querybuilder/SelectBuilder.java | 83 ++++++++++++--------
.../clauses/SolutionModifierClause.java | 65 ++++++++++-----
.../clauses/SolutionModifierTest.java | 40 +++++++---
.../handlers/SolutionModifierHandlerTest.java | 27 ++++++-
7 files changed, 230 insertions(+), 113 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/cfa7c67b/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 69cb570..30d4edd 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
@@ -26,21 +26,21 @@ 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.FrontsTriple ;
+import org.apache.jena.graph.FrontsTriple;
import org.apache.jena.graph.Node;
-import org.apache.jena.graph.Triple ;
+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 ;
+import org.apache.jena.sparql.lang.sparql_11.ParseException;
/**
* Build an ASK query.
*
*/
-public class AskBuilder extends AbstractQueryBuilder<AskBuilder> implements
- DatasetClause<AskBuilder>, WhereClause<AskBuilder>,
- SolutionModifierClause<AskBuilder> {
-
+public class AskBuilder extends AbstractQueryBuilder<AskBuilder>
+ implements DatasetClause<AskBuilder>, WhereClause<AskBuilder>, SolutionModifierClause<AskBuilder> {
+
private final HandlerBlock handlerBlock;
/**
@@ -49,15 +49,14 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder> implements
public AskBuilder() {
super();
query.setQueryAskType();
- handlerBlock = new HandlerBlock( query );
+ handlerBlock = new HandlerBlock(query);
}
-
+
@Override
- public HandlerBlock getHandlerBlock()
- {
+ public HandlerBlock getHandlerBlock() {
return handlerBlock;
}
-
+
@Override
public DatasetHandler getDatasetHandler() {
return handlerBlock.getDatasetHandler();
@@ -71,7 +70,7 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder> implements
@Override
public AskBuilder clone() {
AskBuilder qb = new AskBuilder();
- qb.handlerBlock.addAll( handlerBlock );
+ qb.handlerBlock.addAll(handlerBlock);
return qb;
}
@@ -122,10 +121,9 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder> implements
getWhereHandler().addOptional(t);
return this;
}
-
+
@Override
- public AskBuilder addOptional(SelectBuilder t)
- {
+ public AskBuilder addOptional(SelectBuilder t) {
getWhereHandler().addOptional(t.getWhereHandler());
return this;
}
@@ -166,19 +164,19 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder> implements
getWhereHandler().addGraph(makeNode(graph), subQuery.getWhereHandler());
return this;
}
-
+
@Override
public AskBuilder addBind(Expr expression, Object var) {
- getWhereHandler().addBind( expression, makeVar(var) );
+ getWhereHandler().addBind(expression, makeVar(var));
return this;
}
@Override
public AskBuilder addBind(String expression, Object var) throws ParseException {
- getWhereHandler().addBind( expression, makeVar(var) );
+ getWhereHandler().addBind(expression, makeVar(var));
return this;
}
-
+
@Override
public AskBuilder addOrderBy(Expr orderBy) {
getSolutionModifierHandler().addOrderBy(orderBy);
@@ -223,13 +221,13 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder> implements
@Override
public AskBuilder addGroupBy(Object var, Expr expr) {
- getSolutionModifierHandler().addGroupBy(makeVar( var ), expr);
+ getSolutionModifierHandler().addGroupBy(makeVar(var), expr);
return this;
}
@Override
public AskBuilder addGroupBy(Object var, String expr) {
- getSolutionModifierHandler().addGroupBy(makeVar( var ), makeExpr(expr));
+ getSolutionModifierHandler().addGroupBy(makeVar(var), makeExpr(expr));
return this;
}
@@ -240,6 +238,18 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder> implements
}
@Override
+ public AskBuilder addHaving(Expr expression) throws ParseException {
+ getSolutionModifierHandler().addHaving(expression);
+ return this;
+ }
+
+ @Override
+ public AskBuilder addHaving(Var var) throws ParseException {
+ getSolutionModifierHandler().addHaving(var);
+ return this;
+ }
+
+ @Override
public AskBuilder setLimit(int limit) {
getSolutionModifierHandler().setLimit(limit);
return this;
http://git-wip-us.apache.org/repos/asf/jena/blob/cfa7c67b/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 3809633..0e7263b 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,26 +28,23 @@ 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.FrontsTriple;
import org.apache.jena.graph.Node;
-import org.apache.jena.graph.Triple ;
+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 ;
+import org.apache.jena.sparql.lang.sparql_11.ParseException;
/**
* Build an Construct query.
*
*/
-public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder>
- implements DatasetClause<ConstructBuilder>,
- WhereClause<ConstructBuilder>,
- SolutionModifierClause<ConstructBuilder>,
- ConstructClause<ConstructBuilder> {
+public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder> implements DatasetClause<ConstructBuilder>,
+ WhereClause<ConstructBuilder>, SolutionModifierClause<ConstructBuilder>, ConstructClause<ConstructBuilder> {
private final HandlerBlock handlerBlock;
-
+
/**
* Constructor
*/
@@ -78,15 +75,14 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder>
}
@Override
- public HandlerBlock getHandlerBlock()
- {
+ public HandlerBlock getHandlerBlock() {
return handlerBlock;
}
-
+
@Override
public ConstructBuilder clone() {
ConstructBuilder qb = new ConstructBuilder();
- qb.handlerBlock.addAll( handlerBlock );
+ qb.handlerBlock.addAll(handlerBlock);
return qb;
}
@@ -113,7 +109,7 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder>
getDatasetHandler().from(graphName);
return this;
}
-
+
@Override
public ConstructBuilder addOrderBy(Expr orderBy) {
getSolutionModifierHandler().addOrderBy(orderBy);
@@ -165,8 +161,8 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder>
@Override
public ConstructBuilder addGroupBy(Object var, String expr) {
getSolutionModifierHandler().addGroupBy(makeVar(var), makeExpr(expr));
- return this; }
-
+ return this;
+ }
@Override
public ConstructBuilder addHaving(String having) throws ParseException {
@@ -175,6 +171,18 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder>
}
@Override
+ public ConstructBuilder addHaving(Expr expression) throws ParseException {
+ getSolutionModifierHandler().addHaving(expression);
+ return this;
+ }
+
+ @Override
+ public ConstructBuilder addHaving(Var var) throws ParseException {
+ getSolutionModifierHandler().addHaving(var);
+ return this;
+ }
+
+ @Override
public ConstructBuilder setLimit(int limit) {
getSolutionModifierHandler().setLimit(limit);
return this;
@@ -209,10 +217,9 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder>
getWhereHandler().addOptional(t);
return this;
}
-
+
@Override
- public ConstructBuilder addOptional(SelectBuilder t)
- {
+ public ConstructBuilder addOptional(SelectBuilder t) {
getWhereHandler().addOptional(t.getWhereHandler());
return this;
}
@@ -256,16 +263,16 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder>
@Override
public ConstructBuilder addBind(Expr expression, Object var) {
- getWhereHandler().addBind( expression, makeVar(var) );
+ getWhereHandler().addBind(expression, makeVar(var));
return this;
}
@Override
public ConstructBuilder addBind(String expression, Object var) throws ParseException {
- getWhereHandler().addBind( expression, makeVar(var) );
+ getWhereHandler().addBind(expression, makeVar(var));
return this;
}
-
+
@Override
public ConstructBuilder addConstruct(Triple t) {
getConstructHandler().addConstruct(t);
@@ -281,11 +288,9 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder>
public ConstructBuilder addConstruct(Object s, Object p, Object o) {
return addConstruct(new Triple(makeNode(s), makeNode(p), makeNode(o)));
}
-
+
@Override
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/cfa7c67b/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
index c72d4de..596cb4d 100644
--- 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
@@ -1,4 +1,21 @@
package org.apache.jena.arq.querybuilder;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
/**
* The order for the ORDER BY modifiers.
http://git-wip-us.apache.org/repos/asf/jena/blob/cfa7c67b/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 1f1936e..1794fe8 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
@@ -29,32 +29,31 @@ import org.apache.jena.arq.querybuilder.handlers.HandlerBlock;
import org.apache.jena.arq.querybuilder.handlers.SelectHandler;
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.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.core.Var;
import org.apache.jena.sparql.expr.Expr;
-import org.apache.jena.sparql.lang.sparql_11.ParseException ;
+import org.apache.jena.sparql.lang.sparql_11.ParseException;
/**
* Build a select query.
*
*/
-public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
- implements DatasetClause<SelectBuilder>, WhereClause<SelectBuilder>,
- SolutionModifierClause<SelectBuilder>, SelectClause<SelectBuilder> {
+public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder> implements DatasetClause<SelectBuilder>,
+ WhereClause<SelectBuilder>, SolutionModifierClause<SelectBuilder>, SelectClause<SelectBuilder> {
private final HandlerBlock handlerBlock;
-
+
/**
* Constructor.
*/
public SelectBuilder() {
super();
query.setQuerySelectType();
- handlerBlock = new HandlerBlock( query );
+ handlerBlock = new HandlerBlock(query);
}
@Override
@@ -63,11 +62,10 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
}
@Override
- public HandlerBlock getHandlerBlock()
- {
+ public HandlerBlock getHandlerBlock() {
return handlerBlock;
}
-
+
@Override
public WhereHandler getWhereHandler() {
return handlerBlock.getWhereHandler();
@@ -100,12 +98,15 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
/**
* Add an expression string as a filter.
- * @param expression The expression string to add.
- * @throws ParseException If the expression can not be parsed.
+ *
+ * @param expression
+ * The expression string to add.
+ * @throws ParseException
+ * If the expression can not be parsed.
*/
@Override
public SelectBuilder addVar(String expression, Object var) throws ParseException {
- getSelectHandler().addVar( expression, makeVar(var) );
+ getSelectHandler().addVar(expression, makeVar(var));
return this;
}
@@ -114,7 +115,7 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
getSelectHandler().addVar(expr, makeVar(var));
return this;
}
-
+
@Override
public List<Var> getVars() {
return getSelectHandler().getVars();
@@ -152,10 +153,10 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
@Override
public SelectBuilder addOrderBy(Object orderBy) {
- getSolutionModifierHandler().addOrderBy( makeVar(orderBy));
+ getSolutionModifierHandler().addOrderBy(makeVar(orderBy));
return this;
}
-
+
@Override
public SelectBuilder addOrderBy(SortCondition orderBy) {
getSolutionModifierHandler().addOrderBy(orderBy);
@@ -173,7 +174,7 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
getSolutionModifierHandler().addOrderBy(makeVar(orderBy), order);
return this;
}
-
+
@Override
public SelectBuilder addGroupBy(Object groupBy) {
getSolutionModifierHandler().addGroupBy(makeVar(groupBy));
@@ -210,6 +211,18 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
}
@Override
+ public SelectBuilder addHaving(Expr expression) throws ParseException {
+ getSolutionModifierHandler().addHaving(expression);
+ return this;
+ }
+
+ @Override
+ public SelectBuilder addHaving(Var var) throws ParseException {
+ getSolutionModifierHandler().addHaving(var);
+ return this;
+ }
+
+ @Override
public SelectBuilder setLimit(int limit) {
getSolutionModifierHandler().setLimit(limit);
return this;
@@ -222,11 +235,12 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
}
/**
- * Convert a node to a string.
- * If the node is a literal return the literal value.
- * If the node is a URI return the URI enclosed with < and >
- * If the node is a variable return the name preceeded by '?'
- * @param node The node to convert.
+ * Convert a node to a string. If the node is a literal return the literal
+ * value. If the node is a URI return the URI enclosed with < and > If
+ * the node is a variable return the name preceeded by '?'
+ *
+ * @param node
+ * The node to convert.
* @return A string representation of the node.
*/
private static String toString(Node node) {
@@ -246,15 +260,17 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
}
/**
- * Convert the object to a string.
- * If the object is a node or fronts a node then
+ * Convert the object to a string. If the object is a node or fronts a node
+ * then
* <ul>
* <li>If the node is a literal return the literal value.</li>
* <li>If the node is a URI return the URI enclosed with < and ></li>
* <li>If the node is a variable return the name preceeded by '?'</li>
* </ul>
* otherwise return the toString() method of the object.
- * @param o the Object to convert.
+ *
+ * @param o
+ * the Object to convert.
* @return The string representation of the object.
*/
public static String makeString(Object o) {
@@ -304,12 +320,11 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
}
@Override
- public SelectBuilder addOptional(SelectBuilder t)
- {
+ public SelectBuilder addOptional(SelectBuilder t) {
getWhereHandler().addOptional(t.getWhereHandler());
return this;
}
-
+
@Override
public SelectBuilder addFilter(String s) throws ParseException {
getWhereHandler().addFilter(s);
@@ -337,13 +352,13 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder>
@Override
public SelectBuilder addBind(Expr expression, Object var) {
- getWhereHandler().addBind( expression, makeVar(var) );
+ getWhereHandler().addBind(expression, makeVar(var));
return this;
}
@Override
public SelectBuilder addBind(String expression, Object var) throws ParseException {
- getWhereHandler().addBind( expression, makeVar(var) );
+ getWhereHandler().addBind(expression, makeVar(var));
return this;
}
http://git-wip-us.apache.org/repos/asf/jena/blob/cfa7c67b/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 820c1d6..2467422 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
@@ -20,11 +20,10 @@ 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.core.Var;
import org.apache.jena.sparql.expr.Expr;
-import org.apache.jena.sparql.lang.sparql_11.ParseException ;
+import org.apache.jena.sparql.lang.sparql_11.ParseException;
/**
* Interface that defines the SolutionClause as per
@@ -34,7 +33,7 @@ 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.
*
@@ -43,7 +42,7 @@ public interface SolutionModifierClause<T extends AbstractQueryBuilder<T>> {
* @return The builder for chaining.
*/
public T addOrderBy(Expr orderBy);
-
+
/**
* Add an ascending order by.
*
@@ -52,7 +51,7 @@ public interface SolutionModifierClause<T extends AbstractQueryBuilder<T>> {
* @return The builder for chaining.
*/
public T addOrderBy(Object orderBy);
-
+
/**
* Add an ascending order by.
*
@@ -61,23 +60,25 @@ public interface SolutionModifierClause<T extends AbstractQueryBuilder<T>> {
* @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.
+ * @param order
+ * The direction to order.
* @return The builder for chaining.
*/
public T addOrderBy(Expr orderBy, Order order);
-
+
/**
* Add an order by with direction specified.
*
* @param orderBy
* The object to order by.
- * @param order The direction to order.
+ * @param order
+ * The direction to order.
* @return The builder for chaining.
*/
public T addOrderBy(Object orderBy, Order order);
@@ -90,26 +91,33 @@ public interface SolutionModifierClause<T extends AbstractQueryBuilder<T>> {
* @return The builder for chaining.
*/
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.
+ * 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.
+ *
+ * @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.
+ *
+ * @param var
+ * The variable to add.
+ * @param expr
+ * The expression to add.
*/
public T addGroupBy(Object var, String expr);
@@ -121,7 +129,25 @@ public interface SolutionModifierClause<T extends AbstractQueryBuilder<T>> {
* @return The builder for chaining.
*/
public T addHaving(String expression) throws ParseException;
-
+
+ /**
+ * Add a having expression.
+ *
+ * @param expression
+ * Expression to evaluate for the having.
+ * @return The builder for chaining.
+ */
+ public T addHaving(Expr expression) throws ParseException;
+
+ /**
+ * Add a having expression.
+ *
+ * @param var
+ * the variable to have.
+ * @return The builder for chaining.
+ */
+ public T addHaving(Var var) throws ParseException;
+
/**
* Set the limit.
*
@@ -146,6 +172,7 @@ public interface SolutionModifierClause<T extends AbstractQueryBuilder<T>> {
/**
* Get the Solution modifier for this clause.
+ *
* @return The SolutionModifierHandler the clause is using.
*/
public SolutionModifierHandler getSolutionModifierHandler();
http://git-wip-us.apache.org/repos/asf/jena/blob/cfa7c67b/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 aa28f86..c6312d7 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
@@ -131,16 +131,16 @@ 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());
+ 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());
+ assertContainsRegex(GROUP_BY + "rand" + OPEN_PAREN + CLOSE_PAREN + SPACE + var("bar"), builder.buildString());
}
-
+
@ContractTest
public void testAddGroupByVar() {
SolutionModifierClause<?> solutionModifier = getProducer().newInstance();
@@ -150,19 +150,21 @@ 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 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());
+ 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());
+ 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 {
+ public void testAddHavingString() throws ParseException {
SolutionModifierClause<?> solutionModifier = getProducer().newInstance();
AbstractQueryBuilder<?> builder = solutionModifier.addHaving("?foo<10");
assertContainsRegex(HAVING + OPEN_PAREN + var("foo") + OPT_SPACE + LT + OPT_SPACE + "10" + CLOSE_PAREN,
@@ -176,6 +178,26 @@ public class SolutionModifierTest<T extends SolutionModifierClause<?>> extends A
}
@ContractTest
+ public void testAddHavingVar() throws ParseException {
+ SolutionModifierClause<?> solutionModifier = getProducer().newInstance();
+ AbstractQueryBuilder<?> builder = solutionModifier.addHaving(Var.alloc("foo"));
+ assertContainsRegex(HAVING + var("foo"), builder.buildString());
+
+ builder = solutionModifier.addHaving("?having2");
+ assertContainsRegex(HAVING + var("foo") + SPACE + var("having2"), builder.buildString());
+ }
+
+ @ContractTest
+ public void testAddHavingExpr() throws ParseException {
+ SolutionModifierClause<?> solutionModifier = getProducer().newInstance();
+ AbstractQueryBuilder<?> builder = solutionModifier.addHaving(new E_Random());
+ assertContainsRegex(HAVING + "rand" + OPEN_PAREN + CLOSE_PAREN, builder.buildString());
+
+ solutionModifier.addHaving("?having2");
+ assertContainsRegex(HAVING + "rand" + OPEN_PAREN + CLOSE_PAREN + SPACE + var("having2"), builder.buildString());
+ }
+
+ @ContractTest
public void testSetLimit() {
SolutionModifierClause<?> solutionModifier = getProducer().newInstance();
AbstractQueryBuilder<?> builder = solutionModifier.setLimit(500);
http://git-wip-us.apache.org/repos/asf/jena/blob/cfa7c67b/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 1609d45..5d04748 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
@@ -131,15 +131,36 @@ public class SolutionModifierHandlerTest extends AbstractHandlerTest {
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 {
+ public void testAddHavingString() throws ParseException {
solutionModifier.addHaving("?having<10");
assertContainsRegex(HAVING + OPEN_PAREN + var("having") + OPT_SPACE
- + LT + OPT_SPACE + 10 + CLOSE_PAREN, query.toString());
+ + LT + 10 + CLOSE_PAREN, query.toString());
solutionModifier.addHaving("?having2");
assertContainsRegex(HAVING + OPEN_PAREN + var("having") + OPT_SPACE
- + LT + OPT_SPACE + 10 + CLOSE_PAREN + OPT_SPACE
+ + LT + 10 + CLOSE_PAREN + OPT_SPACE
+ + var("having2"), query.toString());
+ }
+
+ @Test
+ public void testAddHavingVar() throws ParseException {
+ solutionModifier.addHaving(Var.alloc("foo"));
+ assertContainsRegex(HAVING + var("foo") , query.toString());
+
+ solutionModifier.addHaving("?having2");
+ assertContainsRegex(HAVING + var("foo") + SPACE
+ + var("having2"), query.toString());
+ }
+
+ @Test
+ public void testAddHavingExpr() throws ParseException {
+ solutionModifier.addHaving( new E_Random());
+ assertContainsRegex(HAVING + "rand"+OPEN_PAREN+CLOSE_PAREN , query.toString());
+
+ solutionModifier.addHaving("?having2");
+ assertContainsRegex(HAVING + "rand"+OPEN_PAREN+CLOSE_PAREN + SPACE
+ var("having2"), query.toString());
}