aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-08-15 15:11:38 +0200
committerJon Bratseth <bratseth@oath.com>2018-08-15 15:11:38 +0200
commit3ad3382721036e58dab67a0d2cc79dfa93263087 (patch)
tree317f08cb4cb2b21879ed6380b242c2104daa698c /container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java
parent506ea9c1367748ddd4ff20203fc13211d635f5a6 (diff)
Revert "Merge pull request #6582 from vespa-engine/revert-6557-revert-6553-revert-6512-henrhoi/object-structured-grouping"
This reverts commit 506ea9c1367748ddd4ff20203fc13211d635f5a6, reversing changes made to 4f6b34dcf9ad904f0ddb89eb506f5920360d5344.
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/request/GroupingOperation.java56
1 files changed, 49 insertions, 7 deletions
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 4c29ca7d98d..93619913b4f 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> alias = LazyMap.newHashMap();
+ private final Map<String, GroupingExpression> aliases = LazyMap.newHashMap();
private final Set<String> hints = LazySet.newHashSet();
private GroupingExpression groupBy = null;
@@ -35,10 +35,44 @@ public abstract class GroupingOperation extends GroupingNode {
private int level = -1;
private int max = -1;
- protected GroupingOperation(String image) {
- super(image);
+ 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;
}
+ /** 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.
@@ -48,7 +82,7 @@ public abstract class GroupingOperation extends GroupingNode {
* @return This, to allow chaining.
*/
public GroupingOperation putAlias(String id, GroupingExpression exp) {
- alias.put(id, exp);
+ aliases.put(id, exp);
return this;
}
@@ -60,8 +94,8 @@ public abstract class GroupingOperation extends GroupingNode {
* @return The expression associated with the id.
*/
public GroupingExpression getAlias(String id) {
- if (alias.containsKey(id)) {
- return alias.get(id);
+ if (aliases.containsKey(id)) {
+ return aliases.get(id);
} else if (parent != null) {
return parent.getAlias(id);
} else {
@@ -69,6 +103,11 @@ 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.
*
@@ -225,6 +264,9 @@ 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;
@@ -446,7 +488,7 @@ public abstract class GroupingOperation extends GroupingNode {
* @param visitor The visitor to call.
*/
public void visitExpressions(ExpressionVisitor visitor) {
- for (GroupingExpression exp : alias.values()) {
+ for (GroupingExpression exp : aliases.values()) {
exp.visit(visitor);
}
for (GroupingExpression exp : outputs) {