aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/grouping
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/grouping')
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java32
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/GroupingValidator.java13
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/request/AddFunction.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/request/BucketResolver.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java87
5 files changed, 73 insertions, 71 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java b/container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java
index 9924a05bb46..b9e0825ab03 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java
@@ -12,8 +12,14 @@ import com.yahoo.search.grouping.request.GroupingOperation;
import com.yahoo.search.query.Select;
import com.yahoo.search.searchchain.Execution;
import com.yahoo.search.searchchain.PhaseNames;
+import com.yahoo.processing.IllegalInputException;
-import java.util.*;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
/**
* This searcher is responsible for turning the "select" parameter into a corresponding {@link GroupingRequest}. It will
@@ -35,19 +41,23 @@ public class GroupingQueryParser extends Searcher {
@Override
public Result search(Query query, Execution execution) {
- String reqParam = query.properties().getString(PARAM_REQUEST);
- if (reqParam == null) {
+ try {
+ String reqParam = query.properties().getString(PARAM_REQUEST);
+ if (reqParam == null) return execution.search(query);
+
+ List<Continuation> continuations = getContinuations(query.properties().getString(PARAM_CONTINUE));
+ TimeZone zone = getTimeZone(query.properties().getString(PARAM_TIMEZONE, "utc"));
+ for (GroupingOperation op : GroupingOperation.fromStringAsList(reqParam)) {
+ GroupingRequest grpRequest = GroupingRequest.newInstance(query);
+ grpRequest.setRootOperation(op);
+ grpRequest.setTimeZone(zone);
+ grpRequest.continuations().addAll(continuations);
+ }
return execution.search(query);
}
- List<Continuation> continuations = getContinuations(query.properties().getString(PARAM_CONTINUE));
- TimeZone zone = getTimeZone(query.properties().getString(PARAM_TIMEZONE, "utc"));
- for (GroupingOperation op : GroupingOperation.fromStringAsList(reqParam)) {
- GroupingRequest grpRequest = GroupingRequest.newInstance(query);
- grpRequest.setRootOperation(op);
- grpRequest.setTimeZone(zone);
- grpRequest.continuations().addAll(continuations);
+ catch (IllegalArgumentException e) {
+ throw new IllegalInputException(e);
}
- return execution.search(query);
}
private List<Continuation> getContinuations(String param) {
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/GroupingValidator.java b/container-search/src/main/java/com/yahoo/search/grouping/GroupingValidator.java
index 06b030dbc78..cd8578cd728 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/GroupingValidator.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/GroupingValidator.java
@@ -5,6 +5,7 @@ import com.google.inject.Inject;
import com.yahoo.component.chain.dependencies.After;
import com.yahoo.component.chain.dependencies.Before;
import com.yahoo.component.chain.dependencies.Provides;
+import com.yahoo.processing.IllegalInputException;
import com.yahoo.search.grouping.request.AttributeMapLookupValue;
import com.yahoo.vespa.config.search.AttributesConfig;
import com.yahoo.container.QrSearchersConfig;
@@ -80,14 +81,14 @@ public class GroupingValidator extends Searcher {
AttributesConfig.Attribute keyAttribute = attributes.get(keyAttributeName);
AttributesConfig.Attribute keySourceAttribute = attributes.get(keySourceAttributeName);
if (!keySourceAttribute.datatype().equals(keyAttribute.datatype())) {
- throw new IllegalArgumentException("Grouping request references key source attribute '" +
- keySourceAttributeName + "' with data type '" + keySourceAttribute.datatype() +
- "' that is different than data type '" + keyAttribute.datatype() + "' of key attribute '" +
- keyAttributeName + "'");
+ throw new IllegalInputException("Grouping request references key source attribute '" +
+ keySourceAttributeName + "' with data type '" + keySourceAttribute.datatype() +
+ "' that is different than data type '" + keyAttribute.datatype() + "' of key attribute '" +
+ keyAttributeName + "'");
}
if (!keySourceAttribute.collectiontype().equals(AttributesConfig.Attribute.Collectiontype.Enum.SINGLE)) {
- throw new IllegalArgumentException("Grouping request references key source attribute '" +
- keySourceAttributeName + "' which is not of single value type");
+ throw new IllegalInputException("Grouping request references key source attribute '" +
+ keySourceAttributeName + "' which is not of single value type");
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/AddFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/AddFunction.java
index 420861d2f6c..60805aacd5f 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/request/AddFunction.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/request/AddFunction.java
@@ -38,9 +38,9 @@ public class AddFunction extends FunctionNode {
/**
* Constructs a new instance of this class from a list of arguments.
*
- * @param args The arguments to pass to the constructor.
- * @return The created instance.
- * @throws IllegalArgumentException Thrown if the number of arguments is less than 2.
+ * @param args the arguments to pass to the constructor.
+ * @return the created instance.
+ * @throws IllegalArgumentException thrown if the number of arguments is less than 2.
*/
public static AddFunction newInstance(List<GroupingExpression> args) {
if (args.size() < 2) {
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/BucketResolver.java b/container-search/src/main/java/com/yahoo/search/grouping/request/BucketResolver.java
index c36c8af5c34..6c6b20973ab 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/request/BucketResolver.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/request/BucketResolver.java
@@ -24,9 +24,9 @@ public class BucketResolver {
* Pushes the given expression onto this bucket resolver. Once all buckets have been pushed using this method, call
* {@link #resolve(GroupingExpression)} to retrieve to combined grouping expression.
*
- * @param val The expression to push.
- * @param inclusive Whether or not the value is inclusive or not.
- * @throws IllegalArgumentException Thrown if the expression is incompatible.
+ * @param val the expression to push
+ * @param inclusive whether or not the value is inclusive or not
+ * @throws IllegalArgumentException thrown if the expression is incompatible
*/
public BucketResolver push(ConstantValue<?> val, boolean inclusive) {
if (prev == null) {
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java b/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java
index c825f3c61de..8b73fa01128 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java
@@ -228,8 +228,8 @@ public abstract class GroupingOperation extends GroupingNode {
* method verifies the input level against the operation type, and recursively resolves the level of all argument
* expressions.
*
- * @param level The level of the input data.
- * @throws IllegalArgumentException Thrown if a contained expression is invalid for the given level.
+ * @param level the level of the input data
+ * @throws IllegalArgumentException thrown if a contained expression is invalid for the given level
*/
public void resolveLevel(int level) {
if (groupBy != null) {
@@ -322,12 +322,7 @@ public abstract class GroupingOperation extends GroupingNode {
return this;
}
- /**
- * Return the accuracy of this.
- *
- * @return The accuracy value.
- * @see #setAccuracy(double)
- */
+ /** Return the accuracy of this. */
public double getAccuracy() {
return accuracy;
}
@@ -335,8 +330,8 @@ public abstract class GroupingOperation extends GroupingNode {
/**
* Adds an expression to the order-by clause of this operation.
*
- * @param exp The expressions to add to this.
- * @return This, to allow chaining.
+ * @param exp the expressions to add to this
+ * @return this, to allow chaining
*/
public GroupingOperation addOrderBy(GroupingExpression exp) {
orderBy.add(exp);
@@ -346,11 +341,11 @@ public abstract class GroupingOperation extends GroupingNode {
/**
* Convenience method to call {@link #addOrderBy(GroupingExpression)} for each element in the given list.
*
- * @param lst The list of expressions to add.
- * @return This, to allow chaining.
+ * @param list the list of expressions to add
+ * @return this, to allow chaining
*/
- public GroupingOperation addOrderBy(List<GroupingExpression> lst) {
- for (GroupingExpression exp : lst) {
+ public GroupingOperation addOrderBy(List<GroupingExpression> list) {
+ for (GroupingExpression exp : list) {
addOrderBy(exp);
}
return this;
@@ -359,7 +354,7 @@ public abstract class GroupingOperation extends GroupingNode {
/**
* Returns the number of expressions in the order-by clause of this.
*
- * @return The expression count.
+ * @return the expression count
*/
public int getNumOrderBy() {
return orderBy.size();
@@ -368,9 +363,9 @@ public abstract class GroupingOperation extends GroupingNode {
/**
* Returns the group-by expression at the given index.
*
- * @param i The index of the expression to return.
- * @return The expression at the given index.
- * @throws IndexOutOfBoundsException If the index is out of range.
+ * @param i the index of the expression to return
+ * @return the expression at the given index
+ * @throws IndexOutOfBoundsException if the index is out of range
*/
public GroupingExpression getOrderBy(int i) {
return orderBy.get(i);
@@ -379,7 +374,7 @@ public abstract class GroupingOperation extends GroupingNode {
/**
* Returns an immutable view to the order-by clause of this.
*
- * @return The expression list.
+ * @return the expression list
*/
public List<GroupingExpression> getOrderBy() {
return Collections.unmodifiableList(orderBy);
@@ -388,8 +383,8 @@ public abstract class GroupingOperation extends GroupingNode {
/**
* Adds an expression to the output clause of this operation.
*
- * @param exp The expressions to add to this.
- * @return This, to allow chaining.
+ * @param exp the expressions to add to this
+ * @return this, to allow chaining
*/
public GroupingOperation addOutput(GroupingExpression exp) {
outputs.add(exp);
@@ -399,8 +394,8 @@ public abstract class GroupingOperation extends GroupingNode {
/**
* Convenience method to call {@link #addOutput(GroupingExpression)} for each element in the given list.
*
- * @param lst The list of expressions to add.
- * @return This, to allow chaining.
+ * @param lst the list of expressions to add
+ * @return this, to allow chaining
*/
public GroupingOperation addOutputs(List<GroupingExpression> lst) {
for (GroupingExpression exp : lst) {
@@ -412,7 +407,7 @@ public abstract class GroupingOperation extends GroupingNode {
/**
* Returns the number of expressions in the output clause of this.
*
- * @return The expression count.
+ * @return the expression count
*/
public int getNumOutputs() {
return outputs.size();
@@ -421,9 +416,9 @@ public abstract class GroupingOperation extends GroupingNode {
/**
* Returns the output expression at the given index.
*
- * @param i The index of the expression to return.
- * @return The expression at the given index.
- * @throws IndexOutOfBoundsException If the index is out of range.
+ * @param i the index of the expression to return
+ * @return the expression at the given index
+ * @throws IndexOutOfBoundsException If the index is out of range
*/
public GroupingExpression getOutput(int i) {
return outputs.get(i);
@@ -432,7 +427,7 @@ public abstract class GroupingOperation extends GroupingNode {
/**
* Returns an immutable view to the output clause of this.
*
- * @return The expression list.
+ * @return the expression list
*/
public List<GroupingExpression> getOutputs() {
return Collections.unmodifiableList(outputs);
@@ -443,8 +438,8 @@ public abstract class GroupingOperation extends GroupingNode {
* during expression evaluation to give the dispatch-node more data to consider when selecting the N groups that are
* to be evaluated further.
*
- * @param precision The precision to set.
- * @return This, to allow chaining.
+ * @param precision the precision to set
+ * @return this, to allow chaining
* @see #setMax(int)
*/
public GroupingOperation setPrecision(int precision) {
@@ -452,11 +447,7 @@ public abstract class GroupingOperation extends GroupingNode {
return this;
}
- /**
- * Returns the precision clause of this.
- *
- * @return The precision.
- */
+ /** Returns the precision clause of this. */
public int getPrecision() {
return precision;
}
@@ -464,11 +455,11 @@ public abstract class GroupingOperation extends GroupingNode {
/**
* Assigns a string as the where clause of this operation.
*
- * @param str The string to assign to this.
- * @return This, to allow chaining.
+ * @param string the string to assign to this
+ * @return this, to allow chaining
*/
- public GroupingOperation setWhere(String str) {
- where = str;
+ public GroupingOperation setWhere(String string) {
+ where = string;
return this;
}
@@ -590,9 +581,9 @@ public abstract class GroupingOperation extends GroupingNode {
* Convenience method to call {@link #fromStringAsList(String)} and assert that the list contains exactly one
* grouping operation.
*
- * @param str The string to parse.
- * @return A grouping operation that corresponds to the string.
- * @throws IllegalArgumentException Thrown if the string could not be parsed as a single operation.
+ * @param str the string to parse
+ * @return a grouping operation that corresponds to the string
+ * @throws IllegalArgumentException thrown if the string could not be parsed as a single operation
*/
public static GroupingOperation fromString(String str) {
List<GroupingOperation> lst = fromStringAsList(str);
@@ -606,15 +597,15 @@ public abstract class GroupingOperation extends GroupingNode {
* Parses the given string as a list of grouping operations. This method never returns null, it either returns a
* list of valid grouping requests or it throws an exception.
*
- * @param str The string to parse.
- * @return A list of grouping operations that corresponds to the string.
- * @throws IllegalArgumentException Thrown if the string could not be parsed.
+ * @param string the string to parse
+ * @return a list of grouping operations that corresponds to the string
+ * @throws IllegalArgumentException thrown if the string could not be parsed
*/
- public static List<GroupingOperation> fromStringAsList(String str) {
- if (str == null || str.trim().length() == 0) {
+ public static List<GroupingOperation> fromStringAsList(String string) {
+ if (string == null || string.trim().length() == 0) {
return Collections.emptyList();
}
- GroupingParserInput input = new GroupingParserInput(str);
+ GroupingParserInput input = new GroupingParserInput(string);
try {
return new GroupingParser(input).requestList();
} catch (ParseException | TokenMgrException e) {