diff --git a/docs/changelog/124595.yaml b/docs/changelog/124595.yaml
deleted file mode 100644
index 7afd0541b6231..0000000000000
--- a/docs/changelog/124595.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-pr: 124595
-summary: '`ToAggregateMetricDouble` function'
-area: "ES|QL"
-type: enhancement
-issues: []
diff --git a/docs/reference/esql/functions/description/to_aggregate_metric_double.asciidoc b/docs/reference/esql/functions/description/to_aggregate_metric_double.asciidoc
deleted file mode 100644
index 5f7f3e6d30d27..0000000000000
--- a/docs/reference/esql/functions/description/to_aggregate_metric_double.asciidoc
+++ /dev/null
@@ -1,5 +0,0 @@
-// This is generated by ESQL's AbstractFunctionTestCase. Do no edit it. See ../README.md for how to regenerate it.
-
-*Description*
-
-Encode a numeric to an aggregate_metric_double.
diff --git a/docs/reference/esql/functions/description/to_aggregate_metric_double.md b/docs/reference/esql/functions/description/to_aggregate_metric_double.md
deleted file mode 100644
index 144c427ff07cb..0000000000000
--- a/docs/reference/esql/functions/description/to_aggregate_metric_double.md
+++ /dev/null
@@ -1,6 +0,0 @@
-% This is generated by ESQL's AbstractFunctionTestCase. Do no edit it. See ../README.md for how to regenerate it.
-
-**Description**
-
-Encode a numeric to an aggregate_metric_double.
-
diff --git a/docs/reference/esql/functions/kibana/definition/to_aggregate_metric_double.json b/docs/reference/esql/functions/kibana/definition/to_aggregate_metric_double.json
deleted file mode 100644
index bd92b44010582..0000000000000
--- a/docs/reference/esql/functions/kibana/definition/to_aggregate_metric_double.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "comment" : "This is generated by ESQL's AbstractFunctionTestCase. Do no edit it. See ../README.md for how to regenerate it.",
- "type" : "eval",
- "name" : "to_aggregate_metric_double",
- "description" : "Encode a numeric to an aggregate_metric_double.",
- "signatures" : [ ],
- "preview" : false,
- "snapshot_only" : false
-}
diff --git a/docs/reference/esql/functions/kibana/docs/to_aggregate_metric_double.md b/docs/reference/esql/functions/kibana/docs/to_aggregate_metric_double.md
deleted file mode 100644
index b89ad89f3229d..0000000000000
--- a/docs/reference/esql/functions/kibana/docs/to_aggregate_metric_double.md
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-### TO_AGGREGATE_METRIC_DOUBLE
-Encode a numeric to an aggregate_metric_double.
-
diff --git a/docs/reference/esql/functions/layout/to_aggregate_metric_double.asciidoc b/docs/reference/esql/functions/layout/to_aggregate_metric_double.asciidoc
deleted file mode 100644
index b1daccd1de051..0000000000000
--- a/docs/reference/esql/functions/layout/to_aggregate_metric_double.asciidoc
+++ /dev/null
@@ -1,14 +0,0 @@
-// This is generated by ESQL's AbstractFunctionTestCase. Do no edit it. See ../README.md for how to regenerate it.
-
-[discrete]
-[[esql-to_aggregate_metric_double]]
-=== `TO_AGGREGATE_METRIC_DOUBLE`
-
-*Syntax*
-
-[.text-center]
-image::esql/functions/signature/to_aggregate_metric_double.svg[Embedded,opts=inline]
-
-include::../parameters/to_aggregate_metric_double.asciidoc[]
-include::../description/to_aggregate_metric_double.asciidoc[]
-include::../types/to_aggregate_metric_double.asciidoc[]
diff --git a/docs/reference/esql/functions/parameters/to_aggregate_metric_double.asciidoc b/docs/reference/esql/functions/parameters/to_aggregate_metric_double.asciidoc
deleted file mode 100644
index 6eb33081a5a29..0000000000000
--- a/docs/reference/esql/functions/parameters/to_aggregate_metric_double.asciidoc
+++ /dev/null
@@ -1,6 +0,0 @@
-// This is generated by ESQL's AbstractFunctionTestCase. Do no edit it. See ../README.md for how to regenerate it.
-
-*Parameters*
-
-`number`::
-Input value. The input can be a single-valued column or an expression.
diff --git a/docs/reference/esql/functions/signature/to_aggregate_metric_double.svg b/docs/reference/esql/functions/signature/to_aggregate_metric_double.svg
deleted file mode 100644
index e2ad820cf6fb9..0000000000000
--- a/docs/reference/esql/functions/signature/to_aggregate_metric_double.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/reference/esql/functions/types/to_aggregate_metric_double.asciidoc b/docs/reference/esql/functions/types/to_aggregate_metric_double.asciidoc
deleted file mode 100644
index 1be687c9c4884..0000000000000
--- a/docs/reference/esql/functions/types/to_aggregate_metric_double.asciidoc
+++ /dev/null
@@ -1,9 +0,0 @@
-// This is generated by ESQL's AbstractFunctionTestCase. Do no edit it. See ../README.md for how to regenerate it.
-
-*Supported types*
-
-[%header.monospaced.styled,format=dsv,separator=|]
-|===
-number | result
-aggregate_metric_double
-|===
diff --git a/server/src/main/java/org/elasticsearch/TransportVersions.java b/server/src/main/java/org/elasticsearch/TransportVersions.java
index ecc315866fa66..f06fdd8a1fcab 100644
--- a/server/src/main/java/org/elasticsearch/TransportVersions.java
+++ b/server/src/main/java/org/elasticsearch/TransportVersions.java
@@ -196,7 +196,6 @@ static TransportVersion def(int id) {
public static final TransportVersion ML_INFERENCE_DEEPSEEK_8_19 = def(8_841_0_09);
public static final TransportVersion ESQL_SERIALIZE_BLOCK_TYPE_CODE = def(8_841_0_10);
public static final TransportVersion ESQL_FAILURE_FROM_REMOTE = def(8_841_0_11);
- public static final TransportVersion ESQL_AGGREGATE_METRIC_DOUBLE_LITERAL = def(8_841_0_12);
/*
* STOP! READ THIS FIRST! No, really,
diff --git a/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/DataType.java b/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/DataType.java
index febe76f3da33d..4fdc32ea41e12 100644
--- a/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/DataType.java
+++ b/x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/DataType.java
@@ -557,6 +557,7 @@ public static boolean isRepresentable(DataType t) {
&& t != SOURCE
&& t != HALF_FLOAT
&& t != PARTIAL_AGG
+ && t != AGGREGATE_METRIC_DOUBLE
&& t.isCounter() == false;
}
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/AggregateMetricDoubleBlockBuilder.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/AggregateMetricDoubleBlockBuilder.java
index ffb897854904d..4f1c6faf520be 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/AggregateMetricDoubleBlockBuilder.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/AggregateMetricDoubleBlockBuilder.java
@@ -7,17 +7,9 @@
package org.elasticsearch.compute.data;
-import org.elasticsearch.TransportVersion;
-import org.elasticsearch.TransportVersions;
-import org.elasticsearch.common.io.stream.GenericNamedWriteable;
-import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
-import org.elasticsearch.common.io.stream.StreamInput;
-import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.core.Releasables;
import org.elasticsearch.index.mapper.BlockLoader;
-import java.io.IOException;
-
public class AggregateMetricDoubleBlockBuilder extends AbstractBlockBuilder implements BlockLoader.AggregateMetricDoubleBuilder {
private DoubleBlockBuilder minBuilder;
@@ -169,40 +161,11 @@ public String getLabel() {
}
}
- public record AggregateMetricDoubleLiteral(Double min, Double max, Double sum, Integer count) implements GenericNamedWriteable {
+ public record AggregateMetricDoubleLiteral(Double min, Double max, Double sum, Integer count) {
public AggregateMetricDoubleLiteral {
min = min.isNaN() ? null : min;
max = max.isNaN() ? null : max;
sum = sum.isNaN() ? null : sum;
}
-
- public static final NamedWriteableRegistry.Entry ENTRY = new NamedWriteableRegistry.Entry(
- GenericNamedWriteable.class,
- "AggregateMetricDoubleLiteral",
- AggregateMetricDoubleLiteral::new
- );
-
- @Override
- public String getWriteableName() {
- return "AggregateMetricDoubleLiteral";
- }
-
- public AggregateMetricDoubleLiteral(StreamInput input) throws IOException {
- this(input.readOptionalDouble(), input.readOptionalDouble(), input.readOptionalDouble(), input.readOptionalInt());
- }
-
- @Override
- public void writeTo(StreamOutput out) throws IOException {
- out.writeOptionalDouble(min);
- out.writeOptionalDouble(max);
- out.writeOptionalDouble(sum);
- out.writeOptionalInt(count);
- }
-
- @Override
- public TransportVersion getMinimalSupportedVersion() {
- return TransportVersions.ESQL_AGGREGATE_METRIC_DOUBLE_LITERAL;
- }
-
}
}
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/BlockUtils.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/BlockUtils.java
index 1d6012a8a73de..8773a3b9785e0 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/BlockUtils.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/BlockUtils.java
@@ -285,19 +285,7 @@ private static Object valueAtOffset(Block block, int offset) {
DocVector v = ((DocBlock) block).asVector();
yield new Doc(v.shards().getInt(offset), v.segments().getInt(offset), v.docs().getInt(offset));
}
- case COMPOSITE -> {
- CompositeBlock compositeBlock = (CompositeBlock) block;
- var minBlock = (DoubleBlock) compositeBlock.getBlock(AggregateMetricDoubleBlockBuilder.Metric.MIN.getIndex());
- var maxBlock = (DoubleBlock) compositeBlock.getBlock(AggregateMetricDoubleBlockBuilder.Metric.MAX.getIndex());
- var sumBlock = (DoubleBlock) compositeBlock.getBlock(AggregateMetricDoubleBlockBuilder.Metric.SUM.getIndex());
- var countBlock = (IntBlock) compositeBlock.getBlock(AggregateMetricDoubleBlockBuilder.Metric.COUNT.getIndex());
- yield new AggregateMetricDoubleLiteral(
- minBlock.getDouble(offset),
- maxBlock.getDouble(offset),
- sumBlock.getDouble(offset),
- countBlock.getInt(offset)
- );
- }
+ case COMPOSITE -> throw new IllegalArgumentException("can't read values from composite blocks");
case UNKNOWN -> throw new IllegalArgumentException("can't read values from [" + block + "]");
};
}
diff --git a/x-pack/plugin/esql/qa/testFixtures/src/main/java/org/elasticsearch/xpack/esql/EsqlTestUtils.java b/x-pack/plugin/esql/qa/testFixtures/src/main/java/org/elasticsearch/xpack/esql/EsqlTestUtils.java
index 9b7992bc8b9c6..9ce2685469e1a 100644
--- a/x-pack/plugin/esql/qa/testFixtures/src/main/java/org/elasticsearch/xpack/esql/EsqlTestUtils.java
+++ b/x-pack/plugin/esql/qa/testFixtures/src/main/java/org/elasticsearch/xpack/esql/EsqlTestUtils.java
@@ -20,7 +20,6 @@
import org.elasticsearch.common.regex.Regex;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.BigArrays;
-import org.elasticsearch.compute.data.AggregateMetricDoubleBlockBuilder;
import org.elasticsearch.compute.data.BlockFactory;
import org.elasticsearch.compute.data.BlockUtils;
import org.elasticsearch.compute.data.BytesRefBlock;
@@ -786,12 +785,6 @@ public static Literal randomLiteral(DataType type) {
case CARTESIAN_POINT -> CARTESIAN.asWkb(ShapeTestUtils.randomPoint());
case GEO_SHAPE -> GEO.asWkb(GeometryTestUtils.randomGeometry(randomBoolean()));
case CARTESIAN_SHAPE -> CARTESIAN.asWkb(ShapeTestUtils.randomGeometry(randomBoolean()));
- case AGGREGATE_METRIC_DOUBLE -> new AggregateMetricDoubleBlockBuilder.AggregateMetricDoubleLiteral(
- randomDouble(),
- randomDouble(),
- randomDouble(),
- randomInt()
- );
case NULL -> null;
case SOURCE -> {
try {
@@ -802,9 +795,8 @@ public static Literal randomLiteral(DataType type) {
throw new UncheckedIOException(e);
}
}
- case UNSUPPORTED, OBJECT, DOC_DATA_TYPE, TSID_DATA_TYPE, PARTIAL_AGG -> throw new IllegalArgumentException(
- "can't make random values for [" + type.typeName() + "]"
- );
+ case UNSUPPORTED, OBJECT, DOC_DATA_TYPE, TSID_DATA_TYPE, PARTIAL_AGG, AGGREGATE_METRIC_DOUBLE ->
+ throw new IllegalArgumentException("can't make random values for [" + type.typeName() + "]");
}, type);
}
diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java
index 332f0258cfe40..5093bbdda644e 100644
--- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java
+++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java
@@ -739,12 +739,7 @@ public enum Cap {
/**
* Non full text functions do not contribute to score
*/
- NON_FULL_TEXT_FUNCTIONS_SCORING,
-
- /**
- * Support for to_aggregate_metric_double function
- */
- AGGREGATE_METRIC_DOUBLE_CONVERT_TO(AGGREGATE_METRIC_DOUBLE_FEATURE_FLAG);
+ NON_FULL_TEXT_FUNCTIONS_SCORING;
private final boolean enabled;
diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/ExpressionWritables.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/ExpressionWritables.java
index b93028b3e5897..dba0ec799f312 100644
--- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/ExpressionWritables.java
+++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/ExpressionWritables.java
@@ -14,7 +14,6 @@
import org.elasticsearch.xpack.esql.expression.function.fulltext.FullTextWritables;
import org.elasticsearch.xpack.esql.expression.function.scalar.ScalarFunctionWritables;
import org.elasticsearch.xpack.esql.expression.function.scalar.convert.FromBase64;
-import org.elasticsearch.xpack.esql.expression.function.scalar.convert.ToAggregateMetricDouble;
import org.elasticsearch.xpack.esql.expression.function.scalar.convert.ToBase64;
import org.elasticsearch.xpack.esql.expression.function.scalar.convert.ToBoolean;
import org.elasticsearch.xpack.esql.expression.function.scalar.convert.ToCartesianPoint;
@@ -181,7 +180,6 @@ public static List unaryScalars() {
entries.add(StY.ENTRY);
entries.add(Tan.ENTRY);
entries.add(Tanh.ENTRY);
- entries.add(ToAggregateMetricDouble.ENTRY);
entries.add(ToBase64.ENTRY);
entries.add(ToBoolean.ENTRY);
entries.add(ToCartesianPoint.ENTRY);
diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/EsqlFunctionRegistry.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/EsqlFunctionRegistry.java
index 13377cf13ad2f..27a2d9932c312 100644
--- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/EsqlFunctionRegistry.java
+++ b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/EsqlFunctionRegistry.java
@@ -42,7 +42,6 @@
import org.elasticsearch.xpack.esql.expression.function.scalar.conditional.Greatest;
import org.elasticsearch.xpack.esql.expression.function.scalar.conditional.Least;
import org.elasticsearch.xpack.esql.expression.function.scalar.convert.FromBase64;
-import org.elasticsearch.xpack.esql.expression.function.scalar.convert.ToAggregateMetricDouble;
import org.elasticsearch.xpack.esql.expression.function.scalar.convert.ToBase64;
import org.elasticsearch.xpack.esql.expression.function.scalar.convert.ToBoolean;
import org.elasticsearch.xpack.esql.expression.function.scalar.convert.ToCartesianPoint;
@@ -377,7 +376,6 @@ private static FunctionDefinition[][] functions() {
// conversion functions
new FunctionDefinition[] {
def(FromBase64.class, FromBase64::new, "from_base64"),
- def(ToAggregateMetricDouble.class, ToAggregateMetricDouble::new, "to_aggregate_metric_double", "to_aggregatemetricdouble"),
def(ToBase64.class, ToBase64::new, "to_base64"),
def(ToBoolean.class, ToBoolean::new, "to_boolean", "to_bool"),
def(ToCartesianPoint.class, ToCartesianPoint::new, "to_cartesianpoint"),
diff --git a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/convert/ToAggregateMetricDouble.java b/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/convert/ToAggregateMetricDouble.java
deleted file mode 100644
index 0f682e1b0238f..0000000000000
--- a/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/expression/function/scalar/convert/ToAggregateMetricDouble.java
+++ /dev/null
@@ -1,563 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-package org.elasticsearch.xpack.esql.expression.function.scalar.convert;
-
-import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
-import org.elasticsearch.common.io.stream.StreamInput;
-import org.elasticsearch.compute.data.AggregateMetricDoubleBlockBuilder;
-import org.elasticsearch.compute.data.Block;
-import org.elasticsearch.compute.data.BlockFactory;
-import org.elasticsearch.compute.data.CompositeBlock;
-import org.elasticsearch.compute.data.DoubleBlock;
-import org.elasticsearch.compute.data.DoubleVector;
-import org.elasticsearch.compute.data.IntBlock;
-import org.elasticsearch.compute.data.IntVector;
-import org.elasticsearch.compute.data.LongBlock;
-import org.elasticsearch.compute.data.LongVector;
-import org.elasticsearch.compute.data.Page;
-import org.elasticsearch.compute.data.Vector;
-import org.elasticsearch.compute.operator.DriverContext;
-import org.elasticsearch.compute.operator.EvalOperator;
-import org.elasticsearch.core.Releasable;
-import org.elasticsearch.core.Releasables;
-import org.elasticsearch.search.aggregations.metrics.CompensatedSum;
-import org.elasticsearch.xpack.esql.core.expression.Expression;
-import org.elasticsearch.xpack.esql.core.tree.NodeInfo;
-import org.elasticsearch.xpack.esql.core.tree.Source;
-import org.elasticsearch.xpack.esql.core.type.DataType;
-import org.elasticsearch.xpack.esql.expression.function.FunctionInfo;
-import org.elasticsearch.xpack.esql.expression.function.Param;
-import org.elasticsearch.xpack.esql.type.EsqlDataTypeConverter;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.ParamOrdinal.DEFAULT;
-import static org.elasticsearch.xpack.esql.core.expression.TypeResolutions.isType;
-import static org.elasticsearch.xpack.esql.core.type.DataType.AGGREGATE_METRIC_DOUBLE;
-import static org.elasticsearch.xpack.esql.core.type.DataType.DOUBLE;
-import static org.elasticsearch.xpack.esql.core.type.DataType.INTEGER;
-import static org.elasticsearch.xpack.esql.core.type.DataType.LONG;
-import static org.elasticsearch.xpack.esql.core.type.DataType.UNSIGNED_LONG;
-
-public class ToAggregateMetricDouble extends AbstractConvertFunction {
-
- private static final Map EVALUATORS = Map.ofEntries(
- Map.entry(AGGREGATE_METRIC_DOUBLE, (fieldEval, source) -> fieldEval),
- Map.entry(DOUBLE, DoubleFactory::new),
- Map.entry(INTEGER, IntFactory::new),
- Map.entry(LONG, LongFactory::new),
- Map.entry(UNSIGNED_LONG, UnsignedLongFactory::new)
- );
-
- public static final NamedWriteableRegistry.Entry ENTRY = new NamedWriteableRegistry.Entry(
- Expression.class,
- "ToAggregateMetricDouble",
- ToAggregateMetricDouble::new
- );
-
- @FunctionInfo(returnType = "aggregate_metric_double", description = "Encode a numeric to an aggregate_metric_double.")
- public ToAggregateMetricDouble(
- Source source,
- @Param(
- name = "number",
- type = { "double", "long", "unsigned_long", "integer", "aggregate_metric_double" },
- description = "Input value. The input can be a single-valued column or an expression."
- ) Expression field
- ) {
- super(source, field);
- }
-
- private ToAggregateMetricDouble(StreamInput in) throws IOException {
- super(in);
- }
-
- @Override
- public String getWriteableName() {
- return ENTRY.name;
- }
-
- @Override
- protected TypeResolution resolveType() {
- if (childrenResolved() == false) {
- return new TypeResolution("Unresolved children");
- }
- return isType(
- field,
- dt -> dt == DataType.AGGREGATE_METRIC_DOUBLE || dt == DataType.DOUBLE || dt == LONG || dt == INTEGER || dt == UNSIGNED_LONG,
- sourceText(),
- DEFAULT,
- "numeric or aggregate_metric_double"
- );
- }
-
- @Override
- public DataType dataType() {
- return AGGREGATE_METRIC_DOUBLE;
- }
-
- @Override
- public Expression replaceChildren(List newChildren) {
- return new ToAggregateMetricDouble(source(), newChildren.get(0));
- }
-
- @Override
- protected NodeInfo extends Expression> info() {
- return NodeInfo.create(this, ToAggregateMetricDouble::new, field);
- }
-
- @Override
- protected Map factories() {
- return EVALUATORS;
- }
-
- private static class AggregateMetricDoubleVectorBuilder implements Releasable {
- private final DoubleVector.FixedBuilder valuesBuilder;
- private final BlockFactory blockFactory;
-
- private AggregateMetricDoubleVectorBuilder(int estimatedSize, BlockFactory blockFactory) {
- this.blockFactory = blockFactory;
- this.valuesBuilder = blockFactory.newDoubleVectorFixedBuilder(estimatedSize);
- }
-
- private void appendValue(double value) {
- valuesBuilder.appendDouble(value);
- }
-
- private Block build() {
- Block[] blocks = new Block[4];
- Block block;
- boolean success = false;
- try {
- block = valuesBuilder.build().asBlock();
- blocks[AggregateMetricDoubleBlockBuilder.Metric.MIN.getIndex()] = block;
- blocks[AggregateMetricDoubleBlockBuilder.Metric.MAX.getIndex()] = block;
- block.incRef();
- blocks[AggregateMetricDoubleBlockBuilder.Metric.SUM.getIndex()] = block;
- block.incRef();
- blocks[AggregateMetricDoubleBlockBuilder.Metric.COUNT.getIndex()] = blockFactory.newConstantIntBlockWith(
- 1,
- block.getPositionCount()
- );
- CompositeBlock compositeBlock = new CompositeBlock(blocks);
- success = true;
- return compositeBlock;
- } finally {
- if (success == false) {
- Releasables.closeExpectNoException(blocks);
- }
- }
- }
-
- @Override
- public void close() {
- Releasables.closeExpectNoException(valuesBuilder);
- }
- }
-
- public static class DoubleFactory implements EvalOperator.ExpressionEvaluator.Factory {
- private final Source source;
-
- private final EvalOperator.ExpressionEvaluator.Factory fieldEvaluator;
-
- public DoubleFactory(EvalOperator.ExpressionEvaluator.Factory fieldEvaluator, Source source) {
- this.fieldEvaluator = fieldEvaluator;
- this.source = source;
- }
-
- @Override
- public String toString() {
- return "ToAggregateMetricDoubleFromDoubleEvaluator[" + "field=" + fieldEvaluator + "]";
- }
-
- @Override
- public EvalOperator.ExpressionEvaluator get(DriverContext context) {
- final EvalOperator.ExpressionEvaluator eval = fieldEvaluator.get(context);
-
- return new EvalOperator.ExpressionEvaluator() {
- private Block evalBlock(Block block) {
- int positionCount = block.getPositionCount();
- DoubleBlock doubleBlock = (DoubleBlock) block;
- try (
- AggregateMetricDoubleBlockBuilder builder = context.blockFactory()
- .newAggregateMetricDoubleBlockBuilder(positionCount)
- ) {
- CompensatedSum compensatedSum = new CompensatedSum();
- for (int p = 0; p < positionCount; p++) {
- int valueCount = doubleBlock.getValueCount(p);
- if (valueCount == 0) {
- builder.appendNull();
- continue;
- }
- int start = doubleBlock.getFirstValueIndex(p);
- int end = start + valueCount;
- if (valueCount == 1) {
- double current = doubleBlock.getDouble(start);
- builder.min().appendDouble(current);
- builder.max().appendDouble(current);
- builder.sum().appendDouble(current);
- builder.count().appendInt(valueCount);
- continue;
- }
- double min = Double.POSITIVE_INFINITY;
- double max = Double.NEGATIVE_INFINITY;
- for (int i = start; i < end; i++) {
- double current = doubleBlock.getDouble(i);
- min = Math.min(min, current);
- max = Math.max(max, current);
- compensatedSum.add(current);
- }
- builder.min().appendDouble(min);
- builder.max().appendDouble(max);
- builder.sum().appendDouble(compensatedSum.value());
- builder.count().appendInt(valueCount);
- compensatedSum.reset(0, 0);
- }
- return builder.build();
- }
- }
-
- private Block evalVector(Vector vector) {
- int positionCount = vector.getPositionCount();
- DoubleVector doubleVector = (DoubleVector) vector;
- try (
- AggregateMetricDoubleVectorBuilder builder = new AggregateMetricDoubleVectorBuilder(
- positionCount,
- context.blockFactory()
- )
- ) {
- for (int p = 0; p < positionCount; p++) {
- double value = doubleVector.getDouble(p);
- builder.appendValue(value);
- }
- return builder.build();
- }
- }
-
- @Override
- public Block eval(Page page) {
- try (Block block = eval.eval(page)) {
- Vector vector = block.asVector();
- return vector == null ? evalBlock(block) : evalVector(vector);
- }
- }
-
- @Override
- public void close() {
- Releasables.closeExpectNoException(eval);
- }
-
- @Override
- public String toString() {
- return "ToAggregateMetricDoubleFromDoubleEvaluator[field=" + eval + "]";
- }
- };
- }
- }
-
- public static class IntFactory implements EvalOperator.ExpressionEvaluator.Factory {
- private final Source source;
-
- private final EvalOperator.ExpressionEvaluator.Factory fieldEvaluator;
-
- public IntFactory(EvalOperator.ExpressionEvaluator.Factory fieldEvaluator, Source source) {
- this.fieldEvaluator = fieldEvaluator;
- this.source = source;
- }
-
- @Override
- public String toString() {
- return "ToAggregateMetricDoubleFromIntEvaluator[" + "field=" + fieldEvaluator + "]";
- }
-
- @Override
- public EvalOperator.ExpressionEvaluator get(DriverContext context) {
- final EvalOperator.ExpressionEvaluator eval = fieldEvaluator.get(context);
-
- return new EvalOperator.ExpressionEvaluator() {
- @Override
- public Block eval(Page page) {
- try (Block block = eval.eval(page)) {
- Vector vector = block.asVector();
- return vector == null ? evalBlock(block) : evalVector(vector);
- }
- }
-
- private Block evalBlock(Block block) {
- int positionCount = block.getPositionCount();
- IntBlock intBlock = (IntBlock) block;
- try (
- AggregateMetricDoubleBlockBuilder builder = context.blockFactory()
- .newAggregateMetricDoubleBlockBuilder(positionCount)
- ) {
- CompensatedSum sum = new CompensatedSum();
- for (int p = 0; p < positionCount; p++) {
- int valueCount = intBlock.getValueCount(p);
- int start = intBlock.getFirstValueIndex(p);
- int end = start + valueCount;
- if (valueCount == 0) {
- builder.appendNull();
- continue;
- }
- if (valueCount == 1) {
- double current = intBlock.getInt(start);
- builder.min().appendDouble(current);
- builder.max().appendDouble(current);
- builder.sum().appendDouble(current);
- builder.count().appendInt(valueCount);
- continue;
- }
- double min = Double.POSITIVE_INFINITY;
- double max = Double.NEGATIVE_INFINITY;
- for (int i = start; i < end; i++) {
- double current = intBlock.getInt(i);
- min = Math.min(min, current);
- max = Math.max(max, current);
- sum.add(current);
- }
- builder.min().appendDouble(min);
- builder.max().appendDouble(max);
- builder.sum().appendDouble(sum.value());
- builder.count().appendInt(valueCount);
- sum.reset(0, 0);
- }
- return builder.build();
- }
- }
-
- private Block evalVector(Vector vector) {
- int positionCount = vector.getPositionCount();
- IntVector intVector = (IntVector) vector;
- try (
- AggregateMetricDoubleVectorBuilder builder = new AggregateMetricDoubleVectorBuilder(
- positionCount,
- context.blockFactory()
- )
- ) {
- for (int p = 0; p < positionCount; p++) {
- double value = intVector.getInt(p);
- builder.appendValue(value);
- }
- return builder.build();
- }
- }
-
- @Override
- public void close() {
- Releasables.closeExpectNoException(eval);
- }
-
- @Override
- public String toString() {
- return "ToAggregateMetricDoubleFromIntEvaluator[field=" + eval + "]";
- }
- };
- }
- }
-
- public static class LongFactory implements EvalOperator.ExpressionEvaluator.Factory {
- private final Source source;
-
- private final EvalOperator.ExpressionEvaluator.Factory fieldEvaluator;
-
- public LongFactory(EvalOperator.ExpressionEvaluator.Factory fieldEvaluator, Source source) {
- this.fieldEvaluator = fieldEvaluator;
- this.source = source;
- }
-
- @Override
- public String toString() {
- return "ToAggregateMetricDoubleFromLongEvaluator[" + "field=" + fieldEvaluator + "]";
- }
-
- @Override
- public EvalOperator.ExpressionEvaluator get(DriverContext context) {
- final EvalOperator.ExpressionEvaluator eval = fieldEvaluator.get(context);
-
- return new EvalOperator.ExpressionEvaluator() {
- private Block evalBlock(Block block) {
- int positionCount = block.getPositionCount();
- LongBlock longBlock = (LongBlock) block;
- try (
- AggregateMetricDoubleBlockBuilder builder = context.blockFactory()
- .newAggregateMetricDoubleBlockBuilder(positionCount)
- ) {
- CompensatedSum sum = new CompensatedSum();
- for (int p = 0; p < positionCount; p++) {
- int valueCount = longBlock.getValueCount(p);
- int start = longBlock.getFirstValueIndex(p);
- int end = start + valueCount;
- if (valueCount == 0) {
- builder.appendNull();
- continue;
- }
- if (valueCount == 1) {
- double current = longBlock.getLong(start);
- builder.min().appendDouble(current);
- builder.max().appendDouble(current);
- builder.sum().appendDouble(current);
- builder.count().appendInt(valueCount);
- continue;
- }
- double min = Double.POSITIVE_INFINITY;
- double max = Double.NEGATIVE_INFINITY;
- for (int i = start; i < end; i++) {
- double current = longBlock.getLong(i);
- min = Math.min(min, current);
- max = Math.max(max, current);
- sum.add(current);
- }
- builder.min().appendDouble(min);
- builder.max().appendDouble(max);
- builder.sum().appendDouble(sum.value());
- builder.count().appendInt(valueCount);
- sum.reset(0, 0);
- }
- return builder.build();
- }
- }
-
- private Block evalVector(Vector vector) {
- int positionCount = vector.getPositionCount();
- LongVector longVector = (LongVector) vector;
- try (
- AggregateMetricDoubleVectorBuilder builder = new AggregateMetricDoubleVectorBuilder(
- positionCount,
- context.blockFactory()
- )
- ) {
- for (int p = 0; p < positionCount; p++) {
- double value = longVector.getLong(p);
- builder.appendValue(value);
- }
- return builder.build();
- }
- }
-
- @Override
- public Block eval(Page page) {
- try (Block block = eval.eval(page)) {
- Vector vector = block.asVector();
- return vector == null ? evalBlock(block) : evalVector(vector);
- }
- }
-
- @Override
- public void close() {
- Releasables.closeExpectNoException(eval);
- }
-
- @Override
- public String toString() {
- return "ToAggregateMetricDoubleFromLongEvaluator[field=" + eval + "]";
- }
- };
- }
- }
-
- public static class UnsignedLongFactory implements EvalOperator.ExpressionEvaluator.Factory {
- private final Source source;
-
- private final EvalOperator.ExpressionEvaluator.Factory fieldEvaluator;
-
- public UnsignedLongFactory(EvalOperator.ExpressionEvaluator.Factory fieldEvaluator, Source source) {
- this.fieldEvaluator = fieldEvaluator;
- this.source = source;
- }
-
- @Override
- public String toString() {
- return "ToAggregateMetricDoubleFromUnsignedLongEvaluator[" + "field=" + fieldEvaluator + "]";
- }
-
- @Override
- public EvalOperator.ExpressionEvaluator get(DriverContext context) {
- final EvalOperator.ExpressionEvaluator eval = fieldEvaluator.get(context);
-
- return new EvalOperator.ExpressionEvaluator() {
- private Block evalBlock(Block block) {
- int positionCount = block.getPositionCount();
- LongBlock longBlock = (LongBlock) block;
- try (
- AggregateMetricDoubleBlockBuilder builder = context.blockFactory()
- .newAggregateMetricDoubleBlockBuilder(positionCount)
- ) {
- CompensatedSum sum = new CompensatedSum();
- for (int p = 0; p < positionCount; p++) {
- int valueCount = longBlock.getValueCount(p);
- int start = longBlock.getFirstValueIndex(p);
- int end = start + valueCount;
- if (valueCount == 0) {
- builder.appendNull();
- continue;
- }
- if (valueCount == 1) {
- double current = EsqlDataTypeConverter.unsignedLongToDouble(longBlock.getLong(p));
- builder.min().appendDouble(current);
- builder.max().appendDouble(current);
- builder.sum().appendDouble(current);
- builder.count().appendInt(valueCount);
- continue;
- }
- double min = Double.POSITIVE_INFINITY;
- double max = Double.NEGATIVE_INFINITY;
- for (int i = start; i < end; i++) {
- double current = EsqlDataTypeConverter.unsignedLongToDouble(longBlock.getLong(p));
- min = Math.min(min, current);
- max = Math.max(max, current);
- sum.add(current);
- }
- builder.min().appendDouble(min);
- builder.max().appendDouble(max);
- builder.sum().appendDouble(sum.value());
- builder.count().appendInt(valueCount);
- sum.reset(0, 0);
- }
- return builder.build();
- }
- }
-
- private Block evalVector(Vector vector) {
- int positionCount = vector.getPositionCount();
- LongVector longVector = (LongVector) vector;
- try (
- AggregateMetricDoubleVectorBuilder builder = new AggregateMetricDoubleVectorBuilder(
- positionCount,
- context.blockFactory()
- )
- ) {
- for (int p = 0; p < positionCount; p++) {
- double value = EsqlDataTypeConverter.unsignedLongToDouble(longVector.getLong(p));
- builder.appendValue(value);
- }
- return builder.build();
- }
- }
-
- @Override
- public Block eval(Page page) {
- try (Block block = eval.eval(page)) {
- Vector vector = block.asVector();
- return vector == null ? evalBlock(block) : evalVector(vector);
- }
- }
-
- @Override
- public void close() {
- Releasables.closeExpectNoException(eval);
- }
-
- @Override
- public String toString() {
- return "ToAggregateMetricDoubleFromUnsignedLongEvaluator[field=" + eval + "]";
- }
- };
- }
- }
-}
diff --git a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/SerializationTestUtils.java b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/SerializationTestUtils.java
index 8e396e4753f09..3e644f3e61b05 100644
--- a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/SerializationTestUtils.java
+++ b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/SerializationTestUtils.java
@@ -10,11 +10,9 @@
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.io.stream.ByteBufferStreamInput;
import org.elasticsearch.common.io.stream.BytesStreamOutput;
-import org.elasticsearch.common.io.stream.GenericNamedWriteable;
import org.elasticsearch.common.io.stream.NamedWriteableAwareStreamInput;
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
import org.elasticsearch.common.io.stream.StreamInput;
-import org.elasticsearch.compute.data.AggregateMetricDoubleBlockBuilder;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.ExistsQueryBuilder;
import org.elasticsearch.index.query.MatchAllQueryBuilder;
@@ -114,13 +112,6 @@ public static NamedWriteableRegistry writableRegistry() {
entries.add(SingleValueQuery.ENTRY);
entries.addAll(ExpressionWritables.getNamedWriteables());
entries.addAll(PlanWritables.getNamedWriteables());
- entries.add(
- new NamedWriteableRegistry.Entry(
- GenericNamedWriteable.class,
- AggregateMetricDoubleBlockBuilder.AggregateMetricDoubleLiteral.ENTRY.name,
- AggregateMetricDoubleBlockBuilder.AggregateMetricDoubleLiteral::new
- )
- );
return new NamedWriteableRegistry(entries);
}
}
diff --git a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/scalar/convert/ToAggregateMetricDoubleTests.java b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/scalar/convert/ToAggregateMetricDoubleTests.java
deleted file mode 100644
index 14910572d8c9d..0000000000000
--- a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/scalar/convert/ToAggregateMetricDoubleTests.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-package org.elasticsearch.xpack.esql.expression.function.scalar.convert;
-
-import com.carrotsearch.randomizedtesting.annotations.Name;
-import com.carrotsearch.randomizedtesting.annotations.ParametersFactory;
-
-import org.elasticsearch.compute.data.AggregateMetricDoubleBlockBuilder;
-import org.elasticsearch.xpack.esql.core.expression.Expression;
-import org.elasticsearch.xpack.esql.core.tree.Source;
-import org.elasticsearch.xpack.esql.core.type.DataType;
-import org.elasticsearch.xpack.esql.expression.function.AbstractScalarFunctionTestCase;
-import org.elasticsearch.xpack.esql.expression.function.FunctionName;
-import org.elasticsearch.xpack.esql.expression.function.TestCaseSupplier;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Supplier;
-
-import static java.util.Collections.emptyList;
-
-@FunctionName("to_aggregate_metric_double")
-public class ToAggregateMetricDoubleTests extends AbstractScalarFunctionTestCase {
- public ToAggregateMetricDoubleTests(@Name("TestCase") Supplier testCaseSupplier) {
- this.testCase = testCaseSupplier.get();
- }
-
- @Override
- protected Expression build(Source source, List args) {
- if (args.get(0).dataType() == DataType.AGGREGATE_METRIC_DOUBLE) {
- assumeTrue("Test sometimes wraps literals as fields", args.get(0).foldable());
- }
- return new ToAggregateMetricDouble(source, args.get(0));
- }
-
- @ParametersFactory
- public static Iterable