diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2018-08-15 12:21:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-15 12:21:56 +0200 |
commit | 619faa8533398743f347f1fbc63cc808e6b7938d (patch) | |
tree | 3e61a3f106db4eae8598d7e746c0dcdd35db4a90 | |
parent | ac138b6b38e3f82cf40f4a467c8e56546219883e (diff) |
Revert "Revert "Revert "Added a object structure for GroupingRequest objects, accessable from…"""
133 files changed, 443 insertions, 1704 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java index c93220f0a85..90410699748 100644 --- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java +++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java @@ -203,7 +203,7 @@ public class FastSearcher extends VespaBackEndSearcher { /** When we only search a single node, doing all grouping in one pass is more efficient */ private void forceSinglePassGrouping(Query query) { - for (GroupingRequest groupingRequest : query.getSelect().getGrouping()) + for (GroupingRequest groupingRequest : GroupingRequest.getRequests(query)) forceSinglePassGrouping(groupingRequest.getRootOperation()); } diff --git a/container-search/src/main/java/com/yahoo/search/Query.java b/container-search/src/main/java/com/yahoo/search/Query.java index 53435941e26..cfb1c9a26be 100644 --- a/container-search/src/main/java/com/yahoo/search/Query.java +++ b/container-search/src/main/java/com/yahoo/search/Query.java @@ -972,7 +972,6 @@ public class Query extends com.yahoo.processing.Request implements Cloneable { private void copyPropertiesTo(Query clone) { clone.model = model.cloneFor(clone); - clone.select = select.cloneFor(clone); clone.ranking = (Ranking) ranking.clone(); clone.presentation = (Presentation) presentation.clone(); clone.context = getContext(true).cloneFor(clone); diff --git a/container-search/src/main/java/com/yahoo/search/grouping/Continuation.java b/container-search/src/main/java/com/yahoo/search/grouping/Continuation.java index d7ee3fedfc9..eda2b449fda 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/Continuation.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/Continuation.java @@ -21,8 +21,4 @@ public abstract class Continuation { public static Continuation fromString(String str) { return ContinuationDecoder.decode(str); } - - /** Returns a deep copy of this */ - public abstract Continuation copy(); - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/GroupingRequest.java b/container-search/src/main/java/com/yahoo/search/grouping/GroupingRequest.java index 754d3b562d3..8ce0d90dfc5 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/GroupingRequest.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/GroupingRequest.java @@ -8,7 +8,6 @@ import com.yahoo.search.Result; import com.yahoo.search.grouping.request.GroupingOperation; import com.yahoo.search.grouping.result.Group; import com.yahoo.search.grouping.result.RootGroup; -import com.yahoo.search.query.Select; import com.yahoo.search.result.Hit; import java.util.*; @@ -20,53 +19,35 @@ import java.util.*; * result {@link Group} using the {@link #getResultGroup(Result)} method. * * @author Simon Thoresen Hult - * @author bratseth */ public class GroupingRequest { - private final Select parent; + private final static CompoundName PROP_REQUEST = new CompoundName(GroupingRequest.class.getName() + ".Request"); private final List<Continuation> continuations = new ArrayList<>(); + private final int requestId; private GroupingOperation root; private TimeZone timeZone; private URI resultId; - private GroupingRequest(Select parent) { - this.parent = parent; - } - - private GroupingRequest(Select parent, - List<Continuation> continuations, - GroupingOperation root, - TimeZone timeZone, - URI resultId) { - this.parent = parent; - continuations.forEach(item -> this.continuations.add(item.copy())); - this.root = root != null ? root.copy(null) : null; - this.timeZone = timeZone; - this.resultId = resultId; - } - - /** Returns a deep copy of this */ - public GroupingRequest copy(Select parentOfCopy) { - return new GroupingRequest(parentOfCopy, continuations, root, timeZone, resultId); + private GroupingRequest(int requestId) { + this.requestId = requestId; } /** - * Returns the id of this GroupingRequest. - * This id is injected into the {@link RootGroup} of the final result, and + * Returns the id of this GroupingRequest. This id is injected into the {@link RootGroup} of the final result, and * allows tracking of per-request meta data. * - * @return the id of this request, or -1 if it has been removed from the query select statement + * @return The id of this. */ public int getRequestId() { - return parent.getGrouping().indexOf(this); + return requestId; } /** * Returns the root {@link GroupingOperation} that defines this request. As long as this remains unset, the request * is void. * - * @return the root operation. + * @return The root operation. */ public GroupingOperation getRootOperation() { return root; @@ -76,8 +57,8 @@ public class GroupingRequest { * Sets the root {@link GroupingOperation} that defines this request. As long as this remains unset, the request is * void. * - * @param root the root operation to set. - * @return this, to allow chaining. + * @param root The root operation to set. + * @return This, to allow chaining. */ public GroupingRequest setRootOperation(GroupingOperation root) { this.root = root; @@ -88,7 +69,7 @@ public class GroupingRequest { * Returns the {@link TimeZone} used when resolving time expressions such as {@link * com.yahoo.search.grouping.request.DayOfMonthFunction} and {@link com.yahoo.search.grouping.request.HourOfDayFunction}. * - * @return the time zone in use. + * @return The time zone in use. */ public TimeZone getTimeZone() { return timeZone; @@ -98,8 +79,8 @@ public class GroupingRequest { * Sets the {@link TimeZone} used when resolving time expressions such as {@link * com.yahoo.search.grouping.request.DayOfMonthFunction} and {@link com.yahoo.search.grouping.request.HourOfDayFunction}. * - * @param timeZone the time zone to set. - * @return this, to allow chaining. + * @param timeZone The time zone to set. + * @return This, to allow chaining. */ public GroupingRequest setTimeZone(TimeZone timeZone) { this.timeZone = timeZone; @@ -111,8 +92,8 @@ public class GroupingRequest { * search returns. Because searchers are allowed to modify both {@link Result} and {@link Hit} objects freely, this * method requires that you pass it the current {@link Result} object as argument. * - * @param result the search result that contains the root group. - * @return the result {@link RootGroup} of this request, or null if not found. + * @param result The search result that contains the root group. + * @return The result {@link RootGroup} of this request, or null if not found. */ public RootGroup getResultGroup(Result result) { Hit root = result.hits().get(resultId, -1); @@ -126,8 +107,8 @@ public class GroupingRequest { * Sets the result {@link RootGroup} of this request. This is used by the executing grouping searcher, and should * not be called by a requesting searcher. * - * @param group the result to set. - * @return this, to allow chaining. + * @param group The result to set. + * @return This, to allow chaining. */ public GroupingRequest setResultGroup(RootGroup group) { this.resultId = group.getId(); @@ -138,41 +119,46 @@ public class GroupingRequest { * Returns the list of {@link Continuation}s of this request. This is used by the executing grouping searcher to * allow pagination of grouping results. * - * @return the list of Continuations. + * @return The list of Continuations. */ public List<Continuation> continuations() { return continuations; } /** - * Creates a new grouping request and adds it to the query.getSelect().getGrouping() list + * Creates and attaches a new instance of this class to the given {@link Query}. This is necessary to allow {@link + * #getRequests(Query)} to return all created requests. * - * @param query the query to attach the request to. + * @param query The query to attach the request to. * @return The created request. */ public static GroupingRequest newInstance(Query query) { - GroupingRequest newRequest = new GroupingRequest(query.getSelect()); - query.getSelect().getGrouping().add(newRequest); - return newRequest; + List<GroupingRequest> lst = getRequests(query); + if (lst.isEmpty()) { + lst = new LinkedList<>(); + query.properties().set(PROP_REQUEST, lst); + } + GroupingRequest ret = new GroupingRequest(lst.size()); + lst.add(ret); + return ret; } /** * Returns all instances of this class that have been attached to the given {@link Query}. If no requests have been * attached to the {@link Query}, this method returns an empty list. * - * @param query the query whose requests to return. - * @return the list of grouping requests. - * @deprecated use query.getSelect().getGrouping() + * @param query The query whose requests to return. + * @return The list of grouping requests. */ @SuppressWarnings({ "unchecked" }) - @Deprecated public static List<GroupingRequest> getRequests(Query query) { - return query.getSelect().getGrouping(); - } - - @Override - public String toString() { - return root == null ? "(empty)" : root.toString(); + Object lst = query.properties().get(PROP_REQUEST); + if (lst == null) { + return Collections.emptyList(); + } + if (!(lst instanceof List)) { + throw new IllegalArgumentException("Expected " + GroupingRequest.class + ", got " + lst.getClass() + "."); + } + return (List<GroupingRequest>)lst; } - } 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 d96f490909e..6379c43bc87 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 @@ -63,8 +63,9 @@ public class GroupingValidator extends Searcher { public Result search(Query query, Execution execution) { if (enabled && query.properties().getBoolean(PARAM_ENABLED, true)) { ExpressionVisitor visitor = new MyVisitor(); - for (GroupingRequest req : query.getSelect().getGrouping()) + for (GroupingRequest req : GroupingRequest.getRequests(query)) { req.getRootOperation().visitExpressions(visitor); + } } return execution.search(query); } 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..8cb27569e67 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 @@ -2,14 +2,12 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents an add-function in a {@link GroupingExpression}. It evaluates to a number that equals the * result of adding the results of all arguments together in the order they were given to the constructor. * * @author Simon Thoresen Hult - * @author bratseth */ public class AddFunction extends FunctionNode { @@ -21,18 +19,11 @@ public class AddFunction extends FunctionNode { * @param argN The optional arguments, must evaluate to a number. */ public AddFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private AddFunction(String label, Integer level, List<GroupingExpression> args) { - super("add", label, level, args); - } - - @Override - public AddFunction copy() { - return new AddFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private AddFunction(List<GroupingExpression> args) { + super("add", args); } /** @@ -46,6 +37,6 @@ public class AddFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new AddFunction(null, null, args); + return new AddFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/AggregatorNode.java b/container-search/src/main/java/com/yahoo/search/grouping/request/AggregatorNode.java index 6166833999a..323f1ac769a 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/AggregatorNode.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/AggregatorNode.java @@ -12,13 +12,13 @@ public abstract class AggregatorNode extends GroupingExpression { private final GroupingExpression exp; - protected AggregatorNode(String image, String label, Integer level) { - super(image + "()", label, level); + protected AggregatorNode(String image) { + super(image + "()"); this.exp = null; } - protected AggregatorNode(String image, String label, Integer level, GroupingExpression exp) { - super(image + "(" + exp.toString() + ")", label, level); + protected AggregatorNode(String image, GroupingExpression exp) { + super(image + "(" + exp.toString() + ")"); this.exp = exp; } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/AllOperation.java b/container-search/src/main/java/com/yahoo/search/grouping/request/AllOperation.java index 93b46d95d89..b809706331f 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/AllOperation.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/AllOperation.java @@ -1,16 +1,11 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.grouping.request; -import java.util.List; -import java.util.Map; -import java.util.Set; - /** * This is a grouping operation that processes the input list as a whole, as opposed to {@link EachOperation} which * processes each element of that list separately. * * @author Simon Thoresen Hult - * @author bratseth */ public class AllOperation extends GroupingOperation { @@ -18,44 +13,6 @@ public class AllOperation extends GroupingOperation { * Constructs a new instance of this class. */ public AllOperation() { - super("all", null); - } - - private AllOperation(GroupingOperation parentOfCopy, - String image, - String label, - List<GroupingExpression> orderBy, - List<GroupingExpression> outputs, - List<GroupingOperation> children, - Map<String, GroupingExpression> aliases, - Set<String> hints, - GroupingExpression groupBy, - String where, - boolean forceSinglePass, - double accuracy, - int precision, - int level, - int max) { - super(parentOfCopy, image, label, orderBy, outputs, children, aliases, hints, groupBy, where, forceSinglePass, accuracy, precision, level, max); + super("all"); } - - @Override - public AllOperation copy(GroupingOperation parentOfCopy) { - return new AllOperation(parentOfCopy, - getImage(), - getLabel(), - getOrderBy(), - getOutputs(), - getChildren(), - getAliases(), - getHints(), - getGroupBy(), - getWhere(), - getForceSinglePass(), - getAccuracy(), - getPrecision(), - getLevel(), - getMax()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/AndFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/AndFunction.java index 569f0d06987..5f2617acf16 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/AndFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/AndFunction.java @@ -2,14 +2,12 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents an and-function in a {@link GroupingExpression}. It evaluates to a long that equals the result * of and'ing the results of all arguments together in the order they were given to the constructor. * * @author Simon Thoresen Hult - * @author bratseth */ public class AndFunction extends FunctionNode { @@ -21,18 +19,11 @@ public class AndFunction extends FunctionNode { * @param argN The optional arguments, must evaluate to a long. */ public AndFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private AndFunction(String label, Integer level, List<GroupingExpression> args) { - super("and", label, level, args); - } - - @Override - public AndFunction copy() { - return new AndFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private AndFunction(List<GroupingExpression> args) { + super("and", args); } /** @@ -46,6 +37,6 @@ public class AndFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new AndFunction(null, null, args); + return new AndFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/ArrayAtLookup.java b/container-search/src/main/java/com/yahoo/search/grouping/request/ArrayAtLookup.java index c8e0a6be3e8..ed69e8aaee7 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/ArrayAtLookup.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/ArrayAtLookup.java @@ -19,36 +19,34 @@ import com.google.common.annotations.Beta; public class ArrayAtLookup extends DocumentValue { private final String attributeName; - private final GroupingExpression indexArgument; + private final GroupingExpression arg2; /** * Constructs a new instance of this class. * - * @param attributeName the attribute name to assign to this. + * @param attributeName The attribute name to assign to this. */ public ArrayAtLookup(String attributeName, GroupingExpression indexArg) { - this(null, null, attributeName, indexArg); - } - - private ArrayAtLookup(String label, Integer level, String attributeName, GroupingExpression indexArgument) { - super("array.at(" + attributeName + ", " + indexArgument + ")", label, level); + super("array.at(" + attributeName + ", " + indexArg + ")"); this.attributeName = attributeName; - this.indexArgument = indexArgument; + this.arg2 = indexArg; } - @Override - public ArrayAtLookup copy() { - return new ArrayAtLookup(getLabel(), getLevelOrNull(), getAttributeName(), getIndexArgument().copy()); - } - - /** Returns the name of the attribute to retrieve from the input hit */ + /** + * Returns the name of the attribute to retrieve from the input hit. + * + * @return The attribute name. + */ public String getAttributeName() { return attributeName; } - /** Return the expression to evaluate before indexing */ + /** + * get the expression to evaluate before indexing + * @return grouping expression argument + */ public GroupingExpression getIndexArgument() { - return indexArgument; + return arg2; } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/AttributeFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/AttributeFunction.java index d609800cc1c..faf565647c7 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/AttributeFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/AttributeFunction.java @@ -6,7 +6,6 @@ package com.yahoo.search.grouping.request; * named attribute in the input {@link com.yahoo.search.result.Hit}. * * @author Simon Thoresen Hult - * @author bratseth */ public class AttributeFunction extends DocumentValue { @@ -18,17 +17,8 @@ public class AttributeFunction extends DocumentValue { * @param attributeName the attribute name to assign to this. */ public AttributeFunction(String attributeName) { - this(null, null, attributeName); - } - - private AttributeFunction(String label, Integer level, String attributeName) { - super("attribute(" + attributeName + ")", label, level); - this.name = attributeName; - } - - @Override - public AttributeFunction copy() { - return new AttributeFunction(getLabel(), getLevelOrNull(), getAttributeName()); + super("attribute(" + attributeName + ")"); + name = attributeName; } /** diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/AttributeValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/AttributeValue.java index 1afac32d488..d83888b3107 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/AttributeValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/AttributeValue.java @@ -6,7 +6,6 @@ package com.yahoo.search.grouping.request; * named attribute in the input {@link com.yahoo.search.result.Hit}. * * @author Simon Thoresen Hult - * @author bratseth */ public class AttributeValue extends DocumentValue { @@ -18,17 +17,8 @@ public class AttributeValue extends DocumentValue { * @param attributeName the attribute name to assign to this. */ public AttributeValue(String attributeName) { - this(null, null, attributeName); - } - - private AttributeValue(String label, Integer level, String attributeName) { - super(attributeName, label, level); - this.name = attributeName; - } - - @Override - public AttributeValue copy() { - return new AttributeValue(getLabel(), getLevelOrNull(), getAttributeName()); + super(attributeName); + name = attributeName; } /** diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/AvgAggregator.java b/container-search/src/main/java/com/yahoo/search/grouping/request/AvgAggregator.java index bf11da5d2b9..d7e3232ea5f 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/AvgAggregator.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/AvgAggregator.java @@ -6,26 +6,15 @@ package com.yahoo.search.grouping.request; * the contained expression evaluated to over all the inputs. * * @author Simon Thoresen Hult - * @author bratseth */ public class AvgAggregator extends AggregatorNode { /** * Constructs a new instance of this class. * - * @param expression the expression to aggregate on. + * @param exp The expression to aggregate on. */ - public AvgAggregator(GroupingExpression expression) { - this(null, null, expression); + public AvgAggregator(GroupingExpression exp) { + super("avg", exp); } - - private AvgAggregator(String label, Integer level, GroupingExpression expression) { - super("avg", label, level, expression); - } - - @Override - public AvgAggregator copy() { - return new AvgAggregator(getLabel(), getLevelOrNull(), getExpression().copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/AvgFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/AvgFunction.java index 775f6c48d66..55c4d355589 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/AvgFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/AvgFunction.java @@ -2,14 +2,12 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a min-function in a {@link GroupingExpression}. It evaluates to a number that equals the * average of the results of all arguments. * * @author Simon Thoresen Hult - * @author bratseth */ public class AvgFunction extends FunctionNode { @@ -21,18 +19,11 @@ public class AvgFunction extends FunctionNode { * @param argN The optional arguments, must evaluate to a number. */ public AvgFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private AvgFunction(String label, Integer level, List<GroupingExpression> args) { - super("avg", label, level, args); - } - - @Override - public AvgFunction copy() { - return new AvgFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private AvgFunction(List<GroupingExpression> args) { + super("avg", args); } /** @@ -46,6 +37,6 @@ public class AvgFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new AvgFunction(null, null, args); + return new AvgFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/BooleanValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/BooleanValue.java index 32ef3c16d2e..8b8903c9a8d 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/BooleanValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/BooleanValue.java @@ -4,8 +4,7 @@ package com.yahoo.search.grouping.request; /** * This class represents a constant {@link Boolean} value in a {@link GroupingExpression}. * - * @author Ulf Lilleengen - * @author bratseth + * @author <a href="mailto:lulf@yahoo-inc.com">Ulf Lilleengen</a> */ public class BooleanValue extends ConstantValue<Boolean> { @@ -15,16 +14,6 @@ public class BooleanValue extends ConstantValue<Boolean> { * @param value The immutable value to assign to this. */ public BooleanValue(Boolean value) { - super(null, null, value); + super(value); } - - private BooleanValue(String label, Integer level, Boolean value) { - super(label, level, value); - } - - @Override - public BooleanValue copy() { - return new BooleanValue(getLabel(), getLevelOrNull(), getValue()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/BucketValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/BucketValue.java index 392c6386eb7..c73b7199394 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/BucketValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/BucketValue.java @@ -14,8 +14,8 @@ public class BucketValue extends GroupingExpression implements Comparable<Bucket private final ConstantValue<?> to; private final ConstantValueComparator comparator = new ConstantValueComparator(); - protected BucketValue(String label, Integer level, ConstantValue<?> inclusiveFrom, ConstantValue<?> exclusiveTo) { - super("bucket[" + asImage(inclusiveFrom) + ", " + asImage(exclusiveTo) + ">", label, level); + protected BucketValue(ConstantValue<?> inclusiveFrom, ConstantValue<?> exclusiveTo) { + super("bucket[" + asImage(inclusiveFrom) + ", " + asImage(exclusiveTo) + ">"); if (comparator.compare(exclusiveTo, inclusiveFrom) < 0) { throw new IllegalArgumentException("Bucket to-value can not be less than from-value."); } @@ -23,11 +23,6 @@ public class BucketValue extends GroupingExpression implements Comparable<Bucket to = exclusiveTo; } - @Override - public BucketValue copy() { - return new BucketValue(getLabel(), getLevelOrNull(), getFrom().copy(), getTo().copy()); - } - /** * Returns the inclusive-from value of this bucket. * diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/CatFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/CatFunction.java index dddc3df0542..5e51c8e35a0 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/CatFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/CatFunction.java @@ -2,14 +2,12 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a cat-function in a {@link GroupingExpression}. It evaluates to a byte array that equals the * concatenation of the binary result of all arguments in the order they were given to the constructor. * * @author Simon Thoresen Hult - * @author bratseth */ public class CatFunction extends FunctionNode { @@ -21,18 +19,11 @@ public class CatFunction extends FunctionNode { * @param argN The optional arguments. */ public CatFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private CatFunction(String label, Integer level, List<GroupingExpression> args) { - super("cat", label, level, args); - } - - @Override - public CatFunction copy() { - return new CatFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private CatFunction(List<GroupingExpression> args) { + super("cat", args); } /** @@ -46,6 +37,6 @@ public class CatFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new CatFunction(null, null, args); + return new CatFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/ConstantValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/ConstantValue.java index 81712424829..ad8c1ef1cc9 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/ConstantValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/ConstantValue.java @@ -7,24 +7,23 @@ package com.yahoo.search.grouping.request; * data types are represented as subclasses of this. * * @author Simon Thoresen Hult - * @author bratseth */ @SuppressWarnings("rawtypes") public abstract class ConstantValue<T extends Comparable> extends GroupingExpression { private final T value; - protected ConstantValue(String label, Integer level, T value) { - super(asImage(value), label, level); + protected ConstantValue(T value) { + super(asImage(value)); this.value = value; } - @Override - public abstract ConstantValue copy(); - - /** Returns the constant value of this */ + /** + * Returns the constant value of this. + * + * @return The value. + */ public T getValue() { return value; } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/ConstantValueComparator.java b/container-search/src/main/java/com/yahoo/search/grouping/request/ConstantValueComparator.java index 61118e04784..543a1f495c6 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/ConstantValueComparator.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/ConstantValueComparator.java @@ -7,11 +7,10 @@ import java.util.Comparator; * This class compares two constant values, and takes into account that one of * the arguments may be the very special infinity value. * - * @author Ulf Lilleengen + * @author <a href="mailto:lulf@yahoo-inc.com">Ulf Lilleengen</a> */ @SuppressWarnings("rawtypes") public class ConstantValueComparator implements Comparator<ConstantValue> { - @SuppressWarnings("unchecked") @Override public int compare(ConstantValue lhs, ConstantValue rhs) { diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/CountAggregator.java b/container-search/src/main/java/com/yahoo/search/grouping/request/CountAggregator.java index b9d691500ad..19a6c939087 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/CountAggregator.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/CountAggregator.java @@ -6,22 +6,13 @@ package com.yahoo.search.grouping.request; * there are in the input. * * @author Simon Thoresen Hult - * @author bratseth */ public class CountAggregator extends AggregatorNode { - /** Constructs a new instance of this class. */ + /** + * Constructs a new instance of this class. + */ public CountAggregator() { - this(null, null); + super("count"); } - - private CountAggregator(String label, Integer level) { - super("count", label, level); - } - - @Override - public CountAggregator copy() { - return new CountAggregator(getLabel(), getLevelOrNull()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/DateFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/DateFunction.java index 0c2c4928a91..b3a4c451b6b 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/DateFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/DateFunction.java @@ -2,14 +2,12 @@ package com.yahoo.search.grouping.request; import java.util.Arrays; -import java.util.stream.Collectors; /** * This class represents a timestamp-formatter function in a {@link GroupingExpression}. It evaluates to a string on the * form "YYYY-MM-DD" of the result of the argument. * * @author Simon Thoresen Hult - * @author bratseth */ public class DateFunction extends FunctionNode { @@ -19,18 +17,6 @@ public class DateFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a long. */ public DateFunction(GroupingExpression exp) { - this(null, null, exp); + super("time.date", Arrays.asList(exp)); } - - private DateFunction(String label, Integer level, GroupingExpression exp) { - super("time.date", label, level, Arrays.asList(exp)); - } - - @Override - public DateFunction copy() { - return new DateFunction(getLabel(), - getLevelOrNull(), - getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/DayOfMonthFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/DayOfMonthFunction.java index 62c23804344..5d82a80352b 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/DayOfMonthFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/DayOfMonthFunction.java @@ -2,14 +2,12 @@ package com.yahoo.search.grouping.request; import java.util.Arrays; -import java.util.stream.Collectors; /** * This class represents a day-of-month timestamp-function in a {@link GroupingExpression}. It evaluates to a long that * equals the day of month (1-31) of the result of the argument. * * @author Simon Thoresen Hult - * @author bratseth */ public class DayOfMonthFunction extends FunctionNode { @@ -19,18 +17,6 @@ public class DayOfMonthFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a long. */ public DayOfMonthFunction(GroupingExpression exp) { - this(null, null, exp); + super("time.dayofmonth", Arrays.asList(exp)); } - - private DayOfMonthFunction(String label, Integer level, GroupingExpression exp) { - super("time.dayofmonth", label, level, Arrays.asList(exp)); - } - - @Override - public DayOfMonthFunction copy() { - return new DayOfMonthFunction(getLabel(), - getLevelOrNull(), - getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/DayOfWeekFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/DayOfWeekFunction.java index 6730db2e8d6..f2135427bf5 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/DayOfWeekFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/DayOfWeekFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * equals the day of week (0 - 6) of the result of the argument, Monday being 0. * * @author Simon Thoresen Hult - * @author bratseth */ public class DayOfWeekFunction extends FunctionNode { @@ -18,18 +17,6 @@ public class DayOfWeekFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a long. */ public DayOfWeekFunction(GroupingExpression exp) { - this(null, null, exp); + super("time.dayofweek", Arrays.asList(exp)); } - - private DayOfWeekFunction(String label, Integer level, GroupingExpression exp) { - super("time.dayofweek", label, level, Arrays.asList(exp)); - } - - @Override - public DayOfWeekFunction copy() { - return new DayOfWeekFunction(getLabel(), - getLevelOrNull(), - getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/DayOfYearFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/DayOfYearFunction.java index 9ff59c26fe5..15f158ef2f1 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/DayOfYearFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/DayOfYearFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * equals the day of year (0-365) of the result of the argument. * * @author Simon Thoresen Hult - * @author bratseth */ public class DayOfYearFunction extends FunctionNode { @@ -18,18 +17,6 @@ public class DayOfYearFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a long. */ public DayOfYearFunction(GroupingExpression exp) { - this(null, null, exp); + super("time.dayofyear", Arrays.asList(exp)); } - - private DayOfYearFunction(String label, Integer level, GroupingExpression exp) { - super("time.dayofyear", label, level, Arrays.asList(exp)); - } - - @Override - public DayOfYearFunction copy() { - return new DayOfYearFunction(getLabel(), - getLevelOrNull(), - getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/DebugWaitFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/DebugWaitFunction.java index 5cad8ea55ec..be0bb66f91f 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/DebugWaitFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/DebugWaitFunction.java @@ -2,14 +2,13 @@ package com.yahoo.search.grouping.request; import java.util.Arrays; -import java.util.stream.Collectors; /** * This class represents debug_wait function in a {@link GroupingExpression}. For each hit evaluated, * it waits for the time specified as the second argument. The third argument specifies if the wait * should be a busy-wait or not. The first argument is then evaluated. * - * @author Ulf Lilleengen + * @author <a href="mailto:lulf@yahoo-inc.com">Ulf Lilleengen</a> */ public class DebugWaitFunction extends FunctionNode { @@ -21,20 +20,7 @@ public class DebugWaitFunction extends FunctionNode { * @param arg3 The third compulsory argument, specifying busy wait or not. */ public DebugWaitFunction(GroupingExpression arg1, DoubleValue arg2, BooleanValue arg3) { - this(null, null, arg1, arg2, arg3); - } - - private DebugWaitFunction(String label, Integer level, GroupingExpression arg1, DoubleValue arg2, BooleanValue arg3) { - super("debugwait", label, level, Arrays.asList(arg1, arg2, arg3)); - } - - @Override - public DebugWaitFunction copy() { - return new DebugWaitFunction(getLabel(), - getLevelOrNull(), - getArg(0).copy(), - (DoubleValue)getArg(1).copy(), - (BooleanValue)getArg(2).copy()); + super("debugwait", Arrays.asList(arg1, arg2, arg3)); } /** diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/DivFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/DivFunction.java index f559d911ff4..f50dcde2d56 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/DivFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/DivFunction.java @@ -2,7 +2,6 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a div-function in a {@link GroupingExpression}. It evaluates to a number that equals the result @@ -10,7 +9,6 @@ import java.util.stream.Collectors; * second, result by third, ...). * * @author Simon Thoresen Hult - * @author bratseth */ public class DivFunction extends FunctionNode { @@ -22,18 +20,11 @@ public class DivFunction extends FunctionNode { * @param argN The optional arguments, must evaluate to a number. */ public DivFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private DivFunction(String label, Integer level, List<GroupingExpression> args) { - super("div", label, level, args); - } - - @Override - public DivFunction copy() { - return new DivFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private DivFunction(List<GroupingExpression> args) { + super("div", args); } /** @@ -47,6 +38,6 @@ public class DivFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new DivFunction(null, null, args); + return new DivFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/DocIdNsSpecificValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/DocIdNsSpecificValue.java index d9a9daa2db5..188e642e7d7 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/DocIdNsSpecificValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/DocIdNsSpecificValue.java @@ -6,7 +6,6 @@ package com.yahoo.search.grouping.request; * specific value of the document id of the input {@link com.yahoo.search.result.Hit}. * * @author Simon Thoresen Hult - * @author bratseth */ public class DocIdNsSpecificValue extends DocumentValue { @@ -14,16 +13,7 @@ public class DocIdNsSpecificValue extends DocumentValue { * Constructs a new instance of this class. */ public DocIdNsSpecificValue() { - this(null, null); - } - - private DocIdNsSpecificValue(String label, Integer level) { - super("docidnsspecific()", label, level); - } - - @Override - public DocIdNsSpecificValue copy() { - return new DocIdNsSpecificValue(getLabel(), getLevelOrNull()); + super("docidnsspecific()"); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/DocumentValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/DocumentValue.java index f8b18e4acd6..f8756b81163 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/DocumentValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/DocumentValue.java @@ -9,8 +9,8 @@ package com.yahoo.search.grouping.request; */ public abstract class DocumentValue extends GroupingExpression { - protected DocumentValue(String image, String label, Integer level) { - super(image, label, level); + protected DocumentValue(String image) { + super(image); } @Override diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/DoubleBucket.java b/container-search/src/main/java/com/yahoo/search/grouping/request/DoubleBucket.java index f0bcfead39a..d71ec8093fd 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/DoubleBucket.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/DoubleBucket.java @@ -26,7 +26,7 @@ public class DoubleBucket extends BucketValue { * @param to The to-value to assign to this. */ public DoubleBucket(double from, double to) { - super(null, null, new DoubleValue(from), new DoubleValue(to)); + super(new DoubleValue(from), new DoubleValue(to)); } /** @@ -36,16 +36,6 @@ public class DoubleBucket extends BucketValue { * @param to The to-value to assign to this. */ public DoubleBucket(ConstantValue<?> from, ConstantValue<?> to) { - super(null, null, from, to); + super(from, to); } - - private DoubleBucket(String label, Integer level, ConstantValue<?> from, ConstantValue<?> to) { - super(label, level, from, to); - } - - @Override - public DoubleBucket copy() { - return new DoubleBucket(getLabel(), getLevelOrNull(), getFrom().copy(), getTo().copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/DoublePredefined.java b/container-search/src/main/java/com/yahoo/search/grouping/request/DoublePredefined.java index 0409709f2a2..d43e8412623 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/DoublePredefined.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/DoublePredefined.java @@ -2,7 +2,6 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a predefined bucket-function in a {@link GroupingExpression} for expressions that evaluate to a @@ -20,22 +19,11 @@ public class DoublePredefined extends PredefinedFunction { * @param argN The optional buckets. */ public DoublePredefined(GroupingExpression exp, DoubleBucket arg1, DoubleBucket... argN) { - this(null, null, exp, asList(arg1, argN)); + this(exp, asList(arg1, argN)); } - private DoublePredefined(String label, Integer level, GroupingExpression exp, List<DoubleBucket> args) { - super(label, level, exp, args); - } - - @Override - public DoublePredefined copy() { - return new DoublePredefined(getLabel(), - getLevelOrNull(), - getArg(0), - args().stream().skip(1) - .map(DoubleBucket.class::cast) - .map(arg -> arg.copy()) - .collect(Collectors.toList())); + private DoublePredefined(GroupingExpression exp, List<DoubleBucket> args) { + super(exp, args); } @Override @@ -55,6 +43,6 @@ public class DoublePredefined extends PredefinedFunction { if (args.isEmpty()) { throw new IllegalArgumentException("Expected at least one bucket, got none."); } - return new DoublePredefined(null, null, exp, args); + return new DoublePredefined(exp, args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/DoubleValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/DoubleValue.java index 318cc680f2e..5dad65aaabf 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/DoubleValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/DoubleValue.java @@ -5,7 +5,6 @@ package com.yahoo.search.grouping.request; * This class represents a constant {@link Double} value in a {@link GroupingExpression}. * * @author Simon Thoresen Hult - * @author bratseth */ public class DoubleValue extends ConstantValue<Double> { @@ -15,16 +14,6 @@ public class DoubleValue extends ConstantValue<Double> { * @param value The immutable value to assign to this. */ public DoubleValue(double value) { - super(null, null, value); + super(value); } - - private DoubleValue(String label, Integer level, Double value) { - super(label, level, value); - } - - @Override - public DoubleValue copy() { - return new DoubleValue(getLabel(), getLevelOrNull(), getValue()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/EachOperation.java b/container-search/src/main/java/com/yahoo/search/grouping/request/EachOperation.java index 2d830fd214e..1a7074a2c6e 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/EachOperation.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/EachOperation.java @@ -1,16 +1,11 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.grouping.request; -import java.util.List; -import java.util.Map; -import java.util.Set; - /** * This is a grouping operation that processes each element of the input list separately, as opposed to {@link * AllOperation} which processes that list as a whole. * * @author Simon Thoresen Hult - * @author bratseth */ public class EachOperation extends GroupingOperation { @@ -18,44 +13,7 @@ public class EachOperation extends GroupingOperation { * Constructs a new instance of this class. */ public EachOperation() { - super("each", null); - } - - private EachOperation(GroupingOperation parentOfCopy, - String image, - String label, - List<GroupingExpression> orderBy, - List<GroupingExpression> outputs, - List<GroupingOperation> children, - Map<String, GroupingExpression> aliases, - Set<String> hints, - GroupingExpression groupBy, - String where, - boolean forceSinglePass, - double accuracy, - int precision, - int level, - int max) { - super(parentOfCopy, image, label, orderBy, outputs, children, aliases, hints, groupBy, where, forceSinglePass, accuracy, precision, level, max); - } - - @Override - public EachOperation copy(GroupingOperation parentOfCopy) { - return new EachOperation(parentOfCopy, - getImage(), - getLabel(), - getOrderBy(), - getOutputs(), - getChildren(), - getAliases(), - getHints(), - getGroupBy(), - getWhere(), - getForceSinglePass(), - getAccuracy(), - getPrecision(), - getLevel(), - getMax()); + super("each"); } @Override diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/ExpressionVisitor.java b/container-search/src/main/java/com/yahoo/search/grouping/request/ExpressionVisitor.java index 89d698694a8..a341bee2568 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/ExpressionVisitor.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/ExpressionVisitor.java @@ -13,8 +13,7 @@ public interface ExpressionVisitor { /** * This method is called for every {@link GroupingExpression} object in the targeted {@link GroupingOperation}. * - * @param exp the expression being visited. + * @param exp The expression being visited. */ - void visitExpression(GroupingExpression exp); - + public void visitExpression(GroupingExpression exp); } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/FixedWidthFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/FixedWidthFunction.java index 3b397634a11..f44394c6193 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/FixedWidthFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/FixedWidthFunction.java @@ -18,17 +18,7 @@ public class FixedWidthFunction extends FunctionNode { * @param width The width of each bucket. */ public FixedWidthFunction(GroupingExpression exp, Number width) { - this(null, null, exp, - width instanceof Double ? new DoubleValue(width.doubleValue()) : new LongValue(width.longValue())); - } - - private FixedWidthFunction(String label, Integer level, GroupingExpression exp, ConstantValue width) { - super("fixedwidth", label, level, Arrays.asList(exp, width)); - } - - @Override - public FixedWidthFunction copy() { - return new FixedWidthFunction(getLabel(), getLevelOrNull(), getArg(0).copy(), (ConstantValue)getArg(1).copy()); + super("fixedwidth", Arrays.asList(exp, width instanceof Double ? new DoubleValue(width.doubleValue()) : new LongValue(width.longValue()))); } /** diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/FunctionNode.java b/container-search/src/main/java/com/yahoo/search/grouping/request/FunctionNode.java index 9e09baf66ab..1a059d79b1a 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/FunctionNode.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/FunctionNode.java @@ -14,8 +14,8 @@ public abstract class FunctionNode extends GroupingExpression implements Iterabl private final List<GroupingExpression> args = new ArrayList<>(); - protected FunctionNode(String image, String label, Integer level, List<GroupingExpression> args) { - super(image + "(" + asString(args) + ")", label, level); + protected FunctionNode(String image, List<GroupingExpression> args) { + super(image + "(" + asString(args) + ")"); this.args.addAll(args); } @@ -39,10 +39,6 @@ public abstract class FunctionNode extends GroupingExpression implements Iterabl return args.get(i); } - /** Returns the arguments of this as a list which cannot be modified */ - // Note: If this is made public the returned list must be immutable - protected List<GroupingExpression> args() { return args; } - @Override public Iterator<GroupingExpression> iterator() { return Collections.unmodifiableList(args).iterator(); @@ -79,5 +75,4 @@ public abstract class FunctionNode extends GroupingExpression implements Iterabl ret.addAll(bar); return ret; } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingExpression.java b/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingExpression.java index ad97f5519ee..2f7691156e5 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingExpression.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingExpression.java @@ -15,14 +15,10 @@ public abstract class GroupingExpression extends GroupingNode { private Integer level = null; - protected GroupingExpression(String image, String label, Integer level) { - super(image, label); - this.level = level; + protected GroupingExpression(String image) { + super(image); } - /** Returns a deep copy of this */ - public abstract GroupingExpression copy(); - /** * Resolves the conceptual level of this expression. This level represents the type of data that is consumed by this * expression, where level 0 is a single hit, level 1 is a group, level 2 is a list of groups, and so forth. This @@ -43,8 +39,8 @@ public abstract class GroupingExpression extends GroupingNode { /** * Returns the conceptual level of this expression. * - * @return the level. - * @throws IllegalArgumentException thrown if the level of this expression has not been resolved. + * @return The level. + * @throws IllegalArgumentException Thrown if the level of this expression has not been resolved. * @see #resolveLevel(int) */ public int getLevel() { @@ -54,8 +50,6 @@ public abstract class GroupingExpression extends GroupingNode { return level; } - protected final Integer getLevelOrNull() { return level; } - /** * Recursively calls {@link ExpressionVisitor#visitExpression(GroupingExpression)} for this expression and all of * its argument expressions. diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingNode.java b/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingNode.java index bd5db3d1fdb..148b4243a4b 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingNode.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingNode.java @@ -10,11 +10,10 @@ package com.yahoo.search.grouping.request; public abstract class GroupingNode { private final String image; - private String label; + private String label = null; - protected GroupingNode(String image, String label) { + protected GroupingNode(String image) { this.image = image; - this.label = label; } /** @@ -26,8 +25,6 @@ public abstract class GroupingNode { return label; } - protected String getImage() { return image; } - /** * Assigns a label to this grouping expression. The label is applied to the results of this expression so that they * can be identified by the caller when processing the output. @@ -44,5 +41,4 @@ public abstract class GroupingNode { public String toString() { return image; } - } 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 93619913b4f..4c29ca7d98d 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 @@ -23,7 +23,7 @@ public abstract class GroupingOperation extends GroupingNode { private final List<GroupingExpression> orderBy = new ArrayList<>(); private final List<GroupingExpression> outputs = new ArrayList<>(); private final List<GroupingOperation> children = new ArrayList<>(); - private final Map<String, GroupingExpression> aliases = LazyMap.newHashMap(); + private final Map<String, GroupingExpression> alias = LazyMap.newHashMap(); private final Set<String> hints = LazySet.newHashSet(); private GroupingExpression groupBy = null; @@ -35,44 +35,10 @@ public abstract class GroupingOperation extends GroupingNode { private int level = -1; private int max = -1; - protected GroupingOperation(String image, String label) { - super(image, label); - } - - protected GroupingOperation(GroupingOperation parentOfCopy, - String image, - String label, - List<GroupingExpression> orderBy, - List<GroupingExpression> outputs, - List<GroupingOperation> children, - Map<String, GroupingExpression> aliases, - Set<String> hints, - GroupingExpression groupBy, - String where, - boolean forceSinglePass, - double accuracy, - int precision, - int level, - int max) { - super(image, label); - this.parent = parentOfCopy; - orderBy.forEach(item -> this.orderBy.add(item.copy())); - outputs.forEach(item -> this.outputs.add(item.copy())); - children.forEach(item -> this.children.add(item.copy(this))); - aliases.forEach((key, value) -> this.aliases.put(key, value.copy())); - this.hints.addAll(hints); - if (groupBy != null) this.groupBy = groupBy.copy(); - this.where = where; - this.forceSinglePass = forceSinglePass; - this.accuracy = accuracy; - this.precision = precision; - this.level = level; - this.max = max; + protected GroupingOperation(String image) { + super(image); } - /** Returns a deep copy of this */ - public abstract GroupingOperation copy(GroupingOperation parentOfCopy); - /** * Registers an alias with this operation. An alias is made available to expressions in both this node and all child * nodes. @@ -82,7 +48,7 @@ public abstract class GroupingOperation extends GroupingNode { * @return This, to allow chaining. */ public GroupingOperation putAlias(String id, GroupingExpression exp) { - aliases.put(id, exp); + alias.put(id, exp); return this; } @@ -94,8 +60,8 @@ public abstract class GroupingOperation extends GroupingNode { * @return The expression associated with the id. */ public GroupingExpression getAlias(String id) { - if (aliases.containsKey(id)) { - return aliases.get(id); + if (alias.containsKey(id)) { + return alias.get(id); } else if (parent != null) { return parent.getAlias(id); } else { @@ -103,11 +69,6 @@ public abstract class GroupingOperation extends GroupingNode { } } - /** Returns a direct, mutable copy of the aliases of this, never null */ - protected Map<String, GroupingExpression> getAliases() { - return aliases; - } - /** * Adds a hint to this. * @@ -264,9 +225,6 @@ public abstract class GroupingOperation extends GroupingNode { } } - /** Returns the parent of this, or null if none */ - protected GroupingOperation getParent() { return parent; } - public GroupingOperation setForceSinglePass(boolean forceSinglePass) { this.forceSinglePass = forceSinglePass; return this; @@ -488,7 +446,7 @@ public abstract class GroupingOperation extends GroupingNode { * @param visitor The visitor to call. */ public void visitExpressions(ExpressionVisitor visitor) { - for (GroupingExpression exp : aliases.values()) { + for (GroupingExpression exp : alias.values()) { exp.visit(visitor); } for (GroupingExpression exp : outputs) { diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/HourOfDayFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/HourOfDayFunction.java index 7adebcbfbdb..faf1c1e0289 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/HourOfDayFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/HourOfDayFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * equals the hour of day (0-23) of the result of the argument. * * @author Simon Thoresen Hult - * @author bratseth */ public class HourOfDayFunction extends FunctionNode { @@ -18,16 +17,6 @@ public class HourOfDayFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a long. */ public HourOfDayFunction(GroupingExpression exp) { - this(null, null, exp); + super("time.hourofday", Arrays.asList(exp)); } - - private HourOfDayFunction(String label, Integer level, GroupingExpression exp) { - super("time.hourofday", label, level, Arrays.asList(exp)); - } - - @Override - public HourOfDayFunction copy() { - return new HourOfDayFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/Infinite.java b/container-search/src/main/java/com/yahoo/search/grouping/request/Infinite.java index 766571914cc..53f5d3256ed 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/Infinite.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/Infinite.java @@ -3,13 +3,12 @@ package com.yahoo.search.grouping.request; /** * This class represents an Infinite value that may be used as a bucket - * size specifier. This is immutable. + * size specifier. * - * @author Ulf Lilleengen + * @author <a href="mailto:lulf@yahoo-inc.com">Ulf Lilleengen</a> */ @SuppressWarnings("rawtypes") public class Infinite implements Comparable { - private final boolean negative; /** diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/InfiniteValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/InfiniteValue.java index dac6259595d..7c2730992df 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/InfiniteValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/InfiniteValue.java @@ -4,8 +4,7 @@ package com.yahoo.search.grouping.request; /** * This class represents an infinite value in a {@link GroupingExpression}. * - * @author Ulf Lilleengen - * @author bratseth + * @author <a href="mailto:lulf@yahoo-inc.com">Ulf Lilleengen</a> */ public class InfiniteValue extends ConstantValue<Infinite> { @@ -15,16 +14,6 @@ public class InfiniteValue extends ConstantValue<Infinite> { * @param value The immutable value to assign to this. */ public InfiniteValue(Infinite value) { - super(null, null, value); + super(value); } - - private InfiniteValue(String label, Integer level, Infinite value) { - super(label, level, value); - } - - @Override - public InfiniteValue copy() { - return new InfiniteValue(getLabel(), getLevelOrNull(), getValue()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/InterpolatedLookup.java b/container-search/src/main/java/com/yahoo/search/grouping/request/InterpolatedLookup.java index 279434f1df2..dc8b6d68dc3 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/InterpolatedLookup.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/InterpolatedLookup.java @@ -18,37 +18,34 @@ import com.google.common.annotations.Beta; public class InterpolatedLookup extends DocumentValue { private final String attributeName; - private final GroupingExpression lookupArgument; + private final GroupingExpression arg2; /** * Constructs a new instance of this class. * - * @param attributeName the attribute name to assign to this. - * @param lookupArgument Expression giving a floating-point value for the lookup argument + * @param attributeName The attribute name the lookup should happen in + * @param lookupArg Expression giving a floating-point value for the lookup argument */ - public InterpolatedLookup(String attributeName, GroupingExpression lookupArgument) { - this(null, null, attributeName, lookupArgument); - } - - private InterpolatedLookup(String label, Integer level, String attributeName, GroupingExpression lookupArgument) { - super("interpolatedlookup(" + attributeName + ", " + lookupArgument + ")", label, level); + public InterpolatedLookup(String attributeName, GroupingExpression lookupArg) { + super("interpolatedlookup(" + attributeName + ", " + lookupArg + ")"); this.attributeName = attributeName; - this.lookupArgument = lookupArgument; - } - - @Override - public InterpolatedLookup copy() { - return new InterpolatedLookup(getLabel(), getLevelOrNull(), getAttributeName(), getLookupArgument().copy()); + this.arg2 = lookupArg; } - /** Returns the name of the attribute to retrieve from the input hit */ + /** + * Get the name of the attribute to be retrieved from the input hit. + * @return The attribute name. + */ public String getAttributeName() { return attributeName; } - /** Return the expression to evaluate before lookup */ + /** + * Get the expression that will be evaluated before lookup. + * @return grouping expression argument + */ public GroupingExpression getLookupArgument() { - return lookupArgument; + return arg2; } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/LongBucket.java b/container-search/src/main/java/com/yahoo/search/grouping/request/LongBucket.java index a0fdf8f9526..fd363320033 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/LongBucket.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/LongBucket.java @@ -12,7 +12,7 @@ public class LongBucket extends BucketValue { * Gives the next distinct long value. * * @param value the base value. - * @return the next value. + * @return the nextt value. */ public static LongValue nextValue(LongValue value) { long v = value.getValue(); @@ -26,7 +26,7 @@ public class LongBucket extends BucketValue { * @param to The to-value to assign to this. */ public LongBucket(long from, long to) { - super(null, null, new LongValue(from), new LongValue(to)); + super(new LongValue(from), new LongValue(to)); } /** @@ -37,16 +37,6 @@ public class LongBucket extends BucketValue { */ @SuppressWarnings("rawtypes") public LongBucket(ConstantValue from, ConstantValue to) { - super(null, null, from, to); + super(from, to); } - - private LongBucket(String label, Integer level, ConstantValue<?> from, ConstantValue<?> to) { - super(label, level, from, to); - } - - @Override - public LongBucket copy() { - return new LongBucket(getLabel(), getLevelOrNull(), getFrom().copy(), getTo().copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/LongPredefined.java b/container-search/src/main/java/com/yahoo/search/grouping/request/LongPredefined.java index fe428d26db7..98acc800ed7 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/LongPredefined.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/LongPredefined.java @@ -2,14 +2,12 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a predefined bucket-function in a {@link GroupingExpression} for expressions that evaluate to a * long. * * @author Simon Thoresen Hult - * @author bratseth */ public class LongPredefined extends PredefinedFunction { @@ -21,23 +19,11 @@ public class LongPredefined extends PredefinedFunction { * @param argN The optional buckets. */ public LongPredefined(GroupingExpression exp, LongBucket arg1, LongBucket... argN) { - this(null, null, exp, asList(arg1, argN)); + this(exp, asList(arg1, argN)); } - private LongPredefined(String label, Integer level, GroupingExpression exp, List<LongBucket> args) { - super(label, level, exp, args); - } - - @Override - public LongPredefined copy() { - return new LongPredefined(getLabel(), - getLevelOrNull(), - getArg(0), - args().stream() - .skip(1) - .map(LongBucket.class::cast) - .map(arg -> arg.copy()) - .collect(Collectors.toList())); + private LongPredefined(GroupingExpression exp, List<LongBucket> args) { + super(exp, args); } @Override @@ -57,6 +43,6 @@ public class LongPredefined extends PredefinedFunction { if (args.isEmpty()) { throw new IllegalArgumentException("Expected at least one bucket, got none."); } - return new LongPredefined(null, null, exp, args); + return new LongPredefined(exp, args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/LongValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/LongValue.java index 705036af78e..4c4eb1c409d 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/LongValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/LongValue.java @@ -5,7 +5,6 @@ package com.yahoo.search.grouping.request; * This class represents a constant {@link Long} value in a {@link GroupingExpression}. * * @author Simon Thoresen Hult - * @author bratseth */ public class LongValue extends ConstantValue<Long> { @@ -15,16 +14,7 @@ public class LongValue extends ConstantValue<Long> { * @param value the immutable value to assign to this. */ public LongValue(long value) { - super(null, null, value); - } - - private LongValue(String label, Integer level, Long value) { - super(label, level, value); - } - - @Override - public LongValue copy() { - return new LongValue(getLabel(), getLevelOrNull(), getValue()); + super(value); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathACosFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathACosFunction.java index 24ba449e517..58d7275e8eb 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathACosFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathACosFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathACosFunction extends FunctionNode { - /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathACosFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathACosFunction(String label, Integer level, GroupingExpression exp) { - super("math.acos", label, level, Arrays.asList(exp)); + super("math.acos", Arrays.asList(exp)); } - - @Override - public MathACosFunction copy() { - return new MathACosFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathACosHFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathACosHFunction.java index 40de58ba0be..eca8fd7ebf7 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathACosHFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathACosHFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathACosHFunction extends FunctionNode { - - /** +/** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathACosHFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathACosHFunction(String label, Integer level, GroupingExpression exp) { - super("math.acosh", label, level, Arrays.asList(exp)); + super("math.acosh", Arrays.asList(exp)); } - - @Override - public MathACosHFunction copy() { - return new MathACosHFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathASinFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathASinFunction.java index 48a2641b660..1189bccd5bc 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathASinFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathASinFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathASinFunction extends FunctionNode { - /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathASinFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathASinFunction(String label, Integer level, GroupingExpression exp) { - super("math.asin", label, level, Arrays.asList(exp)); + super("math.asin", Arrays.asList(exp)); } - - @Override - public MathASinFunction copy() { - return new MathASinFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathASinHFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathASinHFunction.java index 687bf1c6c34..7619ab4f1b3 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathASinHFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathASinHFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathASinHFunction extends FunctionNode { - - /** +/** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathASinHFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathASinHFunction(String label, Integer level, GroupingExpression exp) { - super("math.asinh", label, level, Arrays.asList(exp)); + super("math.asinh", Arrays.asList(exp)); } - - @Override - public MathASinHFunction copy() { - return new MathASinHFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathATanFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathATanFunction.java index 6612c9cc70f..114fd24644b 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathATanFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathATanFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathATanFunction extends FunctionNode { - /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathATanFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathATanFunction(String label, Integer level, GroupingExpression exp) { - super("math.atan", label, level, Arrays.asList(exp)); + super("math.atan", Arrays.asList(exp)); } - - @Override - public MathATanFunction copy() { - return new MathATanFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathATanHFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathATanHFunction.java index fa9844ec17b..08f7956e855 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathATanHFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathATanHFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathATanHFunction extends FunctionNode { - - /** +/** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathATanHFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathATanHFunction(String label, Integer level, GroupingExpression exp) { - super("math.atanh", label, level, Arrays.asList(exp)); + super("math.atanh", Arrays.asList(exp)); } - - @Override - public MathATanHFunction copy() { - return new MathATanHFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathCbrtFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathCbrtFunction.java index 04595003a03..6978e89ba71 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathCbrtFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathCbrtFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathCbrtFunction extends FunctionNode { - - /** +/** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathCbrtFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathCbrtFunction(String label, Integer level, GroupingExpression exp) { - super("math.cbrt", label, level, Arrays.asList(exp)); + super("math.cbrt", Arrays.asList(exp)); } - - @Override - public MathCbrtFunction copy() { - return new MathCbrtFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathCosFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathCosFunction.java index 95140ce06d0..846660c2370 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathCosFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathCosFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathCosFunction extends FunctionNode { - /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathCosFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathCosFunction(String label, Integer level, GroupingExpression exp) { - super("math.cos", label, level, Arrays.asList(exp)); + super("math.cos", Arrays.asList(exp)); } - - @Override - public MathCosFunction copy() { - return new MathCosFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathCosHFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathCosHFunction.java index f0384666ffe..d370678d3f5 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathCosHFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathCosHFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathCosHFunction extends FunctionNode { - - /** +/** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathCosHFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathCosHFunction(String label, Integer level, GroupingExpression exp) { - super("math.cosh", label, level, Arrays.asList(exp)); + super("math.cosh", Arrays.asList(exp)); } - - @Override - public MathCosHFunction copy() { - return new MathCosHFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathExpFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathExpFunction.java index ef2a53d90b0..812fd98faa9 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathExpFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathExpFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathExpFunction extends FunctionNode { - /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathExpFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathExpFunction(String label, Integer level, GroupingExpression exp) { - super("math.exp", label, level, Arrays.asList(exp)); + super("math.exp", Arrays.asList(exp)); } - - @Override - public MathExpFunction copy() { - return new MathExpFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathFloorFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathFloorFunction.java index 64dd931f9e4..31e5e99d974 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathFloorFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathFloorFunction.java @@ -3,30 +3,14 @@ package com.yahoo.search.grouping.request; import java.util.Arrays; -/** - * Represents the math.floor(expression) function - * - * @author baldersheim - * @author bratseth - */ +/** represents the math.floor(expression) function */ public class MathFloorFunction extends FunctionNode { - /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathFloorFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathFloorFunction(String label, Integer level, GroupingExpression exp) { - super("math.floor", label, level, Arrays.asList(exp)); + super("math.floor", Arrays.asList(exp)); } - - @Override - public MathFloorFunction copy() { - return new MathFloorFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathFunctions.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathFunctions.java index 5fc806a90fe..6e3e52c9563 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathFunctions.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathFunctions.java @@ -5,7 +5,6 @@ package com.yahoo.search.grouping.request; * @author baldersheim */ public abstract class MathFunctions { - /** * Defines the different types of math functions that are available. */ diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathHypotFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathHypotFunction.java index d6062124619..596c7501af6 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathHypotFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathHypotFunction.java @@ -5,10 +5,8 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathHypotFunction extends FunctionNode { - /** * Constructs a new instance of this class. * @@ -16,16 +14,6 @@ public class MathHypotFunction extends FunctionNode { * @param y The expression to evaluate for y exponent, double value will be requested. */ public MathHypotFunction(GroupingExpression x, GroupingExpression y) { - this(null, null, x, y); - } - - private MathHypotFunction(String label, Integer level, GroupingExpression x, GroupingExpression y) { - super("math.hypot", label, level, Arrays.asList(x, y)); + super("math.hypot", Arrays.asList(x, y)); } - - @Override - public MathHypotFunction copy() { - return new MathHypotFunction(getLabel(), getLevelOrNull(), getArg(0).copy(), getArg(1).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathLog10Function.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathLog10Function.java index b64e5d03a97..6a19de43f1c 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathLog10Function.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathLog10Function.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathLog10Function extends FunctionNode { - /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathLog10Function(GroupingExpression exp) { - this(null, null, exp); - } - - private MathLog10Function(String label, Integer level, GroupingExpression exp) { - super("math.log10", label, level, Arrays.asList(exp)); + super("math.log10", Arrays.asList(exp)); } - - @Override - public MathLog10Function copy() { - return new MathLog10Function(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathLog1pFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathLog1pFunction.java index 7df97e6b0d5..06fc2424f41 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathLog1pFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathLog1pFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathLog1pFunction extends FunctionNode { - /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathLog1pFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathLog1pFunction(String label, Integer level, GroupingExpression exp) { - super("math.log1p", label, level, Arrays.asList(exp)); + super("math.log1p", Arrays.asList(exp)); } - - @Override - public MathLog1pFunction copy() { - return new MathLog1pFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathLogFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathLogFunction.java index 323a03ad152..0b71ad66bd9 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathLogFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathLogFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathLogFunction extends FunctionNode { - - /** + /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathLogFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathLogFunction(String label, Integer level, GroupingExpression exp) { - super("math.log", label, level, Arrays.asList(exp)); + super("math.log", Arrays.asList(exp)); } - - @Override - public MathLogFunction copy() { - return new MathLogFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathPowFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathPowFunction.java index 084fdc82646..ab0d6ba2139 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathPowFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathPowFunction.java @@ -5,10 +5,8 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathPowFunction extends FunctionNode { - /** * Constructs a new instance of this class. * @@ -16,19 +14,6 @@ public class MathPowFunction extends FunctionNode { * @param y The expression to evaluate for the exponent, double value will be requested. */ public MathPowFunction(GroupingExpression x, GroupingExpression y) { - this(null, null, x, y); - } - - private MathPowFunction(String label, Integer level, GroupingExpression x, GroupingExpression y) { - super("math.pow", label, level, Arrays.asList(x, y)); + super("math.pow", Arrays.asList(x,y)); } - - @Override - public MathPowFunction copy() { - return new MathPowFunction(getLabel(), - getLevelOrNull(), - getArg(0).copy(), - getArg(1).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathSinFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathSinFunction.java index ea9a0d97887..dd914807e7a 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathSinFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathSinFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathSinFunction extends FunctionNode { - /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathSinFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathSinFunction(String label, Integer level, GroupingExpression exp) { - super("math.sin", label, level, Arrays.asList(exp)); + super("math.sin", Arrays.asList(exp)); } - - @Override - public MathSinFunction copy() { - return new MathSinFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathSinHFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathSinHFunction.java index 3a02de24e6a..b600d947489 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathSinHFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathSinHFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathSinHFunction extends FunctionNode { - - /** +/** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathSinHFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathSinHFunction(String label, Integer level, GroupingExpression exp) { - super("math.sinh", label, level, Arrays.asList(exp)); + super("math.sinh", Arrays.asList(exp)); } - - @Override - public MathSinHFunction copy() { - return new MathSinHFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathSqrtFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathSqrtFunction.java index ee66b71e070..e6a0c04e7ee 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathSqrtFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathSqrtFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathSqrtFunction extends FunctionNode { - /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathSqrtFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathSqrtFunction(String label, Integer level, GroupingExpression exp) { - super("math.sqrt", label, level, Arrays.asList(exp)); + super("math.sqrt", Arrays.asList(exp)); } - - @Override - public MathSqrtFunction copy() { - return new MathSqrtFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathTanFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathTanFunction.java index 003ef9c6a00..f66492f87ad 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathTanFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathTanFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathTanFunction extends FunctionNode { - /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathTanFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathTanFunction(String label, Integer level, GroupingExpression exp) { - super("math.tan", label, level, Arrays.asList(exp)); + super("math.tan", Arrays.asList(exp)); } - - @Override - public MathTanFunction copy() { - return new MathTanFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathTanHFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathTanHFunction.java index 86ccbbdfcf9..93e7c1c1d49 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathTanHFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathTanHFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class MathTanHFunction extends FunctionNode { - - /** +/** * Constructs a new instance of this class. * * @param exp The expression to evaluate, double value will be requested. */ public MathTanHFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private MathTanHFunction(String label, Integer level, GroupingExpression exp) { - super("math.tanh", label, level, Arrays.asList(exp)); + super("math.tanh", Arrays.asList(exp)); } - - @Override - public MathTanHFunction copy() { - return new MathTanHFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MaxAggregator.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MaxAggregator.java index 513cba8fb19..54dc7c6b3bd 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MaxAggregator.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MaxAggregator.java @@ -6,26 +6,15 @@ package com.yahoo.search.grouping.request; * the contained expression evaluated to over all the inputs. * * @author Simon Thoresen Hult - * @author bratseth */ public class MaxAggregator extends AggregatorNode { /** * Constructs a new instance of this class. * - * @param expression the expression to aggregate on. + * @param exp The expression to aggregate on. */ - public MaxAggregator(GroupingExpression expression) { - this(null, null, expression); + public MaxAggregator(GroupingExpression exp) { + super("max", exp); } - - private MaxAggregator(String label, Integer level, GroupingExpression expression) { - super("max", label, level, expression); - } - - @Override - public MaxAggregator copy() { - return new MaxAggregator(getLabel(), getLevelOrNull(), getExpression().copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MaxFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MaxFunction.java index bff8cb481b8..731c1c4eba4 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MaxFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MaxFunction.java @@ -2,7 +2,6 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a max-function in a {@link GroupingExpression}. It evaluates to a number that equals the @@ -20,18 +19,11 @@ public class MaxFunction extends FunctionNode { * @param argN The optional arguments, must evaluate to a number. */ public MaxFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private MaxFunction(String label, Integer level, List<GroupingExpression> args) { - super("max", label, level, args); - } - - @Override - public MaxFunction copy() { - return new MaxFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private MaxFunction(List<GroupingExpression> args) { + super("max", args); } /** @@ -45,7 +37,7 @@ public class MaxFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new MaxFunction(null, null, args); + return new MaxFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/Md5Function.java b/container-search/src/main/java/com/yahoo/search/grouping/request/Md5Function.java index 1426d141ef7..6ae33b804e9 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/Md5Function.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/Md5Function.java @@ -18,16 +18,7 @@ public class Md5Function extends FunctionNode { * @param numBits The number of bits of the md5 to include. */ public Md5Function(GroupingExpression exp, int numBits) { - this(null, null, exp, new LongValue(numBits)); - } - - private Md5Function(String label, Integer level, GroupingExpression exp, LongValue numBits) { - super("md5", label, level, Arrays.asList(exp, numBits)); - } - - @Override - public Md5Function copy() { - return new Md5Function(getLabel(), getLevelOrNull(), getArg(0).copy(), (LongValue)getArg(1).copy()); + super("md5", Arrays.asList(exp, new LongValue(numBits))); } /** diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MinAggregator.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MinAggregator.java index 07164ba4053..1a24527dcfc 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MinAggregator.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MinAggregator.java @@ -6,26 +6,15 @@ package com.yahoo.search.grouping.request; * the contained expression evaluated to over all the inputs. * * @author Simon Thoresen Hult - * @author bratseth */ public class MinAggregator extends AggregatorNode { /** * Constructs a new instance of this class. * - * @param expression the expression to aggregate on. + * @param exp The expression to aggregate on. */ - public MinAggregator(GroupingExpression expression) { - this(null, null, expression); + public MinAggregator(GroupingExpression exp) { + super("min", exp); } - - private MinAggregator(String label, Integer level, GroupingExpression expression) { - super("min", label, level, expression); - } - - @Override - public MinAggregator copy() { - return new MinAggregator(getLabel(), getLevelOrNull(), getExpression().copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MinFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MinFunction.java index 40fbda5a98a..478684dd73e 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MinFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MinFunction.java @@ -1,9 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.grouping.request; -import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a min-function in a {@link GroupingExpression}. It evaluates to a number that equals the @@ -21,18 +19,11 @@ public class MinFunction extends FunctionNode { * @param argN The optional arguments, must evaluate to a number. */ public MinFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private MinFunction(String label, Integer level, List<GroupingExpression> args) { - super("min", label, level, args); - } - - @Override - public MinFunction copy() { - return new MinFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private MinFunction(List<GroupingExpression> args) { + super("min", args); } /** @@ -46,7 +37,7 @@ public class MinFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new MinFunction(null, null, args); + return new MinFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MinuteOfHourFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MinuteOfHourFunction.java index 97dfb5b0d37..d2442b8455e 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MinuteOfHourFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MinuteOfHourFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * that equals the minute of hour (0-59) of the result of the argument. * * @author Simon Thoresen Hult - * @author bratseth */ public class MinuteOfHourFunction extends FunctionNode { @@ -18,16 +17,6 @@ public class MinuteOfHourFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a long. */ public MinuteOfHourFunction(GroupingExpression exp) { - this(null, null, exp); + super("time.minuteofhour", Arrays.asList(exp)); } - - private MinuteOfHourFunction(String label, Integer level, GroupingExpression exp) { - super("time.minuteofhour", label, level, Arrays.asList(exp)); - } - - @Override - public MinuteOfHourFunction copy() { - return new MinuteOfHourFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/ModFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/ModFunction.java index 33b5c7bf655..a3fd1041e6e 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/ModFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/ModFunction.java @@ -2,7 +2,6 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a mod-function in a {@link GroupingExpression}. It evaluates to a number that equals the result @@ -21,18 +20,11 @@ public class ModFunction extends FunctionNode { * @param argN The optional arguments, must evaluate to a number. */ public ModFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private ModFunction(String label, Integer level, List<GroupingExpression> args) { - super("mod", label, level, args); - } - - @Override - public ModFunction copy() { - return new ModFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private ModFunction(List<GroupingExpression> args) { + super("mod", args); } /** @@ -46,6 +38,6 @@ public class ModFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new ModFunction(null, null, args); + return new ModFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MonthOfYearFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MonthOfYearFunction.java index c6df8dbd408..96e08562e42 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MonthOfYearFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MonthOfYearFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * equals the month of year (1-12) of the result of the argument. * * @author Simon Thoresen Hult - * @author bratseth */ public class MonthOfYearFunction extends FunctionNode { @@ -18,16 +17,6 @@ public class MonthOfYearFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a long. */ public MonthOfYearFunction(GroupingExpression exp) { - this(null, null, exp); + super("time.monthofyear", Arrays.asList(exp)); } - - private MonthOfYearFunction(String label, Integer level, GroupingExpression exp) { - super("time.monthofyear", label, level, Arrays.asList(exp)); - } - - @Override - public MonthOfYearFunction copy() { - return new MonthOfYearFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MulFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MulFunction.java index 7af8d22955e..84584270f58 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/MulFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MulFunction.java @@ -2,7 +2,6 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a mul-function in a {@link GroupingExpression}. It evaluates to a number that equals the result @@ -20,18 +19,11 @@ public class MulFunction extends FunctionNode { * @param argN The optional arguments, must evaluate to a number. */ public MulFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private MulFunction(String label, Integer level, List<GroupingExpression> args) { - super("mul", label, level, args); - } - - @Override - public MulFunction copy() { - return new MulFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private MulFunction(List<GroupingExpression> args) { + super("mul", args); } /** @@ -45,6 +37,6 @@ public class MulFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new MulFunction(null, null, args); + return new MulFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/NegFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/NegFunction.java index ad3b892970c..7e05b02b59e 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/NegFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/NegFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * negative of the results of the argument. * * @author Simon Thoresen Hult - * @author bratseth */ public class NegFunction extends FunctionNode { @@ -18,17 +17,7 @@ public class NegFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a number. */ public NegFunction(GroupingExpression exp) { - this(null, null, exp); + super("neg", Arrays.asList(exp)); } - - private NegFunction(String label, Integer level, GroupingExpression exp) { - super("neg", label, level, Arrays.asList(exp)); - } - - @Override - public NegFunction copy() { - return new NegFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/NormalizeSubjectFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/NormalizeSubjectFunction.java index 8bf0a03141a..54a0062e2c9 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/NormalizeSubjectFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/NormalizeSubjectFunction.java @@ -13,17 +13,7 @@ public class NormalizeSubjectFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a string. */ public NormalizeSubjectFunction(GroupingExpression exp) { - this(null, null, exp); + super("normalizesubject", Arrays.asList(exp)); } - - private NormalizeSubjectFunction(String label, Integer level, GroupingExpression exp) { - super("normalizesubject", label, level, Arrays.asList(exp)); - } - - @Override - public NormalizeSubjectFunction copy() { - return new NormalizeSubjectFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/NowFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/NowFunction.java index 75715bad37b..24dd888e98d 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/NowFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/NowFunction.java @@ -1,7 +1,6 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.grouping.request; -import java.util.Arrays; import java.util.Collections; /** @@ -9,7 +8,6 @@ import java.util.Collections; * of seconds since midnight, January 1, 1970 UTC. * * @author Simon Thoresen Hult - * @author bratseth */ public class NowFunction extends FunctionNode { @@ -17,17 +15,7 @@ public class NowFunction extends FunctionNode { * Constructs a new instance of this class. */ public NowFunction() { - this(null, null); + super("now", Collections.<GroupingExpression>emptyList()); } - - private NowFunction(String label, Integer level) { - super("now", label, level, Collections.emptyList()); - } - - @Override - public NowFunction copy() { - return new NowFunction(getLabel(), getLevelOrNull()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/OrFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/OrFunction.java index 43456a4f281..ad1809f312f 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/OrFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/OrFunction.java @@ -2,14 +2,12 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents an or-function in a {@link GroupingExpression}. It evaluates to a long that equals the result * of or'ing the results of all arguments together in the order they were given to the constructor. * * @author Simon Thoresen Hult - * @author bratseth */ public class OrFunction extends FunctionNode { @@ -21,18 +19,11 @@ public class OrFunction extends FunctionNode { * @param argN The optional arguments, must evaluate to a long. */ public OrFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private OrFunction(String label, Integer level, List<GroupingExpression> args) { - super("or", label, level, args); - } - - @Override - public OrFunction copy() { - return new OrFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private OrFunction(List<GroupingExpression> args) { + super("or", args); } /** @@ -46,7 +37,7 @@ public class OrFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new OrFunction(null, null, args); + return new OrFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/PredefinedFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/PredefinedFunction.java index 5818c5034b6..ebae4b238b4 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/PredefinedFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/PredefinedFunction.java @@ -4,7 +4,6 @@ package com.yahoo.search.grouping.request; import java.util.Iterator; import java.util.LinkedList; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a predefined bucket-function in a {@link GroupingExpression}. It maps the input into one of the @@ -14,8 +13,8 @@ import java.util.stream.Collectors; */ public abstract class PredefinedFunction extends FunctionNode { - protected PredefinedFunction(String label, Integer level, GroupingExpression exp, List<? extends BucketValue> args) { - super("predefined", label, level, asList(exp, args)); + protected PredefinedFunction(GroupingExpression exp, List<? extends BucketValue> args) { + super("predefined", asList(exp, args)); Iterator<? extends BucketValue> it = args.iterator(); BucketValue prev = it.next(); while (it.hasNext()) { @@ -48,12 +47,12 @@ public abstract class PredefinedFunction extends FunctionNode { return (BucketValue)getArg(i + 1); } - private static List<GroupingExpression> asList(GroupingExpression exp, List<? extends BucketValue> args) { + private static + List<GroupingExpression> asList(GroupingExpression exp, List<? extends BucketValue> args) { List<GroupingExpression> ret = new LinkedList<>(); ret.add(exp); ret.addAll(args); return ret; } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/RawBucket.java b/container-search/src/main/java/com/yahoo/search/grouping/request/RawBucket.java index 415dbe2adff..32be9233445 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/RawBucket.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/RawBucket.java @@ -4,7 +4,7 @@ package com.yahoo.search.grouping.request; /** * This class represents a {@link RawValue} bucket in a {@link PredefinedFunction}. * - * @author Ulf Lilleengen + * @author <a href="mailto:lulf@yahoo-inc.com">Ulf Lilleengen</a> */ public class RawBucket extends BucketValue { @@ -25,7 +25,7 @@ public class RawBucket extends BucketValue { * @param to The to-value to assign to this. */ public RawBucket(RawBuffer from, RawBuffer to) { - super(null, null, new RawValue(from), new RawValue(to)); + super(new RawValue(from), new RawValue(to)); } /** @@ -35,16 +35,6 @@ public class RawBucket extends BucketValue { * @param to The to-value to assign to this. */ public RawBucket(ConstantValue<?> from, ConstantValue<?> to) { - super(null, null, from, to); + super(from, to); } - - private RawBucket(String label, Integer level, ConstantValue<?> from, ConstantValue<?> to) { - super(label, level, from, to); - } - - @Override - public RawBucket copy() { - return new RawBucket(getLabel(), getLevelOrNull(), getFrom().copy(), getTo().copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/RawBuffer.java b/container-search/src/main/java/com/yahoo/search/grouping/request/RawBuffer.java index 9b18d7b374c..460c547f1d6 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/RawBuffer.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/RawBuffer.java @@ -7,10 +7,9 @@ import java.util.ArrayList; * This class represents a buffer of byte values to be used as a backing buffer * for raw buckets. * - * @author Ulf Lilleengen + * @author <a href="mailto:lulf@yahoo-inc.com">Ulf Lilleengen</a> */ public class RawBuffer implements Comparable<RawBuffer>, Cloneable { - private final ArrayList<Byte> buffer; /** diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/RawPredefined.java b/container-search/src/main/java/com/yahoo/search/grouping/request/RawPredefined.java index 567892a0377..7f27a428e74 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/RawPredefined.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/RawPredefined.java @@ -2,13 +2,12 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a predefined bucket-function in a {@link GroupingExpression} for expressions that evaluate to a * raw. * - * @author Ulf Lilleengen + * @author <a href="mailto:lulf@yahoo-inc.com">Ulf Lilleengen</a> */ public class RawPredefined extends PredefinedFunction { @@ -20,23 +19,11 @@ public class RawPredefined extends PredefinedFunction { * @param argN The optional buckets. */ public RawPredefined(GroupingExpression exp, RawBucket arg1, RawBucket... argN) { - this(null, null, exp, asList(arg1, argN)); + this(exp, asList(arg1, argN)); } - private RawPredefined(String label, Integer level, GroupingExpression exp, List<RawBucket> args) { - super(label, level, exp, args); - } - - @Override - public RawPredefined copy() { - return new RawPredefined(getLabel(), - getLevelOrNull(), - getArg(0), - args().stream() - .skip(1) - .map(RawBucket.class::cast) - .map(arg -> arg.copy()) - .collect(Collectors.toList())); + private RawPredefined(GroupingExpression exp, List<RawBucket> args) { + super(exp, args); } @Override @@ -56,6 +43,6 @@ public class RawPredefined extends PredefinedFunction { if (args.isEmpty()) { throw new IllegalArgumentException("Expected at least one bucket, got none."); } - return new RawPredefined(null, null, exp, args); + return new RawPredefined(exp, args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/RawValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/RawValue.java index c8215b1b389..f66ee362599 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/RawValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/RawValue.java @@ -4,8 +4,7 @@ package com.yahoo.search.grouping.request; /** * This class represents a raw value in a {@link GroupingExpression}. * - * @author Ulf Lilleengen - * @author bratseth + * @author <a href="mailto:lulf@yahoo-inc.com">Ulf Lilleengen</a> */ public class RawValue extends ConstantValue<RawBuffer> { @@ -15,16 +14,6 @@ public class RawValue extends ConstantValue<RawBuffer> { * @param value The immutable value to assign to this. */ public RawValue(RawBuffer value) { - super(null, null, value); + super(value); } - - private RawValue(String label, Integer level, RawBuffer value) { - super(label, level, value); - } - - @Override - public RawValue copy() { - return new RawValue(getLabel(), getLevelOrNull(), getValue().clone()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/RelevanceValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/RelevanceValue.java index 30cdf2c6f5c..01735c0bdab 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/RelevanceValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/RelevanceValue.java @@ -6,7 +6,6 @@ package com.yahoo.search.grouping.request; * the input {@link com.yahoo.search.result.Hit}. * * @author Simon Thoresen Hult - * @author bratseth */ public class RelevanceValue extends DocumentValue { @@ -14,16 +13,7 @@ public class RelevanceValue extends DocumentValue { * Constructs a new instance of this class. */ public RelevanceValue() { - this(null, null); - } - - private RelevanceValue(String label, Integer level) { - super("relevance()", label, level); - } - - @Override - public RelevanceValue copy() { - return new RelevanceValue(getLabel(), getLevelOrNull()); + super("relevance()"); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/ReverseFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/ReverseFunction.java index 8937018c28f..8283806b5c1 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/ReverseFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/ReverseFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * result of the argument, sorted in descending order. * * @author baldersheim - * @author bratseth */ public class ReverseFunction extends FunctionNode { @@ -18,16 +17,6 @@ public class ReverseFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a list. */ public ReverseFunction(GroupingExpression exp) { - this(null, null, exp); + super("reverse", Arrays.asList(exp)); } - - private ReverseFunction(String label, Integer level, GroupingExpression exp) { - super("reverse", label, level, Arrays.asList(exp)); - } - - @Override - public ReverseFunction copy() { - return new ReverseFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/SecondOfMinuteFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/SecondOfMinuteFunction.java index 7b01d820d89..b83065af629 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/SecondOfMinuteFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/SecondOfMinuteFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * that equals the second of minute (0-59) of the result of the argument. * * @author Simon Thoresen Hult - * @author bratseth */ public class SecondOfMinuteFunction extends FunctionNode { @@ -18,16 +17,6 @@ public class SecondOfMinuteFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a long. */ public SecondOfMinuteFunction(GroupingExpression exp) { - this(null, null, exp); + super("time.secondofminute", Arrays.asList(exp)); } - - private SecondOfMinuteFunction(String label, Integer level, GroupingExpression exp) { - super("time.secondofminute", label, level, Arrays.asList(exp)); - } - - @Override - public SecondOfMinuteFunction copy() { - return new SecondOfMinuteFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/SizeFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/SizeFunction.java index a9deb2b8e64..4b7055ffb89 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/SizeFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/SizeFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * number of elements in the result of the argument (e.g. the number of elements in an array). * * @author Simon Thoresen Hult - * @author bratseth */ public class SizeFunction extends FunctionNode { @@ -18,17 +17,7 @@ public class SizeFunction extends FunctionNode { * @param exp The expression to evaluate. */ public SizeFunction(GroupingExpression exp) { - this(null, null, exp); + super("size", Arrays.asList(exp)); } - - private SizeFunction(String label, Integer level, GroupingExpression exp) { - super("size", label, level, Arrays.asList(exp)); - } - - @Override - public SizeFunction copy() { - return new SizeFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/SortFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/SortFunction.java index 57489b8ee1a..6ee4644344e 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/SortFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/SortFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * result of the argument, sorted in ascending order. * * @author baldersheim - * @author bratseth */ public class SortFunction extends FunctionNode { @@ -18,16 +17,6 @@ public class SortFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a list. */ public SortFunction(GroupingExpression exp) { - this(null, null, exp); + super("sort", Arrays.asList(exp)); } - - private SortFunction(String label, Integer level, GroupingExpression exp) { - super("sort", label, level, Arrays.asList(exp)); - } - - @Override - public SortFunction copy() { - return new SortFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/StandardDeviationAggregator.java b/container-search/src/main/java/com/yahoo/search/grouping/request/StandardDeviationAggregator.java index d96b840dde9..62bc0085422 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/StandardDeviationAggregator.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/StandardDeviationAggregator.java @@ -6,26 +6,13 @@ package com.yahoo.search.grouping.request; * of the values that the contained expression evaluated to over all the inputs. * * @author bjorncs - * @author bratseth */ public class StandardDeviationAggregator extends AggregatorNode { /** - * Constructs a new instance of this class. - * - * @param expression the expression to aggregate on. + * @param exp The expression to aggregate on. */ - public StandardDeviationAggregator(GroupingExpression expression) { - this(null, null, expression); + public StandardDeviationAggregator(GroupingExpression exp) { + super("stddev", exp); } - - private StandardDeviationAggregator(String label, Integer level, GroupingExpression expression) { - super("stddev", label, level, expression); - } - - @Override - public StandardDeviationAggregator copy() { - return new StandardDeviationAggregator(getLabel(), getLevelOrNull(), getExpression().copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/StrCatFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/StrCatFunction.java index 3b266b884bf..97dcc909254 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/StrCatFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/StrCatFunction.java @@ -2,14 +2,12 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a strcat-function in a {@link GroupingExpression}. It evaluates to a string that equals the * contatenation of the string results of all arguments in the order they were given to the constructor. * * @author Simon Thoresen Hult - * @author bratseth */ public class StrCatFunction extends FunctionNode { @@ -21,18 +19,11 @@ public class StrCatFunction extends FunctionNode { * @param argN The optional arguments, must evaluate to a string. */ public StrCatFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private StrCatFunction(String label, Integer level, List<GroupingExpression> args) { - super("strcat", label, level, args); - } - - @Override - public StrCatFunction copy() { - return new StrCatFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private StrCatFunction(List<GroupingExpression> args) { + super("strcat", args); } /** @@ -46,7 +37,7 @@ public class StrCatFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new StrCatFunction(null, null, args); + return new StrCatFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/StrLenFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/StrLenFunction.java index d784e37b337..e9ca48b3db3 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/StrLenFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/StrLenFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * number of bytes in the string result of the argument. * * @author Simon Thoresen Hult - * @author bratseth */ public class StrLenFunction extends FunctionNode { @@ -18,17 +17,7 @@ public class StrLenFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a string. */ public StrLenFunction(GroupingExpression exp) { - this(null, null, exp); + super("strlen", Arrays.asList(exp)); } - - private StrLenFunction(String label, Integer level, GroupingExpression exp) { - super("strlen", label, level, Arrays.asList(exp)); - } - - @Override - public StrLenFunction copy() { - return new StrLenFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/StringBucket.java b/container-search/src/main/java/com/yahoo/search/grouping/request/StringBucket.java index 5558f1443db..80e85ed9e78 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/StringBucket.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/StringBucket.java @@ -25,7 +25,7 @@ public class StringBucket extends BucketValue { * @param to The to-value to assign to this. */ public StringBucket(String from, String to) { - super(null, null, new StringValue(from), new StringValue(to)); + super(new StringValue(from), new StringValue(to)); } /** @@ -35,16 +35,6 @@ public class StringBucket extends BucketValue { * @param to The to-value to assign to this. */ public StringBucket(ConstantValue<?> from, ConstantValue<?> to) { - super(null, null, from, to); + super(from, to); } - - private StringBucket(String label, Integer level, ConstantValue<?> from, ConstantValue<?> to) { - super(label, level, from, to); - } - - @Override - public StringBucket copy() { - return new StringBucket(getLabel(), getLevelOrNull(), getFrom().copy(), getTo().copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/StringPredefined.java b/container-search/src/main/java/com/yahoo/search/grouping/request/StringPredefined.java index cae9bc113c9..465ff96157d 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/StringPredefined.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/StringPredefined.java @@ -2,7 +2,6 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a predefined bucket-function in a {@link GroupingExpression} for expressions that evaluate to a @@ -20,23 +19,11 @@ public class StringPredefined extends PredefinedFunction { * @param argN The optional buckets. */ public StringPredefined(GroupingExpression exp, StringBucket arg1, StringBucket... argN) { - this(null, null, exp, asList(arg1, argN)); + this(exp, asList(arg1, argN)); } - private StringPredefined(String label, Integer level, GroupingExpression exp, List<StringBucket> args) { - super(label, level, exp, args); - } - - @Override - public StringPredefined copy() { - return new StringPredefined(getLabel(), - getLevelOrNull(), - getArg(0), - args().stream() - .skip(1) - .map(StringBucket.class::cast) - .map(arg -> arg.copy()) - .collect(Collectors.toList())); + private StringPredefined(GroupingExpression exp, List<StringBucket> args) { + super(exp, args); } @Override @@ -56,6 +43,6 @@ public class StringPredefined extends PredefinedFunction { if (args.isEmpty()) { throw new IllegalArgumentException("Expected at least one bucket, got none."); } - return new StringPredefined(null, null, exp, args); + return new StringPredefined(exp, args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/StringValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/StringValue.java index 473e6b73f95..4fc630c7b1b 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/StringValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/StringValue.java @@ -5,7 +5,6 @@ package com.yahoo.search.grouping.request; * This class represents a constant {@link String} value in a {@link GroupingExpression}. * * @author Simon Thoresen Hult - * @author bratseth */ public class StringValue extends ConstantValue<String> { @@ -15,16 +14,6 @@ public class StringValue extends ConstantValue<String> { * @param value The immutable value to assign to this. */ public StringValue(String value) { - super(null, null, value); + super(value); } - - private StringValue(String label, Integer level, String value) { - super(label, level, value); - } - - @Override - public StringValue copy() { - return new StringValue(getLabel(), getLevelOrNull(), getValue()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/SubFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/SubFunction.java index e0fe533e361..1d0456ffcf2 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/SubFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/SubFunction.java @@ -2,7 +2,6 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents a div-function in a {@link GroupingExpression}. It evaluates to a number that equals the result @@ -21,18 +20,11 @@ public class SubFunction extends FunctionNode { * @param argN The optional arguments, must evaluate to a number. */ public SubFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private SubFunction(String label, Integer level, List<GroupingExpression> args) { - super("sub", label, level, args); - } - - @Override - public SubFunction copy() { - return new SubFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private SubFunction(List<GroupingExpression> args) { + super("sub", args); } /** @@ -46,6 +38,6 @@ public class SubFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new SubFunction(null, null, args); + return new SubFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/SumAggregator.java b/container-search/src/main/java/com/yahoo/search/grouping/request/SumAggregator.java index 0b34b0660d5..b50dd84e27e 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/SumAggregator.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/SumAggregator.java @@ -6,26 +6,15 @@ package com.yahoo.search.grouping.request; * the contained expression evaluated to over all the inputs. * * @author Simon Thoresen Hult - * @author bratseth */ public class SumAggregator extends AggregatorNode { /** * Constructs a new instance of this class. * - * @param expression the expression to aggregate on. + * @param exp The expression to aggregate on. */ - public SumAggregator(GroupingExpression expression) { - this(null, null, expression); + public SumAggregator(GroupingExpression exp) { + super("sum", exp); } - - private SumAggregator(String label, Integer level, GroupingExpression expression) { - super("sum", label, level, expression); - } - - @Override - public SumAggregator copy() { - return new SumAggregator(getLabel(), getLevelOrNull(), getExpression().copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/SummaryValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/SummaryValue.java index 68641d6e6e6..6cdaa3b2e4a 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/SummaryValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/SummaryValue.java @@ -15,7 +15,8 @@ public class SummaryValue extends DocumentValue { * Constructs a new instance of this class, using the default summary class. */ public SummaryValue() { - this(null, null, null); + super("summary()"); + name = null; } /** @@ -24,19 +25,10 @@ public class SummaryValue extends DocumentValue { * @param summaryName The name of the summary class to assign to this. */ public SummaryValue(String summaryName) { - this(null, null, summaryName); - } - - private SummaryValue(String label, Integer level, String summaryName) { - super("summary(" + (summaryName == null ? "" : summaryName) + ")", label, level); + super("summary(" + summaryName + ")"); name = summaryName; } - @Override - public SummaryValue copy() { - return new SummaryValue(getLabel(), getLevelOrNull(), getSummaryName()); - } - /** * Returns the name of the summary class used to retrieve the hit from the search node. * @@ -45,5 +37,4 @@ public class SummaryValue extends DocumentValue { public String getSummaryName() { return name; } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/ToDoubleFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/ToDoubleFunction.java index 8e7490d0cc6..c6816dda621 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/ToDoubleFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/ToDoubleFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * a double. If the argument can not be converted, this function returns 0. * * @author baldersheim - * @author bratseth */ public class ToDoubleFunction extends FunctionNode { @@ -18,18 +17,6 @@ public class ToDoubleFunction extends FunctionNode { * @param exp The expression to evaluate. */ public ToDoubleFunction(GroupingExpression exp) { - this(null, null, exp); + super("todouble", Arrays.asList(exp)); } - - private ToDoubleFunction(String label, Integer level, GroupingExpression exp) { - super("todouble", label, level, Arrays.asList(exp)); - } - - @Override - public ToDoubleFunction copy() { - return new ToDoubleFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } - - diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/ToLongFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/ToLongFunction.java index 77470487a6e..c513fbd76e6 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/ToLongFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/ToLongFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * long. If the argument can not be converted, this function returns 0. * * @author baldersheim - * @author bratseth */ public class ToLongFunction extends FunctionNode { @@ -18,16 +17,6 @@ public class ToLongFunction extends FunctionNode { * @param exp The expression to evaluate. */ public ToLongFunction(GroupingExpression exp) { - this(null, null, exp); + super("tolong", Arrays.asList(exp)); } - - private ToLongFunction(String label, Integer level, GroupingExpression exp) { - super("tolong", label, level, Arrays.asList(exp)); - } - - @Override - public ToLongFunction copy() { - return new ToLongFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/ToRawFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/ToRawFunction.java index 2f32b0fe139..3c1c335b8ef 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/ToRawFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/ToRawFunction.java @@ -8,8 +8,7 @@ import java.util.Arrays; * converts the result of the argument to a raw type. If the argument can not * be converted, this function returns null. * - * @author Ulf Lilleengen - * @author bratseth + * @author <a href="mailto:lulf@yahoo-inc.com">Ulf Lilleengen</a> */ public class ToRawFunction extends FunctionNode { @@ -19,16 +18,6 @@ public class ToRawFunction extends FunctionNode { * @param exp The expression to evaluate. */ public ToRawFunction(GroupingExpression exp) { - this(null, null, exp); + super("toraw", Arrays.asList(exp)); } - - private ToRawFunction(String label, Integer level, GroupingExpression exp) { - super("toraw", label, level, Arrays.asList(exp)); - } - - @Override - public ToRawFunction copy() { - return new ToRawFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/ToStringFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/ToStringFunction.java index dd7bd0b5250..7f4e48c8d81 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/ToStringFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/ToStringFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * long. If the argument can not be converted, this function returns 0. * * @author baldersheim - * @author bratseth */ public class ToStringFunction extends FunctionNode { @@ -18,16 +17,6 @@ public class ToStringFunction extends FunctionNode { * @param exp The expression to evaluate. */ public ToStringFunction(GroupingExpression exp) { - this(null, null, exp); + super("tostring", Arrays.asList(exp)); } - - private ToStringFunction(String label, Integer level, GroupingExpression exp) { - super("tostring", label, level, Arrays.asList(exp)); - } - - @Override - public ToStringFunction copy() { - return new ToStringFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/UcaFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/UcaFunction.java index 787d7aa5863..2efecc235ac 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/UcaFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/UcaFunction.java @@ -2,20 +2,18 @@ package com.yahoo.search.grouping.request; import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; /** * This class represents an uca-function in a {@link GroupingExpression}. * - * @author Ulf Lilleengen - * @author bratseth + * @author <a href="mailto:lulf@yahoo-inc.com">Ulf Lilleengen</a> */ public class UcaFunction extends FunctionNode { private final String locale; private final String strength; + /** * Constructs a new instance of this class. * @@ -23,7 +21,9 @@ public class UcaFunction extends FunctionNode { * @param locale The locale to used for sorting. */ public UcaFunction(GroupingExpression exp, String locale) { - this(null, null, Arrays.asList(exp, new StringValue(locale))); + super("uca", Arrays.asList(exp, new StringValue(locale))); + this.locale = locale; + this.strength = "TERTIARY"; } /** @@ -34,22 +34,12 @@ public class UcaFunction extends FunctionNode { * @param strength The strength level to use. */ public UcaFunction(GroupingExpression exp, String locale, String strength) { - this(null, null, Arrays.asList(exp, new StringValue(locale), new StringValue(strength))); - if ( ! validStrength(strength)) + super("uca", Arrays.asList(exp, new StringValue(locale), new StringValue(strength))); + if (!validStrength(strength)) { throw new IllegalArgumentException("Not a valid UCA strength: " + strength); - } - - private UcaFunction(String label, Integer level, List<GroupingExpression> args) { - super("uca", label, level, args); - this.locale = ((StringValue)args.get(1)).getValue(); - this.strength = args.size() > 2 ? ((StringValue)args.get(1)).getValue() : "TERTIARY"; - } - - @Override - public UcaFunction copy() { - return new UcaFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + } + this.locale = locale; + this.strength = strength; } private boolean validStrength(String strength) { diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/XorAggregator.java b/container-search/src/main/java/com/yahoo/search/grouping/request/XorAggregator.java index e68303b564c..18ce7abd96c 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/XorAggregator.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/XorAggregator.java @@ -6,26 +6,15 @@ package com.yahoo.search.grouping.request; * the contained expression evaluated to over all the inputs. * * @author Simon Thoresen Hult - * @author bratseth */ public class XorAggregator extends AggregatorNode { /** * Constructs a new instance of this class. * - * @param expression the expression to aggregate on. + * @param exp The expression to aggregate on. */ - public XorAggregator(GroupingExpression expression) { - this(null, null, expression); + public XorAggregator(GroupingExpression exp) { + super("xor", exp); } - - private XorAggregator(String label, Integer level, GroupingExpression expression) { - super("xor", label, level, expression); - } - - @Override - public XorAggregator copy() { - return new XorAggregator(getLabel(), getLevelOrNull(), getExpression().copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/XorBitFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/XorBitFunction.java index 8fdd2dc5839..2f6061a3aa2 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/XorBitFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/XorBitFunction.java @@ -2,15 +2,12 @@ package com.yahoo.search.grouping.request; import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; /** * This class represents an xor-function in a {@link GroupingExpression}. It evaluates to a long that equals the xor of * 'width' bits over the binary representation of the result of the argument. * * @author Simon Thoresen Hult - * @author bratseth */ public class XorBitFunction extends FunctionNode { @@ -21,18 +18,7 @@ public class XorBitFunction extends FunctionNode { * @param numBits The number of bits of the expression value to xor. */ public XorBitFunction(GroupingExpression exp, int numBits) { - this(null, null, Arrays.asList(exp, new LongValue(numBits))); - } - - private XorBitFunction(String label, Integer level, List<GroupingExpression> exp) { - super("xorbit", label, level, exp); - } - - @Override - public XorBitFunction copy() { - return new XorBitFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + super("xorbit", Arrays.asList(exp, new LongValue(numBits))); } /** diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/XorFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/XorFunction.java index a7a1e4d2a8f..c3a5f5d88ad 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/XorFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/XorFunction.java @@ -2,14 +2,12 @@ package com.yahoo.search.grouping.request; import java.util.List; -import java.util.stream.Collectors; /** * This class represents an xor-function in a {@link GroupingExpression}. It evaluates to a long that equals the result * of and'ing the results of all arguments together in the order they were given to the constructor. * * @author Simon Thoresen Hult - * @author bratseth */ public class XorFunction extends FunctionNode { @@ -21,18 +19,11 @@ public class XorFunction extends FunctionNode { * @param argN The optional arguments, must evaluate to a long. */ public XorFunction(GroupingExpression arg1, GroupingExpression arg2, GroupingExpression... argN) { - this(null, null, asList(arg1, arg2, argN)); + this(asList(arg1, arg2, argN)); } - private XorFunction(String label, Integer level, List<GroupingExpression> args) { - super("xor", label, level, args); - } - - @Override - public XorFunction copy() { - return new XorFunction(getLabel(), - getLevelOrNull(), - args().stream().map(arg -> arg.copy()).collect(Collectors.toList())); + private XorFunction(List<GroupingExpression> args) { + super("xor", args); } /** @@ -46,7 +37,7 @@ public class XorFunction extends FunctionNode { if (args.size() < 2) { throw new IllegalArgumentException("Expected 2 or more arguments, got " + args.size() + "."); } - return new XorFunction(null, null, args); + return new XorFunction(args); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/YearFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/YearFunction.java index 737597a585c..5bda8231929 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/YearFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/YearFunction.java @@ -8,7 +8,6 @@ import java.util.Arrays; * the full year (e.g. 2010) of the result of the argument. * * @author Simon Thoresen Hult - * @author bratseth */ public class YearFunction extends FunctionNode { @@ -18,16 +17,6 @@ public class YearFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a long. */ public YearFunction(GroupingExpression exp) { - this(null, null, exp); + super("time.year", Arrays.asList(exp)); } - - private YearFunction(String label, Integer level, GroupingExpression exp) { - super("time.year", label, level, Arrays.asList(exp)); - } - - @Override - public YearFunction copy() { - return new YearFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/YmumValue.java b/container-search/src/main/java/com/yahoo/search/grouping/request/YmumValue.java index 8ca772b9188..c5749c4673d 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/YmumValue.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/YmumValue.java @@ -6,7 +6,6 @@ package com.yahoo.search.grouping.request; * input {@link com.yahoo.search.result.Hit}. * * @author Simon Thoresen Hult - * @author bratseth */ public class YmumValue extends DocumentValue { @@ -14,17 +13,7 @@ public class YmumValue extends DocumentValue { * Constructs a new instance of this class. */ public YmumValue() { - this(null, null); + super("ymum()"); } - - private YmumValue(String label, Integer level) { - super("ymum()", label, level); - } - - @Override - public YmumValue copy() { - return new YmumValue(getLabel(), getLevelOrNull()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/ZCurveXFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/ZCurveXFunction.java index 5ab057ef8a8..bcd6f2ba71a 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/ZCurveXFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/ZCurveXFunction.java @@ -5,26 +5,14 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class ZCurveXFunction extends FunctionNode { - /** * Constructs a new instance of this class. * * @param exp The expression to evaluate, must evaluate to a long or long[]. */ public ZCurveXFunction(GroupingExpression exp) { - this(null, null, exp); - } - - private ZCurveXFunction(String label, Integer level, GroupingExpression exp) { - super("zcurve.x", label, level, Arrays.asList(exp)); + super("zcurve.x", Arrays.asList(exp)); } - - @Override - public ZCurveXFunction copy() { - return new ZCurveXFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/ZCurveYFunction.java b/container-search/src/main/java/com/yahoo/search/grouping/request/ZCurveYFunction.java index fa645eb9141..57c55d41209 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/request/ZCurveYFunction.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/request/ZCurveYFunction.java @@ -5,7 +5,6 @@ import java.util.Arrays; /** * @author baldersheim - * @author bratseth */ public class ZCurveYFunction extends FunctionNode { /** @@ -14,16 +13,6 @@ public class ZCurveYFunction extends FunctionNode { * @param exp The expression to evaluate, must evaluate to a long or long[]. */ public ZCurveYFunction(GroupingExpression exp) { - this(null, null, exp); + super("zcurve.y", Arrays.asList(exp)); } - - private ZCurveYFunction(String label, Integer level, GroupingExpression exp) { - super("zcurve.y", label, level, Arrays.asList(exp)); - } - - @Override - public ZCurveYFunction copy() { - return new ZCurveYFunction(getLabel(), getLevelOrNull(), getArg(0).copy()); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/CompositeContinuation.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/CompositeContinuation.java index 7a12a200f5b..a02b80db16f 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/CompositeContinuation.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/CompositeContinuation.java @@ -10,17 +10,10 @@ import java.util.List; /** * @author Simon Thoresen Hult */ -final class CompositeContinuation extends EncodableContinuation implements Iterable<EncodableContinuation> { +class CompositeContinuation extends EncodableContinuation implements Iterable<EncodableContinuation> { private final List<EncodableContinuation> children = new ArrayList<>(); - @Override - public CompositeContinuation copy() { - CompositeContinuation copy = new CompositeContinuation(); - this.children.forEach(child -> copy.add(child.copy())); - return copy; - } - public CompositeContinuation add(EncodableContinuation child) { children.add(child); return this; @@ -55,5 +48,4 @@ final class CompositeContinuation extends EncodableContinuation implements Itera } return ret; } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/EncodableContinuation.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/EncodableContinuation.java index df24b7129ff..2ec371475c2 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/EncodableContinuation.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/EncodableContinuation.java @@ -11,13 +11,9 @@ abstract class EncodableContinuation extends Continuation { public abstract void encode(IntegerEncoder out); @Override - public abstract EncodableContinuation copy(); - - @Override public final String toString() { IntegerEncoder encoder = new IntegerEncoder(); encode(encoder); return encoder.toString(); } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java index 61856467652..bf7eb8dc12e 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java @@ -46,8 +46,7 @@ import com.yahoo.vespa.objects.ObjectPredicate; public class GroupingExecutor extends Searcher { public final static String COMPONENT_NAME = "GroupingExecutor"; - private final static String GROUPING_LIST = "GroupingList"; - private final static CompoundName PROP_GROUPINGLIST = newCompoundName(GROUPING_LIST); + private final static CompoundName PROP_GROUPINGLIST = newCompoundName("GroupingList"); private final static Logger log = Logger.getLogger(GroupingExecutor.class.getName()); /** @@ -70,19 +69,26 @@ public class GroupingExecutor extends Searcher { @Override public Result search(Query query, Execution execution) { String error = QueryCanonicalizer.canonicalize(query); - if (error != null) return new Result(query, ErrorMessage.createIllegalQuery(error)); - + if (error != null) { + return new Result(query, ErrorMessage.createIllegalQuery(error)); + } query.prepare(); - if (query.getSelect().getGrouping().isEmpty()) return execution.search(query); + // Retrieve grouping requests from query. + List<GroupingRequest> reqList = GroupingRequest.getRequests(query); + if (reqList.isEmpty()) { + return execution.search(query); + } // Convert requests to Vespa style grouping. Map<Integer, Grouping> groupingMap = new HashMap<>(); List<RequestContext> requestContextList = new LinkedList<>(); - for (int i = 0; i < query.getSelect().getGrouping().size(); i++) - requestContextList.add(convertRequest(query, query.getSelect().getGrouping().get(i), i, groupingMap)); - - if (groupingMap.isEmpty()) return execution.search(query); + for (GroupingRequest grpRequest : reqList) { + requestContextList.add(convertRequest(query, grpRequest, groupingMap)); + } + if (groupingMap.isEmpty()) { + return execution.search(query); + } // Perform the necessary passes to execute grouping. Result result = performSearch(query, execution, groupingMap); @@ -150,8 +156,8 @@ public class GroupingExecutor extends Searcher { * @param map The grouping map to write to. * @return The context required to identify the request results. */ - private RequestContext convertRequest(Query query, GroupingRequest req, int requestId, Map<Integer, Grouping> map) { - RequestBuilder builder = new RequestBuilder(requestId); + private RequestContext convertRequest(Query query, GroupingRequest req, Map<Integer, Grouping> map) { + RequestBuilder builder = new RequestBuilder(req.getRequestId()); builder.setRootOperation(req.getRootOperation()); builder.setDefaultSummaryName(query.getPresentation().getSummary()); builder.setTimeZone(req.getTimeZone()); diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/OffsetContinuation.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/OffsetContinuation.java index 324f3eb0b6e..6adec94132e 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/OffsetContinuation.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/OffsetContinuation.java @@ -20,11 +20,6 @@ class OffsetContinuation extends EncodableContinuation { this.flags = flags; } - @Override - public OffsetContinuation copy() { - return this; // immutable - } - public ResultId getResultId() { return resultId; } @@ -86,5 +81,4 @@ class OffsetContinuation extends EncodableContinuation { int flags = in.next(); return new OffsetContinuation(resultId, tag, offset, flags); } - } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultId.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultId.java index 82784bcf9dd..0d09e7ab69d 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultId.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultId.java @@ -4,8 +4,6 @@ package com.yahoo.search.grouping.vespa; import java.util.Arrays; /** - * Immutable - * * @author Simon Thoresen Hult */ class ResultId { diff --git a/container-search/src/main/java/com/yahoo/search/query/Model.java b/container-search/src/main/java/com/yahoo/search/query/Model.java index cbc15bf39a1..bd0c229085b 100644 --- a/container-search/src/main/java/com/yahoo/search/query/Model.java +++ b/container-search/src/main/java/com/yahoo/search/query/Model.java @@ -237,13 +237,12 @@ public class Model implements Cloneable { public void setQueryString(String queryString) { if (queryString == null) queryString=""; this.queryString = queryString; - clearQueryTree(); + queryTree = null; // Cause parsing of the new query string next time the tree is accessed } /** * Returns the query string which caused the original query tree of this model to come about. * Note that changes to the query tree are <b>not</b> reflected in this query string. - * Note that changes to the query tree are <b>not</b> reflected in this query string. * * @return the original (or reassigned) query string - never null */ @@ -266,14 +265,6 @@ public class Model implements Cloneable { } /** - * Clears the parsed query such that it will be created anew from the textual representation (a query string or - * select.where expression) on the next access. - */ - public void clearQueryTree() { - queryTree = null; - } - - /** * Returns the filter string set for this query. * The filter is included in the query tree at the time the query tree is parsed */ @@ -346,25 +337,25 @@ public class Model implements Cloneable { QueryHelper.combineHash(encoding,filter,language,getQueryTree(),sources,restrict,defaultIndex,type,searchPath); } - @Override + public Object clone() { try { - Model clone = (Model)super.clone(); + Model clone = (Model) super.clone(); if (queryTree != null) clone.queryTree = this.queryTree.clone(); - if (sources != null) + if (sources !=null) clone.sources = new LinkedHashSet<>(this.sources); - if (restrict != null) + if (restrict !=null) clone.restrict = new LinkedHashSet<>(this.restrict); return clone; } catch (CloneNotSupportedException e) { - throw new RuntimeException("Someone inserted a noncloneable superclass", e); + throw new RuntimeException("Someone inserted a noncloneable superclass",e); } } public Model cloneFor(Query q) { - Model model = (Model)this.clone(); + Model model = (Model) this.clone(); model.setParent(q); return model; } @@ -374,7 +365,7 @@ public class Model implements Cloneable { /** Assigns the query owning this */ public void setParent(Query parent) { - if (parent == null) throw new NullPointerException("A query models owner cannot be null"); + if (parent==null) throw new NullPointerException("A query models owner cannot be null"); this.parent = parent; } @@ -412,7 +403,7 @@ public class Model implements Cloneable { /** Sets the execution working on this. For internal use. */ public void setExecution(Execution execution) { - if (execution == this.execution) return; + if (execution==this.execution) return; // If not already coupled, bind the trace of the new execution into the existing execution trace if (execution.trace().traceNode().isRoot() @@ -434,7 +425,7 @@ public class Model implements Cloneable { /** Returns the Execution working on this, or a null execution if none. For internal use. */ public Execution getExecution() { return execution; } - private void setFromString(String string, Set<String> set) { + private void setFromString(String string,Set<String> set) { set.clear(); for (String item : string.split(",")) set.add(item.trim()); @@ -529,6 +520,7 @@ public class Model implements Cloneable { return false; } + /** * Set the YTrace header value to use when transmitting this model to a * search backend (of some kind). diff --git a/container-search/src/main/java/com/yahoo/search/query/Select.java b/container-search/src/main/java/com/yahoo/search/query/Select.java index bbc152c6391..3ffc6bddb24 100644 --- a/container-search/src/main/java/com/yahoo/search/query/Select.java +++ b/container-search/src/main/java/com/yahoo/search/query/Select.java @@ -10,11 +10,6 @@ import com.yahoo.search.query.profile.types.FieldDescription; import com.yahoo.search.query.profile.types.QueryProfileType; import com.yahoo.search.yql.VespaGroupingStep; -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Objects; /** @@ -32,75 +27,67 @@ public class Select implements Cloneable { public static final String WHERE = "where"; public static final String GROUPING = "grouping"; - private final Query parent; - private final List<GroupingRequest> groupingRequests; - private String where; - private String grouping; + private static Model model; + private Query parent; + private String where = ""; + private String grouping = ""; static { argumentType = new QueryProfileType(SELECT); argumentType.setStrict(true); argumentType.setBuiltin(true); - argumentType.addField(new FieldDescription(WHERE, "string")); - argumentType.addField(new FieldDescription(GROUPING, "string")); + argumentType.addField(new FieldDescription(WHERE, "string", "where")); + argumentType.addField(new FieldDescription(GROUPING, "string", "grouping")); argumentType.freeze(); - argumentTypeName = new CompoundName(argumentType.getId().getName()); + argumentTypeName=new CompoundName(argumentType.getId().getName()); } public static QueryProfileType getArgumentType() { return argumentType; } - /** Creates an empty select statement */ - public Select(Query query) { - this("", "", query); + public Select(String where, String grouping){ + this.where = where; + this.grouping = grouping; } - public Select(String where, String grouping, Query query) { - this(where, grouping, query, Collections.emptyList()); + public Select(Query query) { + setParent(query); + model = query.getModel(); } - private Select(String where, String grouping, Query query, List<GroupingRequest> groupingRequests) { - this.where = Objects.requireNonNull(where, "A Select must have a where string (possibly the empty string)"); - this.grouping = Objects.requireNonNull(grouping, "A Select must have a select string (possibly the empty string)"); - this.parent = Objects.requireNonNull(query, "A Select must have a parent query"); - this.groupingRequests = deepCopy(groupingRequests, this); - } - private static List<GroupingRequest> deepCopy(List<GroupingRequest> groupingRequests, Select parentOfCopy) { - List<GroupingRequest> copy = new ArrayList<>(groupingRequests.size()); - for (GroupingRequest request : groupingRequests) - copy.add(request.copy(parentOfCopy)); - return copy; + /** Returns the query owning this, never null */ + private Query getParent() { return parent; } + + + /** Assigns the query owning this */ + public void setParent(Query parent) { + if (parent==null) throw new NullPointerException("A query models owner cannot be null"); + this.parent = parent; } - /** - * Sets the document selection criterion of the query. - * - * @param where the documents to select as a JSON string on the format specified in - * <a href="https://docs.vespa.ai/documentation/reference/select-reference.html">the select reference doc</a> - */ - public void setWhereString(String where) { + + /** Set the where-clause for the query. Must be a JSON-string, with the format described in the Select Reference doc - https://docs.vespa.ai/documentation/reference/select-reference.html. */ + public void setWhere(String where) { this.where = where; - parent.getModel().setType(SELECT); + model.setType(SELECT); - // This replaces the current query - parent.getModel().clearQueryTree(); + // Setting the queryTree to null + model.setQueryString(null); } - /** Returns the where clause string previously assigned, or an empty string if none */ - public String getWhereString(){ return where; } + /** Returns the where-clause in the query */ + public String getWhereString(){ + return this.where; + } - /** - * Sets the grouping operation of the query. - * - * @param grouping the grouping to perform as a JSON string on the format specified in - * <a href="https://docs.vespa.ai/documentation/reference/select-reference.html">the select reference doc</a> - */ - public void setGroupingString(String grouping) { - groupingRequests.clear(); + + /** Set the grouping-string for the query. Must be a JSON-string, with the format described in the Select Reference doc - https://docs.vespa.ai/documentation/reference/select-reference.html. */ + public void setGrouping(String grouping){ this.grouping = grouping; SelectParser parser = (SelectParser) ParserFactory.newInstance(Query.Type.SELECT, new ParserEnvironment()); + for (VespaGroupingStep step : parser.getGroupingSteps(grouping)) { GroupingRequest.newInstance(parent) .setRootOperation(step.getOperation()) @@ -111,28 +98,13 @@ public class Select implements Cloneable { /** Returns the grouping in the query */ public String getGroupingString(){ - return grouping; + return this.grouping; } - /** - * Returns the query's {@link GroupingRequest} as a mutable list. Changing this directly changes the grouping - * operations which will be performed by this query. - */ - public List<GroupingRequest> getGrouping() { return groupingRequests; } - @Override public String toString() { return "where: [" + where + "], grouping: [" + grouping+ "]"; } - @Override - public Object clone() { - return new Select(where, grouping, parent, groupingRequests); - } - - public Select cloneFor(Query parent) { - return new Select(where, grouping, parent, groupingRequests); - } - } diff --git a/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java b/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java index 559a7279f83..71002166b11 100644 --- a/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java +++ b/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java @@ -3,11 +3,10 @@ package com.yahoo.search.query.properties; import com.yahoo.processing.request.CompoundName; import com.yahoo.search.Query; -import com.yahoo.search.grouping.GroupingRequest; -import com.yahoo.search.grouping.vespa.GroupingExecutor; import com.yahoo.search.query.*; import com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry; import com.yahoo.search.query.profile.types.FieldDescription; +import com.yahoo.search.query.profile.types.QueryProfileFieldType; import com.yahoo.search.query.profile.types.QueryProfileType; import com.yahoo.search.query.ranking.Diversity; import com.yahoo.search.query.ranking.MatchPhase; @@ -15,11 +14,11 @@ import com.yahoo.search.query.ranking.Matching; import com.yahoo.search.query.ranking.SoftTimeout; import com.yahoo.tensor.Tensor; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; - - /** * Maps between the query model and text properties. * This can be done simpler by using reflection but the performance penalty was not worth it, @@ -140,9 +139,7 @@ public class QueryProperties extends Properties { if (key.toString().equals(Model.MODEL)) return query.getModel(); if (key.toString().equals(Ranking.RANKING)) return query.getRanking(); if (key.toString().equals(Presentation.PRESENTATION)) return query.getPresentation(); - } - return super.get(key, context, substitution); } @@ -256,9 +253,9 @@ public class QueryProperties extends Properties { } else if (key.size()==2 && key.first().equals(Select.SELECT)) { if (key.last().equals(Select.WHERE)){ - query.getSelect().setWhereString(asString(value, "")); + query.getSelect().setWhere(asString(value, "")); } else if (key.last().equals(Select.GROUPING)) { - query.getSelect().setGroupingString(asString(value, "")); + query.getSelect().setGrouping(asString(value, "")); } } else if (key.first().equals("rankfeature") || key.first().equals("featureoverride") ) { // featureoverride is deprecated @@ -280,7 +277,8 @@ public class QueryProperties extends Properties { query.setGroupingSessionCache(asBoolean(value, false)); else super.set(key,value,context); - } else + } + else super.set(key,value,context); } catch (Exception e) { // Make sure error messages are informative. This should be moved out of this properties implementation diff --git a/container-search/src/main/java/com/yahoo/search/querytransform/SortingDegrader.java b/container-search/src/main/java/com/yahoo/search/querytransform/SortingDegrader.java index 58eafef79de..12a775e0a62 100644 --- a/container-search/src/main/java/com/yahoo/search/querytransform/SortingDegrader.java +++ b/container-search/src/main/java/com/yahoo/search/querytransform/SortingDegrader.java @@ -37,6 +37,7 @@ import java.util.Set; // We are checking if there is a grouping expression, not if there is a raw grouping instruction property, // so we must run after the property is transferred to a grouping expression @After(GroupingQueryParser.SELECT_PARAMETER_PARSING) + public class SortingDegrader extends Searcher { /** Set this to false in query.properties to turn off degrading. Default: on */ @@ -55,7 +56,7 @@ public class SortingDegrader extends Searcher { private boolean shouldBeDegraded(Query query, IndexFacts.Session indexFacts) { if (query.getRanking().getSorting() == null) return false; if (query.getRanking().getSorting().fieldOrders().isEmpty()) return false; - if ( ! query.getSelect().getGrouping().isEmpty()) return false; + if ( ! GroupingRequest.getRequests(query).isEmpty()) return false; if ( ! query.properties().getBoolean(DEGRADING, true)) return false; Index index = indexFacts.getIndex(query.getRanking().getSorting().fieldOrders().get(0).getFieldName()); diff --git a/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java b/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java index ac1c2ee4a6c..075df0413b7 100644 --- a/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java +++ b/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java @@ -1164,7 +1164,7 @@ public class VespaSerializer { public static String serialize(Query query) { StringBuilder out = new StringBuilder(); serialize(query.getModel().getQueryTree().getRoot(), out); - for (GroupingRequest request : query.getSelect().getGrouping()) { + for (GroupingRequest request : GroupingRequest.getRequests(query)) { out.append(" | "); serialize(request, out); } diff --git a/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java b/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java index c9773008e05..ec586e67763 100644 --- a/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java +++ b/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/FastSearcherTestCase.java @@ -491,7 +491,7 @@ public class FastSearcherTestCase { } private void assertForceSinglePassIs(boolean expected, Query query) { - for (GroupingRequest request : query.getSelect().getGrouping()) + for (GroupingRequest request : GroupingRequest.getRequests(query)) assertForceSinglePassIs(expected, request.getRootOperation()); } diff --git a/container-search/src/test/java/com/yahoo/search/grouping/GroupingQueryParserTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/GroupingQueryParserTestCase.java index 90459fe614f..8de704a8a0e 100644 --- a/container-search/src/test/java/com/yahoo/search/grouping/GroupingQueryParserTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/grouping/GroupingQueryParserTestCase.java @@ -105,6 +105,6 @@ public class GroupingQueryParserTestCase { query.properties().set(GroupingQueryParser.PARAM_CONTINUE, continuation); query.properties().set(GroupingQueryParser.PARAM_TIMEZONE, timeZone); new Execution(new GroupingQueryParser(), Execution.Context.createContextStub()).search(query); - return query.getSelect().getGrouping(); + return GroupingRequest.getRequests(query); } } diff --git a/container-search/src/test/java/com/yahoo/search/grouping/GroupingRequestTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/GroupingRequestTestCase.java index 8b1bbb6842e..494602be7b3 100644 --- a/container-search/src/test/java/com/yahoo/search/grouping/GroupingRequestTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/grouping/GroupingRequestTestCase.java @@ -10,10 +10,8 @@ import com.yahoo.search.result.Hit; import org.junit.Test; import java.lang.reflect.Field; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.List; import static org.junit.Assert.*; @@ -28,10 +26,7 @@ public class GroupingRequestTestCase { assertTrue(req.continuations().isEmpty()); Continuation foo = new Continuation() { - @Override - public Continuation copy() { - return null; - } + }; req.continuations().add(foo); assertEquals(Arrays.asList(foo), req.continuations()); @@ -110,22 +105,32 @@ public class GroupingRequestTestCase { @Test public void requireThatGetRequestsReturnsAllRequests() { Query query = new Query(); - assertEquals(Collections.emptyList(), query.getSelect().getGrouping()); + assertEquals(Collections.emptyList(), GroupingRequest.getRequests(query)); GroupingRequest foo = GroupingRequest.newInstance(query); - assertEquals(Arrays.asList(foo), query.getSelect().getGrouping()); + assertEquals(Arrays.asList(foo), GroupingRequest.getRequests(query)); GroupingRequest bar = GroupingRequest.newInstance(query); - assertEquals(Arrays.asList(foo, bar), query.getSelect().getGrouping()); + assertEquals(Arrays.asList(foo, bar), GroupingRequest.getRequests(query)); + } + + @Test + public void requireThatGetRequestThrowsIllegalArgumentOnBadProperty() throws Exception { + Query query = new Query(); + Field propName = GroupingRequest.class.getDeclaredField("PROP_REQUEST"); + propName.setAccessible(true); + query.properties().set((CompoundName)propName.get(null), new Object()); + try { + GroupingRequest.getRequests(query); + fail(); + } catch (IllegalArgumentException e) { + + } } - private static RootGroup newRootGroup(int id) { return new RootGroup(id, new Continuation() { - @Override - public Continuation copy() { - return null; - } + }); } } diff --git a/container-search/src/test/java/com/yahoo/search/grouping/UniqueGroupingSearcherTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/UniqueGroupingSearcherTestCase.java index 22e5196c0c6..b570adc51c6 100644 --- a/container-search/src/test/java/com/yahoo/search/grouping/UniqueGroupingSearcherTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/grouping/UniqueGroupingSearcherTestCase.java @@ -210,7 +210,7 @@ public class UniqueGroupingSearcherTestCase { Result result = new Result(query); if (addGroupingData) { result.hits().add(resultGroup); - query.getSelect().getGrouping().get(0).setResultGroup(resultGroup); + GroupingRequest.getRequests(query).get(0).setResultGroup(resultGroup); result.setTotalHitCount(totalHitCount); } return result; diff --git a/container-search/src/test/java/com/yahoo/search/grouping/result/GroupListTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/result/GroupListTestCase.java index b8cc25930e2..651321a3b69 100644 --- a/container-search/src/test/java/com/yahoo/search/grouping/result/GroupListTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/grouping/result/GroupListTestCase.java @@ -31,11 +31,5 @@ public class GroupListTestCase { private static class MyContinuation extends Continuation { - @Override - public Continuation copy() { - return null; - } - } - } diff --git a/container-search/src/test/java/com/yahoo/search/grouping/result/HitListTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/result/HitListTestCase.java index 8203691e11e..05a78b71cac 100644 --- a/container-search/src/test/java/com/yahoo/search/grouping/result/HitListTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/grouping/result/HitListTestCase.java @@ -31,11 +31,5 @@ public class HitListTestCase { private static class MyContinuation extends Continuation { - @Override - public Continuation copy() { - return null; - } - } - } diff --git a/container-search/src/test/java/com/yahoo/search/grouping/result/HitRendererTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/result/HitRendererTestCase.java index 657c169720e..85b8ff7a6d5 100644 --- a/container-search/src/test/java/com/yahoo/search/grouping/result/HitRendererTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/grouping/result/HitRendererTestCase.java @@ -167,15 +167,8 @@ public class HitRendererTestCase { } @Override - public Continuation copy() { - return null; - } - - @Override public String toString() { return str; } - } - } diff --git a/container-search/src/test/java/com/yahoo/search/grouping/vespa/CompositeContinuationTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/vespa/CompositeContinuationTestCase.java index b9887495940..6a6741ae1b4 100644 --- a/container-search/src/test/java/com/yahoo/search/grouping/vespa/CompositeContinuationTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/grouping/vespa/CompositeContinuationTestCase.java @@ -109,11 +109,6 @@ public class CompositeContinuationTestCase { private static class MyContinuation extends EncodableContinuation { @Override - public EncodableContinuation copy() { - return null; - } - - @Override public void encode(IntegerEncoder out) { } diff --git a/container-search/src/test/java/com/yahoo/search/grouping/vespa/GroupingTransformTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/vespa/GroupingTransformTestCase.java index 161c3a24801..038df42bd28 100644 --- a/container-search/src/test/java/com/yahoo/search/grouping/vespa/GroupingTransformTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/grouping/vespa/GroupingTransformTestCase.java @@ -162,10 +162,7 @@ public class GroupingTransformTestCase { GroupingTransform transform = newTransform(); try { transform.addContinuation(new Continuation() { - @Override - public Continuation copy() { - return null; - } + }); fail(); } catch (UnsupportedOperationException e) { diff --git a/container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java b/container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java index 726d5cb76be..caad1c76362 100644 --- a/container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/rendering/JsonRendererTestCase.java @@ -790,11 +790,6 @@ public class JsonRendererTestCase { Result r = newEmptyResult(); RootGroup rg = new RootGroup(0, new Continuation() { @Override - public Continuation copy() { - return null; - } - - @Override public String toString() { return "AAAA"; } @@ -802,22 +797,12 @@ public class JsonRendererTestCase { GroupList gl = new GroupList("customer"); gl.continuations().put("prev", new Continuation() { @Override - public Continuation copy() { - return null; - } - - @Override public String toString() { return "BBBB"; } }); gl.continuations().put("next", new Continuation() { @Override - public Continuation copy() { - return null; - } - - @Override public String toString() { return "CCCC"; } @@ -875,11 +860,6 @@ public class JsonRendererTestCase { Result r = newEmptyResult(); RootGroup rg = new RootGroup(0, new Continuation() { @Override - public Continuation copy() { - return null; - } - - @Override public String toString() { return "AAAA"; } diff --git a/container-search/src/test/java/com/yahoo/search/yql/MinimalQueryInserterTestCase.java b/container-search/src/test/java/com/yahoo/search/yql/MinimalQueryInserterTestCase.java index b23e25e173e..e5dbe10a0e4 100644 --- a/container-search/src/test/java/com/yahoo/search/yql/MinimalQueryInserterTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/yql/MinimalQueryInserterTestCase.java @@ -329,8 +329,9 @@ public class MinimalQueryInserterTestCase { private static void assertGrouping(String expected, Query query) { List<String> actual = new ArrayList<>(); - for (GroupingRequest request : query.getSelect().getGrouping()) + for (GroupingRequest request : GroupingRequest.getRequests(query)) { actual.add(request.continuations().toString() + request.getRootOperation()); + } assertEquals(expected, actual.toString()); } diff --git a/container-search/src/test/java/com/yahoo/select/SelectTestCase.java b/container-search/src/test/java/com/yahoo/select/SelectParserTestCase.java index 6871e26b96a..031ba386ad4 100644 --- a/container-search/src/test/java/com/yahoo/select/SelectTestCase.java +++ b/container-search/src/test/java/com/yahoo/select/SelectParserTestCase.java @@ -15,14 +15,14 @@ import com.yahoo.prelude.query.WeakAndItem; import com.yahoo.prelude.query.WordAlternativesItem; import com.yahoo.prelude.query.WordItem; import com.yahoo.search.Query; -import com.yahoo.search.grouping.GroupingRequest; -import com.yahoo.search.grouping.request.AllOperation; +import com.yahoo.search.federation.ProviderConfig; import com.yahoo.search.query.QueryTree; import com.yahoo.search.query.Select; import com.yahoo.search.query.SelectParser; import com.yahoo.search.query.parser.Parsable; import com.yahoo.search.query.parser.ParserEnvironment; import com.yahoo.search.yql.VespaGroupingStep; +import org.apache.http.client.utils.URIBuilder; import org.json.JSONException; import org.json.JSONObject; import org.junit.Test; @@ -33,23 +33,24 @@ import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; + /** - * Tests Query.Select + * Specification for the conversion of Select expressions to Vespa search queries. * * @author henrhoi - * @author bratseth */ -public class SelectTestCase { + +public class SelectParserTestCase { private final SelectParser parser = new SelectParser(new ParserEnvironment()); - //------------------------------------------------------------------- "where" tests + + /** WHERE TESTS */ @Test public void test_contains() throws Exception { @@ -135,6 +136,7 @@ public class SelectTestCase { "+title:madonna -title:saint"); } + @Test public void testLessThan() throws JSONException { JSONObject range_json = new JSONObject(); @@ -163,6 +165,7 @@ public class SelectTestCase { "price:>500"); } + @Test public void testLessThanOrEqual() throws JSONException { JSONObject range_json = new JSONObject(); @@ -323,6 +326,7 @@ public class SelectTestCase { assertEquals(3, origin.end); } + @Test public void testSameElement() { assertParse("{ \"contains\": [ \"baz\", {\"sameElement\" : [ { \"contains\" : [\"f1\", \"a\"] }, { \"contains\" : [\"f2\", \"b\"] } ]} ] }", @@ -416,7 +420,7 @@ public class SelectTestCase { WordItem first = (WordItem)root.getItem(0); WordItem second = (WordItem)root.getItem(1); WordItem third = (WordItem)root.getItem(2); - assertEquals(third, first.getConnectedItem()); + assertTrue(first.getConnectedItem() == third); assertEquals(first.getConnectivity(), 7.0d, 1E-6); assertNull(second.getConnectedItem()); @@ -553,17 +557,17 @@ public class SelectTestCase { @Test public void testAffixItems() { assertRootClass("{ \"contains\" : { \"children\" : [\"baz\", \"colors\"], \"attributes\" : {\"suffix\": true} } }", - SuffixItem.class); + SuffixItem.class); assertRootClass("{ \"contains\" : { \"children\" : [\"baz\", \"colors\"], \"attributes\" : {\"prefix\": true} } }", - PrefixItem.class); + PrefixItem.class); assertRootClass("{ \"contains\" : { \"children\" : [\"baz\", \"colors\"], \"attributes\" : {\"substring\": true} } }", - SubstringItem.class); + SubstringItem.class); assertParseFail("{ \"contains\" : { \"children\" : [\"baz\", \"colors\"], \"attributes\" : {\"suffix\": true, \"prefix\" : true} } }", - new IllegalArgumentException("Only one of prefix, substring and suffix can be set.")); + new IllegalArgumentException("Only one of prefix, substring and suffix can be set.")); assertParseFail("{ \"contains\" : { \"children\" : [\"baz\", \"colors\"], \"attributes\" : {\"suffix\": true, \"substring\" : true} } }", - new IllegalArgumentException("Only one of prefix, substring and suffix can be set.")); + new IllegalArgumentException("Only one of prefix, substring and suffix can be set.")); } @Test @@ -637,7 +641,7 @@ public class SelectTestCase { checkWordAlternativesContent(alternatives); } - //------------------------------------------------------------------- grouping tests + /** GROUPING TESTS */ @Test public void testGrouping(){ @@ -655,7 +659,9 @@ public class SelectTestCase { assertGrouping(expected, parseGrouping(grouping)); } - //------------------------------------------------------------------- Other tests + + + /** OTHER TESTS */ @Test public void testOverridingOtherQueryTree() { @@ -663,15 +669,16 @@ public class SelectTestCase { assertEquals("default:query", query.getModel().getQueryTree().toString()); assertEquals(Query.Type.ALL, query.getModel().getType()); - query.getSelect().setWhereString("{\"contains\" : [\"default\", \"select\"] }"); + query.getSelect().setWhere("{\"contains\" : [\"default\", \"select\"] }"); assertEquals("default:select", query.getModel().getQueryTree().toString()); assertEquals(Query.Type.SELECT, query.getModel().getType()); } + @Test public void testOverridingWhereQueryTree() { - Query query = new Query("?query=default:query"); - query.getSelect().setWhereString("{\"contains\" : [\"default\", \"select\"] }"); + Query query = new Query(); + query.getSelect().setWhere("{\"contains\" : [\"default\", \"select\"] }"); assertEquals("default:select", query.getModel().getQueryTree().toString()); assertEquals(Query.Type.SELECT, query.getModel().getType()); @@ -681,44 +688,10 @@ public class SelectTestCase { assertEquals(Query.Type.ALL, query.getModel().getType()); } - @Test - public void testProgrammaticAssignment() { - Query query = new Query(); - query.getSelect().setGroupingString("[ { \"all\" : { \"group\" : \"time.year(a)\", \"each\" : { \"output\" : \"count()\" } } } ]"); - assertEquals(1, query.getSelect().getGrouping().size()); - assertEquals("all(group(time.year(a)) each(output(count())))", query.getSelect().getGrouping().get(0).getRootOperation().toString()); - // Setting from string resets the grouping expression - query.getSelect().setGroupingString("[ { \"all\" : { \"group\" : \"time.dayofmonth(a)\", \"each\" : { \"output\" : \"count()\" } } } ]"); - assertEquals(1, query.getSelect().getGrouping().size()); - assertEquals("all(group(time.dayofmonth(a)) each(output(count())))", query.getSelect().getGrouping().get(0).getRootOperation().toString()); - } - @Test - public void testConstructionAndClone() { - Query query = new Query(); - query.getSelect().setWhereString("{\"contains\" : [\"default\", \"select\"] }"); - query.getSelect().setGroupingString("[ { \"all\" : { \"group\" : \"time.dayofmonth(a)\", \"each\" : { \"output\" : \"count()\" } } } ]"); - GroupingRequest secondRequest = GroupingRequest.newInstance(query); - assertEquals("default:select", query.getModel().getQueryTree().toString()); - assertEquals(2, query.getSelect().getGrouping().size()); - assertEquals("all(group(time.dayofmonth(a)) each(output(count())))", query.getSelect().getGrouping().get(0).toString()); - - Query clone = query.clone(); - assertNotSame(query.getSelect(), clone.getSelect()); - assertNotSame(query.getSelect().getGrouping(), clone.getSelect().getGrouping()); - assertNotSame(query.getSelect().getGrouping().get(0), clone.getSelect().getGrouping().get(0)); - assertNotSame(query.getSelect().getGrouping().get(1), clone.getSelect().getGrouping().get(1)); - assertEquals(query.getSelect().getWhereString(), clone.getSelect().getWhereString()); - assertEquals(query.getSelect().getGroupingString(), clone.getSelect().getGroupingString()); - assertEquals(query.getSelect().getGrouping().get(0).toString(), clone.getSelect().getGrouping().get(0).toString()); - assertEquals(query.getSelect().getGrouping().get(1).toString(), clone.getSelect().getGrouping().get(1).toString()); - - - } - - //------------------------------------------------------------------- Assert methods + /** Assert-methods */ private void assertParse(String where, String expectedQueryTree) { String queryTree = parseWhere(where).toString(); assertEquals(expectedQueryTree, queryTree); @@ -748,10 +721,13 @@ public class SelectTestCase { assertEquals(expected, actual.toString()); } - //------------------------------------------------------------------- Parse methods + + + + /** Parse-methods*/ private QueryTree parseWhere(String where) { - Select select = new Select(where, "", new Query()); + Select select = new Select(where, ""); return parser.parse(new Parsable().setSelect(select)); } @@ -761,8 +737,17 @@ public class SelectTestCase { return parser.getGroupingSteps(grouping); } - //------------------------------------------------------------------- Other methods + private QueryTree parse(String where, String grouping) { + Select select = new Select(where, grouping); + return parser.parse(new Parsable().setSelect(select)); + } + + + + + + /** Other methods */ private WordItem getRootWord(String yqlQuery) { Item root = parseWhere(yqlQuery).getRoot(); assertTrue(root instanceof WordItem); @@ -790,4 +775,5 @@ public class SelectTestCase { } } + } |