Skip to content

Commit d62bbca

Browse files
authored
[Scripting] Use Number as a return value for BucketAggregationScript (#35653)
This change fixes #35351. Users were no longer able to return types of numbers other than doubles for bucket aggregation scripts. This change reverts to the previous behavior of being able to return any type of number and having it converted to a double outside of the script.
1 parent baf33b3 commit d62bbca

File tree

3 files changed

+4
-4
lines changed

3 files changed

+4
-4
lines changed

modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ExpressionScriptEngine.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundE
109109
BucketAggregationSelectorScript.Factory wrappedFactory = parameters -> new BucketAggregationSelectorScript(parameters) {
110110
@Override
111111
public boolean execute() {
112-
return factory.newInstance(getParams()).execute() == 1.0;
112+
return factory.newInstance(getParams()).execute().doubleValue() == 1.0;
113113
}
114114
};
115115
return context.factoryClazz.cast(wrappedFactory);

server/src/main/java/org/elasticsearch/script/BucketAggregationScript.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public Map<String, Object> getParams() {
4646
return params;
4747
}
4848

49-
public abstract Double execute();
49+
public abstract Number execute();
5050

5151
public interface Factory {
5252
BucketAggregationScript newInstance(Map<String, Object> params);

server/src/main/java/org/elasticsearch/search/aggregations/pipeline/BucketScriptPipelineAggregator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,13 @@ public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext
108108
if (skipBucket) {
109109
newBuckets.add(bucket);
110110
} else {
111-
Double returned = factory.newInstance(vars).execute();
111+
Number returned = factory.newInstance(vars).execute();
112112
if (returned == null) {
113113
newBuckets.add(bucket);
114114
} else {
115115
final List<InternalAggregation> aggs = StreamSupport.stream(bucket.getAggregations().spliterator(), false).map(
116116
(p) -> (InternalAggregation) p).collect(Collectors.toList());
117-
aggs.add(new InternalSimpleValue(name(), returned, formatter, new ArrayList<>(), metaData()));
117+
aggs.add(new InternalSimpleValue(name(), returned.doubleValue(), formatter, new ArrayList<>(), metaData()));
118118
InternalMultiBucketAggregation.InternalBucket newBucket = originalAgg.createBucket(new InternalAggregations(aggs),
119119
bucket);
120120
newBuckets.add(newBucket);

0 commit comments

Comments
 (0)