diff --git a/docs/changelog/127582.yaml b/docs/changelog/127582.yaml
new file mode 100644
index 0000000000000..589c20e8f2fbc
--- /dev/null
+++ b/docs/changelog/127582.yaml
@@ -0,0 +1,5 @@
+pr: 127582
+summary: Specialize ags `AddInput` for each block type
+area: ES|QL
+type: enhancement
+issues: []
diff --git a/x-pack/plugin/esql/compute/gen/src/main/java/org/elasticsearch/compute/gen/GroupingAggregatorImplementer.java b/x-pack/plugin/esql/compute/gen/src/main/java/org/elasticsearch/compute/gen/GroupingAggregatorImplementer.java
index f42138c3eceb6..b02abd9b1fa58 100644
--- a/x-pack/plugin/esql/compute/gen/src/main/java/org/elasticsearch/compute/gen/GroupingAggregatorImplementer.java
+++ b/x-pack/plugin/esql/compute/gen/src/main/java/org/elasticsearch/compute/gen/GroupingAggregatorImplementer.java
@@ -54,7 +54,8 @@
import static org.elasticsearch.compute.gen.Types.GROUPING_AGGREGATOR_FUNCTION;
import static org.elasticsearch.compute.gen.Types.GROUPING_AGGREGATOR_FUNCTION_ADD_INPUT;
import static org.elasticsearch.compute.gen.Types.INTERMEDIATE_STATE_DESC;
-import static org.elasticsearch.compute.gen.Types.INT_BLOCK;
+import static org.elasticsearch.compute.gen.Types.INT_ARRAY_BLOCK;
+import static org.elasticsearch.compute.gen.Types.INT_BIG_ARRAY_BLOCK;
import static org.elasticsearch.compute.gen.Types.INT_VECTOR;
import static org.elasticsearch.compute.gen.Types.LIST_AGG_FUNC_DESC;
import static org.elasticsearch.compute.gen.Types.LIST_INTEGER;
@@ -76,6 +77,8 @@
* and break-point-able as possible.
*/
public class GroupingAggregatorImplementer {
+ private static final List GROUP_IDS_CLASSES = List.of(INT_ARRAY_BLOCK, INT_BIG_ARRAY_BLOCK, INT_VECTOR);
+
private final TypeElement declarationType;
private final List warnExceptions;
private final ExecutableElement init;
@@ -196,10 +199,10 @@ private TypeSpec type() {
builder.addMethod(intermediateStateDesc());
builder.addMethod(intermediateBlockCount());
builder.addMethod(prepareProcessPage());
- builder.addMethod(addRawInputLoop(INT_VECTOR, blockType(aggParam.type())));
- builder.addMethod(addRawInputLoop(INT_VECTOR, vectorType(aggParam.type())));
- builder.addMethod(addRawInputLoop(INT_BLOCK, blockType(aggParam.type())));
- builder.addMethod(addRawInputLoop(INT_BLOCK, vectorType(aggParam.type())));
+ for (ClassName groupIdClass : GROUP_IDS_CLASSES) {
+ builder.addMethod(addRawInputLoop(groupIdClass, blockType(aggParam.type())));
+ builder.addMethod(addRawInputLoop(groupIdClass, vectorType(aggParam.type())));
+ }
builder.addMethod(selectedMayContainUnseenGroups());
builder.addMethod(addIntermediateInput());
builder.addMethod(addIntermediateRowInput());
@@ -347,15 +350,12 @@ private TypeSpec addInput(Consumer addBlock) {
TypeSpec.Builder builder = TypeSpec.anonymousClassBuilder("");
builder.addSuperinterface(GROUPING_AGGREGATOR_FUNCTION_ADD_INPUT);
- MethodSpec.Builder block = MethodSpec.methodBuilder("add").addAnnotation(Override.class).addModifiers(Modifier.PUBLIC);
- block.addParameter(TypeName.INT, "positionOffset").addParameter(INT_BLOCK, "groupIds");
- addBlock.accept(block);
- builder.addMethod(block.build());
-
- MethodSpec.Builder vector = MethodSpec.methodBuilder("add").addAnnotation(Override.class).addModifiers(Modifier.PUBLIC);
- vector.addParameter(TypeName.INT, "positionOffset").addParameter(INT_VECTOR, "groupIds");
- addBlock.accept(vector);
- builder.addMethod(vector.build());
+ for (ClassName groupIdsType : GROUP_IDS_CLASSES) {
+ MethodSpec.Builder vector = MethodSpec.methodBuilder("add").addAnnotation(Override.class).addModifiers(Modifier.PUBLIC);
+ vector.addParameter(TypeName.INT, "positionOffset").addParameter(groupIdsType, "groupIds");
+ addBlock.accept(vector);
+ builder.addMethod(vector.build());
+ }
MethodSpec.Builder close = MethodSpec.methodBuilder("close").addAnnotation(Override.class).addModifiers(Modifier.PUBLIC);
builder.addMethod(close.build());
diff --git a/x-pack/plugin/esql/compute/gen/src/main/java/org/elasticsearch/compute/gen/Types.java b/x-pack/plugin/esql/compute/gen/src/main/java/org/elasticsearch/compute/gen/Types.java
index 62ecee6b5c6e9..a9f4eef521716 100644
--- a/x-pack/plugin/esql/compute/gen/src/main/java/org/elasticsearch/compute/gen/Types.java
+++ b/x-pack/plugin/esql/compute/gen/src/main/java/org/elasticsearch/compute/gen/Types.java
@@ -46,6 +46,8 @@ public class Types {
static final ClassName BOOLEAN_BLOCK = ClassName.get(DATA_PACKAGE, "BooleanBlock");
static final ClassName BYTES_REF_BLOCK = ClassName.get(DATA_PACKAGE, "BytesRefBlock");
static final ClassName INT_BLOCK = ClassName.get(DATA_PACKAGE, "IntBlock");
+ static final ClassName INT_ARRAY_BLOCK = ClassName.get(DATA_PACKAGE, "IntArrayBlock");
+ static final ClassName INT_BIG_ARRAY_BLOCK = ClassName.get(DATA_PACKAGE, "IntBigArrayBlock");
static final ClassName LONG_BLOCK = ClassName.get(DATA_PACKAGE, "LongBlock");
static final ClassName DOUBLE_BLOCK = ClassName.get(DATA_PACKAGE, "DoubleBlock");
static final ClassName FLOAT_BLOCK = ClassName.get(DATA_PACKAGE, "FloatBlock");
diff --git a/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/BooleanArrayBlock.java b/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/BooleanArrayBlock.java
index 0c547366abdf1..72cb193fcc46f 100644
--- a/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/BooleanArrayBlock.java
+++ b/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/BooleanArrayBlock.java
@@ -23,7 +23,7 @@
* Block implementation that stores values in a {@link BooleanArrayVector}.
* This class is generated. Edit {@code X-ArrayBlock.java.st} instead.
*/
-final class BooleanArrayBlock extends AbstractArrayBlock implements BooleanBlock {
+public final class BooleanArrayBlock extends AbstractArrayBlock implements BooleanBlock {
static final long BASE_RAM_BYTES_USED = RamUsageEstimator.shallowSizeOfInstance(BooleanArrayBlock.class);
diff --git a/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/BytesRefArrayBlock.java b/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/BytesRefArrayBlock.java
index f698535752a15..0f4b24ee91f2c 100644
--- a/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/BytesRefArrayBlock.java
+++ b/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/BytesRefArrayBlock.java
@@ -25,7 +25,7 @@
* Does not take ownership of the given {@link BytesRefArray} and does not adjust circuit breakers to account for it.
* This class is generated. Edit {@code X-ArrayBlock.java.st} instead.
*/
-final class BytesRefArrayBlock extends AbstractArrayBlock implements BytesRefBlock {
+public final class BytesRefArrayBlock extends AbstractArrayBlock implements BytesRefBlock {
static final long BASE_RAM_BYTES_USED = RamUsageEstimator.shallowSizeOfInstance(BytesRefArrayBlock.class);
diff --git a/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/DoubleArrayBlock.java b/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/DoubleArrayBlock.java
index 2315ac59392b9..68ab08ad59c3e 100644
--- a/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/DoubleArrayBlock.java
+++ b/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/DoubleArrayBlock.java
@@ -23,7 +23,7 @@
* Block implementation that stores values in a {@link DoubleArrayVector}.
* This class is generated. Edit {@code X-ArrayBlock.java.st} instead.
*/
-final class DoubleArrayBlock extends AbstractArrayBlock implements DoubleBlock {
+public final class DoubleArrayBlock extends AbstractArrayBlock implements DoubleBlock {
static final long BASE_RAM_BYTES_USED = RamUsageEstimator.shallowSizeOfInstance(DoubleArrayBlock.class);
diff --git a/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/FloatArrayBlock.java b/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/FloatArrayBlock.java
index 801d94e65e62b..5c794ef0e74e9 100644
--- a/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/FloatArrayBlock.java
+++ b/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/FloatArrayBlock.java
@@ -23,7 +23,7 @@
* Block implementation that stores values in a {@link FloatArrayVector}.
* This class is generated. Edit {@code X-ArrayBlock.java.st} instead.
*/
-final class FloatArrayBlock extends AbstractArrayBlock implements FloatBlock {
+public final class FloatArrayBlock extends AbstractArrayBlock implements FloatBlock {
static final long BASE_RAM_BYTES_USED = RamUsageEstimator.shallowSizeOfInstance(FloatArrayBlock.class);
diff --git a/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/IntArrayBlock.java b/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/IntArrayBlock.java
index bab387f629656..3296ef9dbe3c1 100644
--- a/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/IntArrayBlock.java
+++ b/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/IntArrayBlock.java
@@ -23,7 +23,7 @@
* Block implementation that stores values in a {@link IntArrayVector}.
* This class is generated. Edit {@code X-ArrayBlock.java.st} instead.
*/
-final class IntArrayBlock extends AbstractArrayBlock implements IntBlock {
+public final class IntArrayBlock extends AbstractArrayBlock implements IntBlock {
static final long BASE_RAM_BYTES_USED = RamUsageEstimator.shallowSizeOfInstance(IntArrayBlock.class);
diff --git a/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/LongArrayBlock.java b/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/LongArrayBlock.java
index a9b6902643026..62f7914441ef9 100644
--- a/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/LongArrayBlock.java
+++ b/x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/LongArrayBlock.java
@@ -23,7 +23,7 @@
* Block implementation that stores values in a {@link LongArrayVector}.
* This class is generated. Edit {@code X-ArrayBlock.java.st} instead.
*/
-final class LongArrayBlock extends AbstractArrayBlock implements LongBlock {
+public final class LongArrayBlock extends AbstractArrayBlock implements LongBlock {
static final long BASE_RAM_BYTES_USED = RamUsageEstimator.shallowSizeOfInstance(LongArrayBlock.class);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctBooleanGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctBooleanGroupingAggregatorFunction.java
index d031450a77f56..4fce90e84add6 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctBooleanGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctBooleanGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -65,7 +66,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -81,7 +87,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -96,28 +107,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BooleanBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- CountDistinctBooleanAggregator.combine(state, groupId, values.getBoolean(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ CountDistinctBooleanAggregator.combine(state, groupId, values.getBoolean(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BooleanVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- CountDistinctBooleanAggregator.combine(state, groupId, values.getBoolean(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ CountDistinctBooleanAggregator.combine(state, groupId, values.getBoolean(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -138,7 +163,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock value
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BooleanVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -152,6 +177,27 @@ private void addRawInput(int positionOffset, IntBlock groups, BooleanVector valu
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BooleanBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ CountDistinctBooleanAggregator.combine(state, groupId, values.getBoolean(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BooleanVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ CountDistinctBooleanAggregator.combine(state, groupId, values.getBoolean(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctBytesRefGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctBytesRefGroupingAggregatorFunction.java
index fec083927d5d6..2d005a17dd182 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctBytesRefGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctBytesRefGroupingAggregatorFunction.java
@@ -14,7 +14,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -68,7 +69,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -84,7 +90,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -99,30 +110,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- CountDistinctBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ CountDistinctBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- CountDistinctBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ CountDistinctBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -144,7 +169,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -159,6 +184,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ CountDistinctBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ CountDistinctBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctDoubleGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctDoubleGroupingAggregatorFunction.java
index 756e922913841..0f0dfd4fa5b2c 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctDoubleGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctDoubleGroupingAggregatorFunction.java
@@ -16,7 +16,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -70,7 +71,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -86,7 +92,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -101,28 +112,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- CountDistinctDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ CountDistinctDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- CountDistinctDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ CountDistinctDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -143,7 +168,7 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -157,6 +182,27 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleVector value
}
}
+ private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ CountDistinctDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ CountDistinctDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctFloatGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctFloatGroupingAggregatorFunction.java
index 1462deb1aab91..8e2fa1d71419a 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctFloatGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctFloatGroupingAggregatorFunction.java
@@ -16,7 +16,8 @@
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.FloatBlock;
import org.elasticsearch.compute.data.FloatVector;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -70,7 +71,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -86,7 +92,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -101,28 +112,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- CountDistinctFloatAggregator.combine(state, groupId, values.getFloat(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ CountDistinctFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- CountDistinctFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ CountDistinctFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -143,7 +168,7 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -157,6 +182,27 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatVector values
}
}
+ private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ CountDistinctFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ CountDistinctFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctIntGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctIntGroupingAggregatorFunction.java
index 2145489c67096..08768acfa5261 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctIntGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctIntGroupingAggregatorFunction.java
@@ -14,6 +14,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -68,7 +70,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -84,7 +91,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -99,28 +111,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- CountDistinctIntAggregator.combine(state, groupId, values.getInt(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ CountDistinctIntAggregator.combine(state, groupId, values.getInt(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- CountDistinctIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ CountDistinctIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -141,7 +167,7 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -155,6 +181,27 @@ private void addRawInput(int positionOffset, IntBlock groups, IntVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ CountDistinctIntAggregator.combine(state, groupId, values.getInt(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ CountDistinctIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctLongGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctLongGroupingAggregatorFunction.java
index 20ae39cdbcd19..0b1caa1c3727c 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctLongGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctLongGroupingAggregatorFunction.java
@@ -14,7 +14,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -70,7 +71,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -86,7 +92,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -101,28 +112,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- CountDistinctLongAggregator.combine(state, groupId, values.getLong(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ CountDistinctLongAggregator.combine(state, groupId, values.getLong(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- CountDistinctLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ CountDistinctLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -143,7 +168,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -157,6 +182,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ CountDistinctLongAggregator.combine(state, groupId, values.getLong(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ CountDistinctLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeDoubleGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeDoubleGroupingAggregatorFunction.java
index 2ca6ab02875a2..8a32e5552dd1c 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeDoubleGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeDoubleGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -72,7 +73,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
}
@@ -88,7 +94,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
}
@@ -103,31 +114,45 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- LastOverTimeDoubleAggregator.combine(state, groupId, timestamps.getLong(v), values.getDouble(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ LastOverTimeDoubleAggregator.combine(state, groupId, timestamps.getLong(v), values.getDouble(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleVector values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- var valuePosition = groupPosition + positionOffset;
- LastOverTimeDoubleAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getDouble(valuePosition));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ var valuePosition = groupPosition + positionOffset;
+ LastOverTimeDoubleAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getDouble(valuePosition));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -149,7 +174,7 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -165,6 +190,30 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleVector value
}
}
+ private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ LastOverTimeDoubleAggregator.combine(state, groupId, timestamps.getLong(v), values.getDouble(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, DoubleVector values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ var valuePosition = groupPosition + positionOffset;
+ LastOverTimeDoubleAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getDouble(valuePosition));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeFloatGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeFloatGroupingAggregatorFunction.java
index 38a3b23ee8cc5..250c5cd755a12 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeFloatGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeFloatGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.FloatBlock;
import org.elasticsearch.compute.data.FloatVector;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -72,7 +73,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
}
@@ -88,7 +94,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
}
@@ -103,31 +114,45 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, FloatBlock values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- LastOverTimeFloatAggregator.combine(state, groupId, timestamps.getLong(v), values.getFloat(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ LastOverTimeFloatAggregator.combine(state, groupId, timestamps.getLong(v), values.getFloat(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, FloatVector values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- var valuePosition = groupPosition + positionOffset;
- LastOverTimeFloatAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getFloat(valuePosition));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ var valuePosition = groupPosition + positionOffset;
+ LastOverTimeFloatAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getFloat(valuePosition));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -149,7 +174,7 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values,
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatVector values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -165,6 +190,30 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatVector values
}
}
+ private void addRawInput(int positionOffset, IntVector groups, FloatBlock values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ LastOverTimeFloatAggregator.combine(state, groupId, timestamps.getLong(v), values.getFloat(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, FloatVector values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ var valuePosition = groupPosition + positionOffset;
+ LastOverTimeFloatAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getFloat(valuePosition));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeIntGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeIntGroupingAggregatorFunction.java
index f03728a905ac3..9b118c7dea9be 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeIntGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeIntGroupingAggregatorFunction.java
@@ -11,6 +11,8 @@
import java.util.List;
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
@@ -70,7 +72,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
}
@@ -86,7 +93,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
}
@@ -101,31 +113,45 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- LastOverTimeIntAggregator.combine(state, groupId, timestamps.getLong(v), values.getInt(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ LastOverTimeIntAggregator.combine(state, groupId, timestamps.getLong(v), values.getInt(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- var valuePosition = groupPosition + positionOffset;
- LastOverTimeIntAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getInt(valuePosition));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ var valuePosition = groupPosition + positionOffset;
+ LastOverTimeIntAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getInt(valuePosition));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -147,7 +173,7 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values,
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -163,6 +189,30 @@ private void addRawInput(int positionOffset, IntBlock groups, IntVector values,
}
}
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ LastOverTimeIntAggregator.combine(state, groupId, timestamps.getLong(v), values.getInt(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ var valuePosition = groupPosition + positionOffset;
+ LastOverTimeIntAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getInt(valuePosition));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeLongGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeLongGroupingAggregatorFunction.java
index c9ee5fbad3707..82bfc732969e5 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeLongGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/LastOverTimeLongGroupingAggregatorFunction.java
@@ -11,7 +11,8 @@
import java.util.List;
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -70,7 +71,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
}
@@ -86,7 +92,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
}
@@ -101,31 +112,45 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- LastOverTimeLongAggregator.combine(state, groupId, timestamps.getLong(v), values.getLong(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ LastOverTimeLongAggregator.combine(state, groupId, timestamps.getLong(v), values.getLong(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- var valuePosition = groupPosition + positionOffset;
- LastOverTimeLongAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getLong(valuePosition));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ var valuePosition = groupPosition + positionOffset;
+ LastOverTimeLongAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getLong(valuePosition));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -147,7 +172,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values,
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -163,6 +188,30 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values,
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ LastOverTimeLongAggregator.combine(state, groupId, timestamps.getLong(v), values.getLong(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ var valuePosition = groupPosition + positionOffset;
+ LastOverTimeLongAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getLong(valuePosition));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxBooleanGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxBooleanGroupingAggregatorFunction.java
index 5e2684b85c8db..f7390f55bc52b 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxBooleanGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxBooleanGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -65,7 +66,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -81,7 +87,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -96,28 +107,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BooleanBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- state.set(groupId, MaxBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(v)));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MaxBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(v)));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BooleanVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- state.set(groupId, MaxBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(groupPosition + positionOffset)));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ state.set(groupId, MaxBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(groupPosition + positionOffset)));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -138,7 +163,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock value
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BooleanVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -152,6 +177,27 @@ private void addRawInput(int positionOffset, IntBlock groups, BooleanVector valu
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BooleanBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MaxBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(v)));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BooleanVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ state.set(groupId, MaxBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(groupPosition + positionOffset)));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxBytesRefGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxBytesRefGroupingAggregatorFunction.java
index 52bc763449f59..41f98d962bd2f 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxBytesRefGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxBytesRefGroupingAggregatorFunction.java
@@ -16,7 +16,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -68,7 +69,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -84,7 +90,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -99,30 +110,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- MaxBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MaxBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- MaxBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ MaxBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -144,7 +169,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -159,6 +184,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MaxBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ MaxBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxDoubleGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxDoubleGroupingAggregatorFunction.java
index 0b2e5cca5d244..53273dad7c0f0 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxDoubleGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxDoubleGroupingAggregatorFunction.java
@@ -15,7 +15,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -67,7 +68,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -83,7 +89,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -98,28 +109,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- state.set(groupId, MaxDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(v)));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MaxDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(v)));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- state.set(groupId, MaxDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(groupPosition + positionOffset)));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ state.set(groupId, MaxDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(groupPosition + positionOffset)));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -140,7 +165,7 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -154,6 +179,27 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleVector value
}
}
+ private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MaxDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(v)));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ state.set(groupId, MaxDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(groupPosition + positionOffset)));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxFloatGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxFloatGroupingAggregatorFunction.java
index 4ec8212a2da62..49afaf3c7265d 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxFloatGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxFloatGroupingAggregatorFunction.java
@@ -15,7 +15,8 @@
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.FloatBlock;
import org.elasticsearch.compute.data.FloatVector;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -67,7 +68,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -83,7 +89,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -98,28 +109,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- state.set(groupId, MaxFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(v)));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MaxFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(v)));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- state.set(groupId, MaxFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(groupPosition + positionOffset)));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ state.set(groupId, MaxFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(groupPosition + positionOffset)));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -140,7 +165,7 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -154,6 +179,27 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatVector values
}
}
+ private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MaxFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(v)));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ state.set(groupId, MaxFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(groupPosition + positionOffset)));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxIntGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxIntGroupingAggregatorFunction.java
index 024d0db097b29..3d97bf9df5dd9 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxIntGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxIntGroupingAggregatorFunction.java
@@ -13,6 +13,8 @@
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -65,7 +67,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -81,7 +88,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -96,28 +108,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- state.set(groupId, MaxIntAggregator.combine(state.getOrDefault(groupId), values.getInt(v)));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MaxIntAggregator.combine(state.getOrDefault(groupId), values.getInt(v)));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- state.set(groupId, MaxIntAggregator.combine(state.getOrDefault(groupId), values.getInt(groupPosition + positionOffset)));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ state.set(groupId, MaxIntAggregator.combine(state.getOrDefault(groupId), values.getInt(groupPosition + positionOffset)));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -138,7 +164,7 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -152,6 +178,27 @@ private void addRawInput(int positionOffset, IntBlock groups, IntVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MaxIntAggregator.combine(state.getOrDefault(groupId), values.getInt(v)));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ state.set(groupId, MaxIntAggregator.combine(state.getOrDefault(groupId), values.getInt(groupPosition + positionOffset)));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxIpGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxIpGroupingAggregatorFunction.java
index 805fc77aa9306..fd38873655edd 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxIpGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxIpGroupingAggregatorFunction.java
@@ -16,7 +16,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -68,7 +69,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -84,7 +90,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -99,30 +110,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- MaxIpAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MaxIpAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- MaxIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ MaxIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -144,7 +169,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -159,6 +184,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MaxIpAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ MaxIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxLongGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxLongGroupingAggregatorFunction.java
index 5d6fa43723e7b..fcaea869f84d4 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxLongGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MaxLongGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -67,7 +68,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -83,7 +89,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -98,28 +109,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- state.set(groupId, MaxLongAggregator.combine(state.getOrDefault(groupId), values.getLong(v)));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MaxLongAggregator.combine(state.getOrDefault(groupId), values.getLong(v)));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- state.set(groupId, MaxLongAggregator.combine(state.getOrDefault(groupId), values.getLong(groupPosition + positionOffset)));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ state.set(groupId, MaxLongAggregator.combine(state.getOrDefault(groupId), values.getLong(groupPosition + positionOffset)));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -140,7 +165,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -154,6 +179,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MaxLongAggregator.combine(state.getOrDefault(groupId), values.getLong(v)));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ state.set(groupId, MaxLongAggregator.combine(state.getOrDefault(groupId), values.getLong(groupPosition + positionOffset)));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationDoubleGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationDoubleGroupingAggregatorFunction.java
index 9091515805dff..c380146094f44 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationDoubleGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationDoubleGroupingAggregatorFunction.java
@@ -16,7 +16,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -67,7 +68,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -83,7 +89,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -98,28 +109,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- MedianAbsoluteDeviationDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MedianAbsoluteDeviationDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- MedianAbsoluteDeviationDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ MedianAbsoluteDeviationDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -140,7 +165,7 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -154,6 +179,27 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleVector value
}
}
+ private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MedianAbsoluteDeviationDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ MedianAbsoluteDeviationDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationFloatGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationFloatGroupingAggregatorFunction.java
index 1649e40d9045d..a895ebc9eda6b 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationFloatGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationFloatGroupingAggregatorFunction.java
@@ -16,7 +16,8 @@
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.FloatBlock;
import org.elasticsearch.compute.data.FloatVector;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -67,7 +68,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -83,7 +89,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -98,28 +109,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- MedianAbsoluteDeviationFloatAggregator.combine(state, groupId, values.getFloat(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MedianAbsoluteDeviationFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- MedianAbsoluteDeviationFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ MedianAbsoluteDeviationFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -140,7 +165,7 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -154,6 +179,27 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatVector values
}
}
+ private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MedianAbsoluteDeviationFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ MedianAbsoluteDeviationFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationIntGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationIntGroupingAggregatorFunction.java
index 5904bef3956d3..f9b9934520f06 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationIntGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationIntGroupingAggregatorFunction.java
@@ -14,6 +14,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -65,7 +67,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -81,7 +88,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -96,28 +108,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- MedianAbsoluteDeviationIntAggregator.combine(state, groupId, values.getInt(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MedianAbsoluteDeviationIntAggregator.combine(state, groupId, values.getInt(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- MedianAbsoluteDeviationIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ MedianAbsoluteDeviationIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -138,7 +164,7 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -152,6 +178,27 @@ private void addRawInput(int positionOffset, IntBlock groups, IntVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MedianAbsoluteDeviationIntAggregator.combine(state, groupId, values.getInt(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ MedianAbsoluteDeviationIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationLongGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationLongGroupingAggregatorFunction.java
index bb50db9998a59..e1693d7475c6f 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationLongGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MedianAbsoluteDeviationLongGroupingAggregatorFunction.java
@@ -14,7 +14,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -67,7 +68,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -83,7 +89,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -98,28 +109,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- MedianAbsoluteDeviationLongAggregator.combine(state, groupId, values.getLong(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MedianAbsoluteDeviationLongAggregator.combine(state, groupId, values.getLong(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- MedianAbsoluteDeviationLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ MedianAbsoluteDeviationLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -140,7 +165,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -154,6 +179,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MedianAbsoluteDeviationLongAggregator.combine(state, groupId, values.getLong(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ MedianAbsoluteDeviationLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinBooleanGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinBooleanGroupingAggregatorFunction.java
index 10bb3ca5c60bf..4ca346913a25b 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinBooleanGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinBooleanGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -65,7 +66,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -81,7 +87,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -96,28 +107,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BooleanBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- state.set(groupId, MinBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(v)));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MinBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(v)));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BooleanVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- state.set(groupId, MinBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(groupPosition + positionOffset)));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ state.set(groupId, MinBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(groupPosition + positionOffset)));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -138,7 +163,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock value
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BooleanVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -152,6 +177,27 @@ private void addRawInput(int positionOffset, IntBlock groups, BooleanVector valu
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BooleanBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MinBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(v)));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BooleanVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ state.set(groupId, MinBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(groupPosition + positionOffset)));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinBytesRefGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinBytesRefGroupingAggregatorFunction.java
index 29d96b63a8e59..dc721573876ab 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinBytesRefGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinBytesRefGroupingAggregatorFunction.java
@@ -16,7 +16,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -68,7 +69,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -84,7 +90,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -99,30 +110,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- MinBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MinBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- MinBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ MinBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -144,7 +169,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -159,6 +184,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MinBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ MinBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinDoubleGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinDoubleGroupingAggregatorFunction.java
index c1396235fef0c..3212ca644aee7 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinDoubleGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinDoubleGroupingAggregatorFunction.java
@@ -15,7 +15,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -67,7 +68,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -83,7 +89,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -98,28 +109,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- state.set(groupId, MinDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(v)));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MinDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(v)));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- state.set(groupId, MinDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(groupPosition + positionOffset)));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ state.set(groupId, MinDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(groupPosition + positionOffset)));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -140,7 +165,7 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -154,6 +179,27 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleVector value
}
}
+ private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MinDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(v)));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ state.set(groupId, MinDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(groupPosition + positionOffset)));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinFloatGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinFloatGroupingAggregatorFunction.java
index daadf3d7dbb53..2e7b089e7592a 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinFloatGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinFloatGroupingAggregatorFunction.java
@@ -15,7 +15,8 @@
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.FloatBlock;
import org.elasticsearch.compute.data.FloatVector;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -67,7 +68,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -83,7 +89,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -98,28 +109,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- state.set(groupId, MinFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(v)));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MinFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(v)));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- state.set(groupId, MinFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(groupPosition + positionOffset)));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ state.set(groupId, MinFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(groupPosition + positionOffset)));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -140,7 +165,7 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -154,6 +179,27 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatVector values
}
}
+ private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MinFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(v)));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ state.set(groupId, MinFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(groupPosition + positionOffset)));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinIntGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinIntGroupingAggregatorFunction.java
index 8f92c63096766..50c5e80a55b0c 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinIntGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinIntGroupingAggregatorFunction.java
@@ -13,6 +13,8 @@
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -65,7 +67,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -81,7 +88,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -96,28 +108,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- state.set(groupId, MinIntAggregator.combine(state.getOrDefault(groupId), values.getInt(v)));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MinIntAggregator.combine(state.getOrDefault(groupId), values.getInt(v)));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- state.set(groupId, MinIntAggregator.combine(state.getOrDefault(groupId), values.getInt(groupPosition + positionOffset)));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ state.set(groupId, MinIntAggregator.combine(state.getOrDefault(groupId), values.getInt(groupPosition + positionOffset)));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -138,7 +164,7 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -152,6 +178,27 @@ private void addRawInput(int positionOffset, IntBlock groups, IntVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MinIntAggregator.combine(state.getOrDefault(groupId), values.getInt(v)));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ state.set(groupId, MinIntAggregator.combine(state.getOrDefault(groupId), values.getInt(groupPosition + positionOffset)));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinIpGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinIpGroupingAggregatorFunction.java
index 05a5c3b57e2a6..c89c1feb6790f 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinIpGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinIpGroupingAggregatorFunction.java
@@ -16,7 +16,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -68,7 +69,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -84,7 +90,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -99,30 +110,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- MinIpAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MinIpAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- MinIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ MinIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -144,7 +169,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -159,6 +184,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ MinIpAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ MinIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinLongGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinLongGroupingAggregatorFunction.java
index c6421afa46211..dc92d712ddb6a 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinLongGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/MinLongGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -67,7 +68,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -83,7 +89,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -98,28 +109,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- state.set(groupId, MinLongAggregator.combine(state.getOrDefault(groupId), values.getLong(v)));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MinLongAggregator.combine(state.getOrDefault(groupId), values.getLong(v)));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- state.set(groupId, MinLongAggregator.combine(state.getOrDefault(groupId), values.getLong(groupPosition + positionOffset)));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ state.set(groupId, MinLongAggregator.combine(state.getOrDefault(groupId), values.getLong(groupPosition + positionOffset)));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -140,7 +165,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -154,6 +179,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, MinLongAggregator.combine(state.getOrDefault(groupId), values.getLong(v)));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ state.set(groupId, MinLongAggregator.combine(state.getOrDefault(groupId), values.getLong(groupPosition + positionOffset)));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileDoubleGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileDoubleGroupingAggregatorFunction.java
index a2ba67333a05d..1264bff20abf6 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileDoubleGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileDoubleGroupingAggregatorFunction.java
@@ -16,7 +16,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -70,7 +71,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -86,7 +92,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -101,28 +112,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- PercentileDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ PercentileDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- PercentileDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ PercentileDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -143,7 +168,7 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -157,6 +182,27 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleVector value
}
}
+ private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ PercentileDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ PercentileDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileFloatGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileFloatGroupingAggregatorFunction.java
index 4c24b1b4221c6..f844efae8d218 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileFloatGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileFloatGroupingAggregatorFunction.java
@@ -16,7 +16,8 @@
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.FloatBlock;
import org.elasticsearch.compute.data.FloatVector;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -70,7 +71,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -86,7 +92,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -101,28 +112,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- PercentileFloatAggregator.combine(state, groupId, values.getFloat(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ PercentileFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- PercentileFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ PercentileFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -143,7 +168,7 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -157,6 +182,27 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatVector values
}
}
+ private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ PercentileFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ PercentileFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileIntGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileIntGroupingAggregatorFunction.java
index 97ce87021f4f8..e0dd21ecc80d1 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileIntGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileIntGroupingAggregatorFunction.java
@@ -14,6 +14,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -68,7 +70,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -84,7 +91,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -99,28 +111,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- PercentileIntAggregator.combine(state, groupId, values.getInt(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ PercentileIntAggregator.combine(state, groupId, values.getInt(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- PercentileIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ PercentileIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -141,7 +167,7 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -155,6 +181,27 @@ private void addRawInput(int positionOffset, IntBlock groups, IntVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ PercentileIntAggregator.combine(state, groupId, values.getInt(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ PercentileIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileLongGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileLongGroupingAggregatorFunction.java
index f2680fd7b5bef..1baa4a662175c 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileLongGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/PercentileLongGroupingAggregatorFunction.java
@@ -14,7 +14,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -70,7 +71,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -86,7 +92,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -101,28 +112,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- PercentileLongAggregator.combine(state, groupId, values.getLong(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ PercentileLongAggregator.combine(state, groupId, values.getLong(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- PercentileLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ PercentileLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -143,7 +168,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -157,6 +182,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ PercentileLongAggregator.combine(state, groupId, values.getLong(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ PercentileLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateDoubleGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateDoubleGroupingAggregatorFunction.java
index e12686f2a66fa..25923bf02a761 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateDoubleGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateDoubleGroupingAggregatorFunction.java
@@ -13,6 +13,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
@@ -74,7 +76,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
}
@@ -90,7 +97,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
}
@@ -105,31 +117,45 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- RateDoubleAggregator.combine(state, groupId, timestamps.getLong(v), values.getDouble(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ RateDoubleAggregator.combine(state, groupId, timestamps.getLong(v), values.getDouble(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleVector values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- var valuePosition = groupPosition + positionOffset;
- RateDoubleAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getDouble(valuePosition));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ var valuePosition = groupPosition + positionOffset;
+ RateDoubleAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getDouble(valuePosition));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -151,7 +177,7 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -167,6 +193,30 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleVector value
}
}
+ private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ RateDoubleAggregator.combine(state, groupId, timestamps.getLong(v), values.getDouble(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, DoubleVector values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ var valuePosition = groupPosition + positionOffset;
+ RateDoubleAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getDouble(valuePosition));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateFloatGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateFloatGroupingAggregatorFunction.java
index 5e2aced928554..7dbe1a2de02bd 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateFloatGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateFloatGroupingAggregatorFunction.java
@@ -15,6 +15,8 @@
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.FloatBlock;
import org.elasticsearch.compute.data.FloatVector;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
@@ -76,7 +78,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
}
@@ -92,7 +99,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
}
@@ -107,31 +119,45 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, FloatBlock values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- RateFloatAggregator.combine(state, groupId, timestamps.getLong(v), values.getFloat(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ RateFloatAggregator.combine(state, groupId, timestamps.getLong(v), values.getFloat(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, FloatVector values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- var valuePosition = groupPosition + positionOffset;
- RateFloatAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getFloat(valuePosition));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ var valuePosition = groupPosition + positionOffset;
+ RateFloatAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getFloat(valuePosition));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -153,7 +179,7 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values,
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatVector values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -169,6 +195,30 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatVector values
}
}
+ private void addRawInput(int positionOffset, IntVector groups, FloatBlock values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ RateFloatAggregator.combine(state, groupId, timestamps.getLong(v), values.getFloat(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, FloatVector values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ var valuePosition = groupPosition + positionOffset;
+ RateFloatAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getFloat(valuePosition));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateIntGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateIntGroupingAggregatorFunction.java
index c85a0ac5b9fe0..4650ebf0c5bb2 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateIntGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateIntGroupingAggregatorFunction.java
@@ -13,6 +13,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
@@ -74,7 +76,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
}
@@ -90,7 +97,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
}
@@ -105,31 +117,45 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- RateIntAggregator.combine(state, groupId, timestamps.getLong(v), values.getInt(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ RateIntAggregator.combine(state, groupId, timestamps.getLong(v), values.getInt(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- var valuePosition = groupPosition + positionOffset;
- RateIntAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getInt(valuePosition));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ var valuePosition = groupPosition + positionOffset;
+ RateIntAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getInt(valuePosition));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -151,7 +177,7 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values,
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -167,6 +193,30 @@ private void addRawInput(int positionOffset, IntBlock groups, IntVector values,
}
}
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ RateIntAggregator.combine(state, groupId, timestamps.getLong(v), values.getInt(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ var valuePosition = groupPosition + positionOffset;
+ RateIntAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getInt(valuePosition));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateLongGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateLongGroupingAggregatorFunction.java
index 98996069fe554..a219a58068ea0 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateLongGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/RateLongGroupingAggregatorFunction.java
@@ -13,6 +13,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
@@ -74,7 +76,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock, timestampsVector);
}
@@ -90,7 +97,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector, timestampsVector);
}
@@ -105,31 +117,45 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- RateLongAggregator.combine(state, groupId, timestamps.getLong(v), values.getLong(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ RateLongAggregator.combine(state, groupId, timestamps.getLong(v), values.getLong(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values,
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- var valuePosition = groupPosition + positionOffset;
- RateLongAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getLong(valuePosition));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ var valuePosition = groupPosition + positionOffset;
+ RateLongAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getLong(valuePosition));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -151,7 +177,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values,
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values,
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -167,6 +193,30 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values,
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ RateLongAggregator.combine(state, groupId, timestamps.getLong(v), values.getLong(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values,
+ LongVector timestamps) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ var valuePosition = groupPosition + positionOffset;
+ RateLongAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getLong(valuePosition));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevDoubleGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevDoubleGroupingAggregatorFunction.java
index bbf1930cf0524..7cf0ab3e7b148 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevDoubleGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevDoubleGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -68,7 +69,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -84,7 +90,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -99,28 +110,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- StdDevDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ StdDevDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- StdDevDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ StdDevDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -141,7 +166,7 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -155,6 +180,27 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleVector value
}
}
+ private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ StdDevDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ StdDevDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevFloatGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevFloatGroupingAggregatorFunction.java
index 818dd28386b9f..e3bbbb5d4d624 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevFloatGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevFloatGroupingAggregatorFunction.java
@@ -15,7 +15,8 @@
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.FloatBlock;
import org.elasticsearch.compute.data.FloatVector;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -70,7 +71,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -86,7 +92,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -101,28 +112,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- StdDevFloatAggregator.combine(state, groupId, values.getFloat(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ StdDevFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- StdDevFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ StdDevFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -143,7 +168,7 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -157,6 +182,27 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatVector values
}
}
+ private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ StdDevFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ StdDevFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevIntGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevIntGroupingAggregatorFunction.java
index d8417d71dc784..b0c780b232fe7 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevIntGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevIntGroupingAggregatorFunction.java
@@ -13,6 +13,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
@@ -68,7 +70,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -84,7 +91,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -99,28 +111,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- StdDevIntAggregator.combine(state, groupId, values.getInt(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ StdDevIntAggregator.combine(state, groupId, values.getInt(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- StdDevIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ StdDevIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -141,7 +167,7 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -155,6 +181,27 @@ private void addRawInput(int positionOffset, IntBlock groups, IntVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ StdDevIntAggregator.combine(state, groupId, values.getInt(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ StdDevIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevLongGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevLongGroupingAggregatorFunction.java
index fc5f061a04620..7e33a0c70c145 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevLongGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/StdDevLongGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -68,7 +69,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -84,7 +90,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -99,28 +110,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- StdDevLongAggregator.combine(state, groupId, values.getLong(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ StdDevLongAggregator.combine(state, groupId, values.getLong(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- StdDevLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ StdDevLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -141,7 +166,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -155,6 +180,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ StdDevLongAggregator.combine(state, groupId, values.getLong(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ StdDevLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumDoubleGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumDoubleGroupingAggregatorFunction.java
index d566756ca3282..303bb3d0ff5dc 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumDoubleGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumDoubleGroupingAggregatorFunction.java
@@ -15,7 +15,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -68,7 +69,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -84,7 +90,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -99,28 +110,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- SumDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SumDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- SumDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ SumDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -141,7 +166,7 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -155,6 +180,27 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleVector value
}
}
+ private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SumDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ SumDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumFloatGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumFloatGroupingAggregatorFunction.java
index e12f91f4451a8..154057db5f462 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumFloatGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumFloatGroupingAggregatorFunction.java
@@ -17,7 +17,8 @@
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.FloatBlock;
import org.elasticsearch.compute.data.FloatVector;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -70,7 +71,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -86,7 +92,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -101,28 +112,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- SumFloatAggregator.combine(state, groupId, values.getFloat(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SumFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- SumFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ SumFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -143,7 +168,7 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -157,6 +182,27 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatVector values
}
}
+ private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SumFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ SumFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumIntGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumIntGroupingAggregatorFunction.java
index 91c04d9370060..9b5cba8cd5a89 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumIntGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumIntGroupingAggregatorFunction.java
@@ -13,6 +13,8 @@
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
@@ -67,7 +69,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -83,7 +90,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -98,28 +110,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- state.set(groupId, SumIntAggregator.combine(state.getOrDefault(groupId), values.getInt(v)));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, SumIntAggregator.combine(state.getOrDefault(groupId), values.getInt(v)));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- state.set(groupId, SumIntAggregator.combine(state.getOrDefault(groupId), values.getInt(groupPosition + positionOffset)));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ state.set(groupId, SumIntAggregator.combine(state.getOrDefault(groupId), values.getInt(groupPosition + positionOffset)));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -140,7 +166,7 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -154,6 +180,27 @@ private void addRawInput(int positionOffset, IntBlock groups, IntVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, SumIntAggregator.combine(state.getOrDefault(groupId), values.getInt(v)));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ state.set(groupId, SumIntAggregator.combine(state.getOrDefault(groupId), values.getInt(groupPosition + positionOffset)));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumLongGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumLongGroupingAggregatorFunction.java
index e53dfa3857753..a2969a4dddaa8 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumLongGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/SumLongGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -67,7 +68,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -83,7 +89,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -98,28 +109,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- state.set(groupId, SumLongAggregator.combine(state.getOrDefault(groupId), values.getLong(v)));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, SumLongAggregator.combine(state.getOrDefault(groupId), values.getLong(v)));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- state.set(groupId, SumLongAggregator.combine(state.getOrDefault(groupId), values.getLong(groupPosition + positionOffset)));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ state.set(groupId, SumLongAggregator.combine(state.getOrDefault(groupId), values.getLong(groupPosition + positionOffset)));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -140,7 +165,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -154,6 +179,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ state.set(groupId, SumLongAggregator.combine(state.getOrDefault(groupId), values.getLong(v)));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ state.set(groupId, SumLongAggregator.combine(state.getOrDefault(groupId), values.getLong(groupPosition + positionOffset)));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopBooleanGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopBooleanGroupingAggregatorFunction.java
index dc0e2831ee3ea..1fa211364cfcc 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopBooleanGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopBooleanGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -71,7 +72,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -87,7 +93,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -102,28 +113,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BooleanBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- TopBooleanAggregator.combine(state, groupId, values.getBoolean(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopBooleanAggregator.combine(state, groupId, values.getBoolean(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BooleanVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- TopBooleanAggregator.combine(state, groupId, values.getBoolean(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ TopBooleanAggregator.combine(state, groupId, values.getBoolean(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -144,7 +169,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock value
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BooleanVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -158,6 +183,27 @@ private void addRawInput(int positionOffset, IntBlock groups, BooleanVector valu
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BooleanBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopBooleanAggregator.combine(state, groupId, values.getBoolean(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BooleanVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ TopBooleanAggregator.combine(state, groupId, values.getBoolean(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopBytesRefGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopBytesRefGroupingAggregatorFunction.java
index aa779dfc4afad..4ab5bb9875107 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopBytesRefGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopBytesRefGroupingAggregatorFunction.java
@@ -14,7 +14,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -72,7 +73,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -88,7 +94,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -103,30 +114,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- TopBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- TopBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ TopBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -148,7 +173,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -163,6 +188,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ TopBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopDoubleGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopDoubleGroupingAggregatorFunction.java
index 68bdee76e48aa..8a2f4aef9cf35 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopDoubleGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopDoubleGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -71,7 +72,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -87,7 +93,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -102,28 +113,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- TopDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- TopDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ TopDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -144,7 +169,7 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -158,6 +183,27 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleVector value
}
}
+ private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ TopDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopFloatGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopFloatGroupingAggregatorFunction.java
index cf1063a02fcbf..d09bf60c82aca 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopFloatGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopFloatGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.FloatBlock;
import org.elasticsearch.compute.data.FloatVector;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -71,7 +72,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -87,7 +93,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -102,28 +113,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- TopFloatAggregator.combine(state, groupId, values.getFloat(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- TopFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ TopFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -144,7 +169,7 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -158,6 +183,27 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatVector values
}
}
+ private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ TopFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopIntGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopIntGroupingAggregatorFunction.java
index 67fa432b87995..786f0660ea06f 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopIntGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopIntGroupingAggregatorFunction.java
@@ -11,6 +11,8 @@
import java.util.List;
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -69,7 +71,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -85,7 +92,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -100,28 +112,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- TopIntAggregator.combine(state, groupId, values.getInt(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopIntAggregator.combine(state, groupId, values.getInt(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- TopIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ TopIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -142,7 +168,7 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -156,6 +182,27 @@ private void addRawInput(int positionOffset, IntBlock groups, IntVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopIntAggregator.combine(state, groupId, values.getInt(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ TopIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopIpGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopIpGroupingAggregatorFunction.java
index eb5631c68d173..3d1137486fb75 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopIpGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopIpGroupingAggregatorFunction.java
@@ -14,7 +14,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -72,7 +73,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -88,7 +94,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -103,30 +114,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- TopIpAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopIpAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- TopIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ TopIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -148,7 +173,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -163,6 +188,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopIpAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ TopIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopLongGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopLongGroupingAggregatorFunction.java
index 58b62c211a0b9..820aa3c6c63e1 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopLongGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/TopLongGroupingAggregatorFunction.java
@@ -11,7 +11,8 @@
import java.util.List;
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -71,7 +72,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -87,7 +93,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -102,28 +113,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- TopLongAggregator.combine(state, groupId, values.getLong(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopLongAggregator.combine(state, groupId, values.getLong(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- TopLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ TopLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -144,7 +169,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -158,6 +183,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ TopLongAggregator.combine(state, groupId, values.getLong(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ TopLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesBooleanGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesBooleanGroupingAggregatorFunction.java
index 772de15468ef3..a928d0908eb8e 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesBooleanGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesBooleanGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -64,7 +65,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -80,7 +86,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -95,28 +106,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BooleanBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- ValuesBooleanAggregator.combine(state, groupId, values.getBoolean(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ ValuesBooleanAggregator.combine(state, groupId, values.getBoolean(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BooleanVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- ValuesBooleanAggregator.combine(state, groupId, values.getBoolean(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ ValuesBooleanAggregator.combine(state, groupId, values.getBoolean(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -137,7 +162,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock value
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BooleanVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -151,6 +176,27 @@ private void addRawInput(int positionOffset, IntBlock groups, BooleanVector valu
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BooleanBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ ValuesBooleanAggregator.combine(state, groupId, values.getBoolean(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BooleanVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ ValuesBooleanAggregator.combine(state, groupId, values.getBoolean(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesBytesRefGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesBytesRefGroupingAggregatorFunction.java
index 93d060889d28f..662c4b445496e 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesBytesRefGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesBytesRefGroupingAggregatorFunction.java
@@ -14,7 +14,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -65,7 +66,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -81,7 +87,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -96,30 +107,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- ValuesBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ ValuesBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- ValuesBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ ValuesBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -141,7 +166,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -156,6 +181,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ ValuesBytesRefAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ ValuesBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesDoubleGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesDoubleGroupingAggregatorFunction.java
index 04984d5c0640a..76c865b33fd09 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesDoubleGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesDoubleGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -64,7 +65,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -80,7 +86,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -95,28 +106,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- ValuesDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ ValuesDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- ValuesDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ ValuesDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -137,7 +162,7 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values
}
}
- private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -151,6 +176,27 @@ private void addRawInput(int positionOffset, IntBlock groups, DoubleVector value
}
}
+ private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ ValuesDoubleAggregator.combine(state, groupId, values.getDouble(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, DoubleVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ ValuesDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesFloatGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesFloatGroupingAggregatorFunction.java
index 1848b9e4f141b..bed9a884ccd10 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesFloatGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesFloatGroupingAggregatorFunction.java
@@ -13,7 +13,8 @@
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.FloatBlock;
import org.elasticsearch.compute.data.FloatVector;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.DriverContext;
@@ -64,7 +65,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -80,7 +86,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -95,28 +106,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- ValuesFloatAggregator.combine(state, groupId, values.getFloat(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ ValuesFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- ValuesFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ ValuesFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -137,7 +162,7 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -151,6 +176,27 @@ private void addRawInput(int positionOffset, IntBlock groups, FloatVector values
}
}
+ private void addRawInput(int positionOffset, IntVector groups, FloatBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ ValuesFloatAggregator.combine(state, groupId, values.getFloat(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, FloatVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ ValuesFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesIntGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesIntGroupingAggregatorFunction.java
index f0878fb085e6a..fb801eadcf5cd 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesIntGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesIntGroupingAggregatorFunction.java
@@ -11,6 +11,8 @@
import java.util.List;
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -62,7 +64,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -78,7 +85,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -93,28 +105,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- ValuesIntAggregator.combine(state, groupId, values.getInt(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ ValuesIntAggregator.combine(state, groupId, values.getInt(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- ValuesIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ ValuesIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -135,7 +161,7 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -149,6 +175,27 @@ private void addRawInput(int positionOffset, IntBlock groups, IntVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ ValuesIntAggregator.combine(state, groupId, values.getInt(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ ValuesIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesLongGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesLongGroupingAggregatorFunction.java
index 00bd36cda2523..061af9fcc9213 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesLongGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/ValuesLongGroupingAggregatorFunction.java
@@ -11,7 +11,8 @@
import java.util.List;
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -64,7 +65,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -80,7 +86,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -95,28 +106,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- ValuesLongAggregator.combine(state, groupId, values.getLong(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ ValuesLongAggregator.combine(state, groupId, values.getLong(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- ValuesLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ ValuesLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -137,7 +162,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -151,6 +176,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ ValuesLongAggregator.combine(state, groupId, values.getLong(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ ValuesLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidCartesianPointDocValuesGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidCartesianPointDocValuesGroupingAggregatorFunction.java
index 9a6328f075bca..a959f808e438b 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidCartesianPointDocValuesGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidCartesianPointDocValuesGroupingAggregatorFunction.java
@@ -17,7 +17,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -74,7 +75,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -90,7 +96,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -105,28 +116,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- SpatialCentroidCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialCentroidCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- SpatialCentroidCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ SpatialCentroidCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -147,7 +172,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -161,6 +186,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialCentroidCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ SpatialCentroidCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidCartesianPointSourceValuesGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidCartesianPointSourceValuesGroupingAggregatorFunction.java
index 1681b1a210d3c..a3593b8152dd7 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidCartesianPointSourceValuesGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidCartesianPointSourceValuesGroupingAggregatorFunction.java
@@ -20,7 +20,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -77,7 +78,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -93,7 +99,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -108,30 +119,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- SpatialCentroidCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialCentroidCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- SpatialCentroidCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ SpatialCentroidCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -153,7 +178,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -168,6 +193,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialCentroidCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ SpatialCentroidCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidGeoPointDocValuesGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidGeoPointDocValuesGroupingAggregatorFunction.java
index 36413308e967f..77a959e654862 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidGeoPointDocValuesGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidGeoPointDocValuesGroupingAggregatorFunction.java
@@ -17,7 +17,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -74,7 +75,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -90,7 +96,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -105,28 +116,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- SpatialCentroidGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialCentroidGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- SpatialCentroidGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ SpatialCentroidGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -147,7 +172,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -161,6 +186,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialCentroidGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ SpatialCentroidGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidGeoPointSourceValuesGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidGeoPointSourceValuesGroupingAggregatorFunction.java
index 935dd8f56887a..fc05c0932f50c 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidGeoPointSourceValuesGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialCentroidGeoPointSourceValuesGroupingAggregatorFunction.java
@@ -20,7 +20,8 @@
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -77,7 +78,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -93,7 +99,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -108,30 +119,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- SpatialCentroidGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialCentroidGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- SpatialCentroidGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ SpatialCentroidGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -153,7 +178,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -168,6 +193,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialCentroidGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ SpatialCentroidGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianPointDocValuesGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianPointDocValuesGroupingAggregatorFunction.java
index 8a9807be22ef5..76f66cf41d569 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianPointDocValuesGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianPointDocValuesGroupingAggregatorFunction.java
@@ -15,6 +15,8 @@
import org.elasticsearch.compute.aggregation.SeenGroupIds;
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
@@ -71,7 +73,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -87,7 +94,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -102,28 +114,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- SpatialExtentCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialExtentCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- SpatialExtentCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ SpatialExtentCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -144,7 +170,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -158,6 +184,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialExtentCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ SpatialExtentCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianPointSourceValuesGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianPointSourceValuesGroupingAggregatorFunction.java
index 49198bbd74c69..3c1159eb0de11 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianPointSourceValuesGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianPointSourceValuesGroupingAggregatorFunction.java
@@ -18,6 +18,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -72,7 +74,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -88,7 +95,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -103,30 +115,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- SpatialExtentCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialExtentCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- SpatialExtentCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ SpatialExtentCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -148,7 +174,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -163,6 +189,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialExtentCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ SpatialExtentCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianShapeDocValuesGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianShapeDocValuesGroupingAggregatorFunction.java
index ca6b567810ae7..7057281c2ec6f 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianShapeDocValuesGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianShapeDocValuesGroupingAggregatorFunction.java
@@ -15,6 +15,8 @@
import org.elasticsearch.compute.aggregation.SeenGroupIds;
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -69,7 +71,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -85,7 +92,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -100,27 +112,34 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- int[] valuesArray = new int[valuesEnd - valuesStart];
- for (int v = valuesStart; v < valuesEnd; v++) {
- valuesArray[v-valuesStart] = values.getInt(v);
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ int[] valuesArray = new int[valuesEnd - valuesStart];
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ valuesArray[v-valuesStart] = values.getInt(v);
+ }
+ SpatialExtentCartesianShapeDocValuesAggregator.combine(state, groupId, valuesArray);
}
- SpatialExtentCartesianShapeDocValuesAggregator.combine(state, groupId, valuesArray);
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
// This type does not support vectors because all values are multi-valued
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -143,7 +162,27 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values) {
+ // This type does not support vectors because all values are multi-valued
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ int[] valuesArray = new int[valuesEnd - valuesStart];
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ valuesArray[v-valuesStart] = values.getInt(v);
+ }
+ SpatialExtentCartesianShapeDocValuesAggregator.combine(state, groupId, valuesArray);
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
// This type does not support vectors because all values are multi-valued
}
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianShapeSourceValuesGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianShapeSourceValuesGroupingAggregatorFunction.java
index bf7e95c4f040f..21241efbf3198 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianShapeSourceValuesGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentCartesianShapeSourceValuesGroupingAggregatorFunction.java
@@ -18,6 +18,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -72,7 +74,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -88,7 +95,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -103,30 +115,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- SpatialExtentCartesianShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialExtentCartesianShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- SpatialExtentCartesianShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ SpatialExtentCartesianShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -148,7 +174,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -163,6 +189,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialExtentCartesianShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ SpatialExtentCartesianShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoPointDocValuesGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoPointDocValuesGroupingAggregatorFunction.java
index 71abb7296232a..387ed0abc34bb 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoPointDocValuesGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoPointDocValuesGroupingAggregatorFunction.java
@@ -15,6 +15,8 @@
import org.elasticsearch.compute.aggregation.SeenGroupIds;
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
@@ -73,7 +75,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -89,7 +96,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -104,28 +116,42 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- SpatialExtentGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(v));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialExtentGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(v));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- SpatialExtentGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ SpatialExtentGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -146,7 +172,7 @@ private void addRawInput(int positionOffset, IntBlock groups, LongBlock values)
}
}
- private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -160,6 +186,27 @@ private void addRawInput(int positionOffset, IntBlock groups, LongVector values)
}
}
+ private void addRawInput(int positionOffset, IntVector groups, LongBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialExtentGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(v));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, LongVector values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ SpatialExtentGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoPointSourceValuesGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoPointSourceValuesGroupingAggregatorFunction.java
index 437c1f017ebc9..9d9c10902ada6 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoPointSourceValuesGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoPointSourceValuesGroupingAggregatorFunction.java
@@ -18,6 +18,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -74,7 +76,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -90,7 +97,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -105,30 +117,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- SpatialExtentGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialExtentGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- SpatialExtentGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ SpatialExtentGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -150,7 +176,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -165,6 +191,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialExtentGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ SpatialExtentGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoShapeDocValuesGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoShapeDocValuesGroupingAggregatorFunction.java
index b0a01d268280c..82553910e1587 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoShapeDocValuesGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoShapeDocValuesGroupingAggregatorFunction.java
@@ -15,6 +15,8 @@
import org.elasticsearch.compute.aggregation.SeenGroupIds;
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -71,7 +73,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -87,7 +94,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -102,27 +114,34 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- int[] valuesArray = new int[valuesEnd - valuesStart];
- for (int v = valuesStart; v < valuesEnd; v++) {
- valuesArray[v-valuesStart] = values.getInt(v);
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ int[] valuesArray = new int[valuesEnd - valuesStart];
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ valuesArray[v-valuesStart] = values.getInt(v);
+ }
+ SpatialExtentGeoShapeDocValuesAggregator.combine(state, groupId, valuesArray);
}
- SpatialExtentGeoShapeDocValuesAggregator.combine(state, groupId, valuesArray);
}
}
- private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
// This type does not support vectors because all values are multi-valued
}
- private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@@ -145,7 +164,27 @@ private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
}
}
- private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntVector values) {
+ // This type does not support vectors because all values are multi-valued
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntBlock values) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ int[] valuesArray = new int[valuesEnd - valuesStart];
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ valuesArray[v-valuesStart] = values.getInt(v);
+ }
+ SpatialExtentGeoShapeDocValuesAggregator.combine(state, groupId, valuesArray);
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, IntVector values) {
// This type does not support vectors because all values are multi-valued
}
diff --git a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoShapeSourceValuesGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoShapeSourceValuesGroupingAggregatorFunction.java
index 029e935f4765e..ccab0870e206d 100644
--- a/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoShapeSourceValuesGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/spatial/SpatialExtentGeoShapeSourceValuesGroupingAggregatorFunction.java
@@ -18,6 +18,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -74,7 +76,12 @@ public GroupingAggregatorFunction.AddInput prepareProcessPage(SeenGroupIds seenG
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -90,7 +97,12 @@ public void close() {
}
return new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesVector);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesVector);
}
@@ -105,30 +117,44 @@ public void close() {
};
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- if (values.isNull(groupPosition + positionOffset)) {
+ if (groups.isNull(groupPosition)) {
continue;
}
- int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
- int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
- for (int v = valuesStart; v < valuesEnd; v++) {
- SpatialExtentGeoShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialExtentGeoShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
}
}
}
- private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
- int groupId = groups.getInt(groupPosition);
- SpatialExtentGeoShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = groups.getInt(g);
+ SpatialExtentGeoShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -150,7 +176,7 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock valu
}
}
- private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector values) {
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
@@ -165,6 +191,29 @@ private void addRawInput(int positionOffset, IntBlock groups, BytesRefVector val
}
}
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ if (values.isNull(groupPosition + positionOffset)) {
+ continue;
+ }
+ int valuesStart = values.getFirstValueIndex(groupPosition + positionOffset);
+ int valuesEnd = valuesStart + values.getValueCount(groupPosition + positionOffset);
+ for (int v = valuesStart; v < valuesEnd; v++) {
+ SpatialExtentGeoShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(v, scratch));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntVector groups, BytesRefVector values) {
+ BytesRef scratch = new BytesRef();
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ int groupId = groups.getInt(groupPosition);
+ SpatialExtentGeoShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
+ }
+ }
+
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/CountGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/CountGroupingAggregatorFunction.java
index 124fb5a1745bd..611118d03872b 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/CountGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/CountGroupingAggregatorFunction.java
@@ -11,7 +11,8 @@
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
@@ -68,7 +69,12 @@ public AddInput prepareProcessPage(SeenGroupIds seenGroupIds, Page page) {
}
return new AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(positionOffset, groupIds, valuesBlock);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(positionOffset, groupIds, valuesBlock);
}
@@ -84,7 +90,12 @@ public void close() {}
}
return new AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addRawInput(groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
addRawInput(groupIds);
}
@@ -109,7 +120,25 @@ private void addRawInput(int positionOffset, IntVector groups, Block values) {
}
}
- private void addRawInput(int positionOffset, IntBlock groups, Block values) {
+ private void addRawInput(int positionOffset, IntArrayBlock groups, Block values) {
+ int position = positionOffset;
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++, position++) {
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = Math.toIntExact(groups.getInt(g));
+ if (values.isNull(position)) {
+ continue;
+ }
+ state.increment(groupId, values.getValueCount(position));
+ }
+ }
+ }
+
+ private void addRawInput(int positionOffset, IntBigArrayBlock groups, Block values) {
int position = positionOffset;
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++, position++) {
if (groups.isNull(groupPosition)) {
@@ -140,7 +169,24 @@ private void addRawInput(IntVector groups) {
/**
* This method is called for count all.
*/
- private void addRawInput(IntBlock groups) {
+ private void addRawInput(IntArrayBlock groups) {
+ for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
+ if (groups.isNull(groupPosition)) {
+ continue;
+ }
+ int groupStart = groups.getFirstValueIndex(groupPosition);
+ int groupEnd = groupStart + groups.getValueCount(groupPosition);
+ for (int g = groupStart; g < groupEnd; g++) {
+ int groupId = Math.toIntExact(groups.getInt(g));
+ state.increment(groupId, 1);
+ }
+ }
+ }
+
+ /**
+ * This method is called for count all.
+ */
+ private void addRawInput(IntBigArrayBlock groups) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/FilteredGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/FilteredGroupingAggregatorFunction.java
index f34129c1116e4..8b7734fe33ab7 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/FilteredGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/FilteredGroupingAggregatorFunction.java
@@ -10,6 +10,8 @@
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -56,7 +58,21 @@ public AddInput prepareProcessPage(SeenGroupIds seenGroupIds, Page page) {
private record FilteredAddInput(BooleanVector mask, AddInput nextAdd, int positionCount) implements AddInput {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntVector groupIds) {
+ addBlock(positionOffset, groupIds.asBlock());
+ }
+
+ private void addBlock(int positionOffset, IntBlock groupIds) {
if (positionOffset == 0) {
try (IntBlock filtered = groupIds.keepMask(mask)) {
nextAdd.add(positionOffset, filtered);
@@ -73,11 +89,6 @@ public void add(int positionOffset, IntBlock groupIds) {
}
}
- @Override
- public void add(int positionOffset, IntVector groupIds) {
- add(positionOffset, groupIds.asBlock());
- }
-
@Override
public void close() {
Releasables.close(mask, nextAdd);
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/FromPartialGroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/FromPartialGroupingAggregatorFunction.java
index 1706b8c023995..19012cabce5a1 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/FromPartialGroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/FromPartialGroupingAggregatorFunction.java
@@ -10,6 +10,8 @@
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.CompositeBlock;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -46,6 +48,18 @@ public void add(int positionOffset, IntBlock groupIds) {
throw new IllegalStateException("Intermediate group id must not have nulls");
}
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ assert false : "Intermediate group id must not have nulls";
+ throw new IllegalStateException("Intermediate group id must not have nulls");
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ assert false : "Intermediate group id must not have nulls";
+ throw new IllegalStateException("Intermediate group id must not have nulls");
+ }
+
@Override
public void add(int positionOffset, IntVector groupIds) {
addIntermediateInput(positionOffset, groupIds, page);
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/GroupingAggregator.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/GroupingAggregator.java
index 268ac3ba32678..e0d82b1f145b8 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/GroupingAggregator.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/GroupingAggregator.java
@@ -9,6 +9,8 @@
import org.elasticsearch.compute.Describable;
import org.elasticsearch.compute.data.Block;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -45,6 +47,16 @@ public void add(int positionOffset, IntBlock groupIds) {
throw new IllegalStateException("Intermediate group id must not have nulls");
}
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ throw new IllegalStateException("Intermediate group id must not have nulls");
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ throw new IllegalStateException("Intermediate group id must not have nulls");
+ }
+
@Override
public void add(int positionOffset, IntVector groupIds) {
aggregatorFunction.addIntermediateInput(positionOffset, groupIds, page);
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/GroupingAggregatorFunction.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/GroupingAggregatorFunction.java
index d5d432655620f..556902174f213 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/GroupingAggregatorFunction.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/GroupingAggregatorFunction.java
@@ -8,8 +8,12 @@
package org.elasticsearch.compute.aggregation;
import org.elasticsearch.compute.data.Block;
+import org.elasticsearch.compute.data.ConstantNullBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
+import org.elasticsearch.compute.data.IntVectorBlock;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.data.Vector;
import org.elasticsearch.core.Releasable;
@@ -48,12 +52,40 @@ interface AddInput extends Releasable {
* be skipped entirely or the groupIds block could contain a
* {@code null} value at that position.
*
+ *
+ * This method delegates the processing to the other overloads for specific groupIds block types.
+ *
* @param positionOffset offset into the {@link Page} used to build this
* {@link AddInput} of these ids
* @param groupIds {@link Block} of group id, some of which may be null
* or multivalued
*/
- void add(int positionOffset, IntBlock groupIds);
+ default void add(int positionOffset, IntBlock groupIds) {
+ switch (groupIds) {
+ case ConstantNullBlock ignored:
+ // No-op
+ break;
+ case IntVectorBlock b:
+ add(positionOffset, b.asVector());
+ break;
+ case IntArrayBlock b:
+ add(positionOffset, b);
+ break;
+ case IntBigArrayBlock b:
+ add(positionOffset, b);
+ break;
+ }
+ }
+
+ /**
+ * Implementation of {@link #add(int, IntBlock)} for a specific type of block.
+ */
+ void add(int positionOffset, IntArrayBlock groupIds);
+
+ /**
+ * Implementation of {@link #add(int, IntBlock)} for a specific type of block.
+ */
+ void add(int positionOffset, IntBigArrayBlock groupIds);
/**
* Send a batch of group ids to the aggregator. The {@code groupIds}
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/table/BlockHashRowInTableLookup.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/table/BlockHashRowInTableLookup.java
index c198853bb36ad..f00606f67548c 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/table/BlockHashRowInTableLookup.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/table/BlockHashRowInTableLookup.java
@@ -12,6 +12,8 @@
import org.elasticsearch.compute.aggregation.blockhash.BlockHash;
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.BlockFactory;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
@@ -40,7 +42,23 @@ final class BlockHashRowInTableLookup extends RowInTableLookup {
private int lastOrd = -1;
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ for (int p = 0; p < groupIds.getPositionCount(); p++) {
+ int first = groupIds.getFirstValueIndex(p);
+ int end = groupIds.getValueCount(p) + first;
+ for (int i = first; i < end; i++) {
+ int ord = groupIds.getInt(i);
+ if (ord != lastOrd + 1) {
+ // TODO double check these errors over REST once we have LOOKUP
+ throw new IllegalArgumentException("found a duplicate row");
+ }
+ lastOrd = ord;
+ }
+ }
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
for (int p = 0; p < groupIds.getPositionCount(); p++) {
int first = groupIds.getFirstValueIndex(p);
int end = groupIds.getValueCount(p) + first;
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/ConstantNullBlock.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/ConstantNullBlock.java
index 94cd0bf9ddd22..2ed905f4299ca 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/ConstantNullBlock.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/ConstantNullBlock.java
@@ -19,7 +19,7 @@
/**
* Block implementation representing a constant null value.
*/
-final class ConstantNullBlock extends AbstractNonThreadSafeRefCounted
+public final class ConstantNullBlock extends AbstractNonThreadSafeRefCounted
implements
BooleanBlock,
IntBlock,
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/X-ArrayBlock.java.st b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/X-ArrayBlock.java.st
index 3b3b4c5fe3d36..5ebfc7bd4f9f6 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/X-ArrayBlock.java.st
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/data/X-ArrayBlock.java.st
@@ -29,7 +29,7 @@ $if(BytesRef)$
$endif$
* This class is generated. Edit {@code X-ArrayBlock.java.st} instead.
*/
-final class $Type$ArrayBlock extends AbstractArrayBlock implements $Type$Block {
+public final class $Type$ArrayBlock extends AbstractArrayBlock implements $Type$Block {
static final long BASE_RAM_BYTES_USED = RamUsageEstimator.shallowSizeOfInstance($Type$ArrayBlock.class);
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/HashAggregationOperator.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/HashAggregationOperator.java
index 75d5a5bc51323..2c6f9312e64bc 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/HashAggregationOperator.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/HashAggregationOperator.java
@@ -20,7 +20,8 @@
import org.elasticsearch.compute.aggregation.GroupingAggregatorFunction;
import org.elasticsearch.compute.aggregation.blockhash.BlockHash;
import org.elasticsearch.compute.data.Block;
-import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.core.Releasables;
@@ -145,17 +146,21 @@ class AddInput implements GroupingAggregatorFunction.AddInput {
long aggStart;
@Override
- public void add(int positionOffset, IntBlock groupIds) {
- IntVector groupIdsVector = groupIds.asVector();
- if (groupIdsVector != null) {
- add(positionOffset, groupIdsVector);
- } else {
- startAggEndHash();
- for (GroupingAggregatorFunction.AddInput p : prepared) {
- p.add(positionOffset, groupIds);
- }
- end();
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ startAggEndHash();
+ for (GroupingAggregatorFunction.AddInput p : prepared) {
+ p.add(positionOffset, groupIds);
+ }
+ end();
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ startAggEndHash();
+ for (GroupingAggregatorFunction.AddInput p : prepared) {
+ p.add(positionOffset, groupIds);
}
+ end();
}
@Override
diff --git a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/GroupingAggregatorFunctionTestCase.java b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/GroupingAggregatorFunctionTestCase.java
index 0dccce6040e64..9b8246be49799 100644
--- a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/GroupingAggregatorFunctionTestCase.java
+++ b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/GroupingAggregatorFunctionTestCase.java
@@ -12,13 +12,17 @@
import org.elasticsearch.common.util.BitArray;
import org.elasticsearch.compute.ConstantBooleanExpressionEvaluator;
import org.elasticsearch.compute.aggregation.blockhash.BlockHash;
+import org.elasticsearch.compute.aggregation.blockhash.BlockHashWrapper;
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.BlockFactory;
+import org.elasticsearch.compute.data.BlockTypeRandomizer;
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.FloatBlock;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
@@ -37,6 +41,7 @@
import org.elasticsearch.compute.test.TestBlockFactory;
import org.elasticsearch.core.Nullable;
import org.elasticsearch.core.Releasables;
+import org.elasticsearch.index.analysis.AnalysisRegistry;
import org.elasticsearch.xpack.esql.core.type.DataType;
import org.hamcrest.Matcher;
@@ -45,6 +50,7 @@
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.function.Function;
+import java.util.function.Supplier;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
@@ -102,7 +108,7 @@ private Operator.OperatorFactory simpleWithMode(
if (randomBoolean()) {
supplier = chunkGroups(emitChunkSize, supplier);
}
- return new HashAggregationOperator.HashAggregationOperatorFactory(
+ return new RandomizingHashAggregationOperatorFactory(
List.of(new BlockHash.GroupSpec(0, ElementType.LONG)),
mode,
List.of(supplier.groupingAggregatorFactory(mode, channels(mode))),
@@ -648,8 +654,7 @@ public AddInput prepareProcessPage(SeenGroupIds ignoredSeenGroupIds, Page page)
return seen;
}, page);
- @Override
- public void add(int positionOffset, IntBlock groupIds) {
+ private void addBlock(int positionOffset, IntBlock groupIds) {
for (int offset = 0; offset < groupIds.getPositionCount(); offset += emitChunkSize) {
try (IntBlock.Builder builder = blockFactory().newIntBlockBuilder(emitChunkSize)) {
int endP = Math.min(groupIds.getPositionCount(), offset + emitChunkSize);
@@ -682,6 +687,16 @@ public void add(int positionOffset, IntBlock groupIds) {
}
}
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
@Override
public void add(int positionOffset, IntVector groupIds) {
int[] chunk = new int[emitChunkSize];
@@ -766,4 +781,84 @@ public String describe() {
};
}
+ /**
+ * Custom {@link HashAggregationOperator.HashAggregationOperatorFactory} implementation that
+ * randomizes the GroupIds block type passed to AddInput.
+ *
+ * This helps testing the different overloads of
+ * {@link org.elasticsearch.compute.aggregation.GroupingAggregatorFunction.AddInput#add}
+ *
+ */
+ private record RandomizingHashAggregationOperatorFactory(
+ List groups,
+ AggregatorMode aggregatorMode,
+ List aggregators,
+ int maxPageSize,
+ AnalysisRegistry analysisRegistry
+ ) implements Operator.OperatorFactory {
+
+ @Override
+ public Operator get(DriverContext driverContext) {
+ Supplier blockHashSupplier = () -> {
+ BlockHash blockHash = groups.stream().anyMatch(BlockHash.GroupSpec::isCategorize)
+ ? BlockHash.buildCategorizeBlockHash(
+ groups,
+ aggregatorMode,
+ driverContext.blockFactory(),
+ analysisRegistry,
+ maxPageSize
+ )
+ : BlockHash.build(groups, driverContext.blockFactory(), maxPageSize, false);
+
+ return new BlockHashWrapper(driverContext.blockFactory(), blockHash) {
+ @Override
+ public void add(Page page, GroupingAggregatorFunction.AddInput addInput) {
+ blockHash.add(page, new GroupingAggregatorFunction.AddInput() {
+ @Override
+ public void add(int positionOffset, IntBlock groupIds) {
+ IntBlock newGroupIds = aggregatorMode.isInputPartial()
+ ? groupIds
+ : BlockTypeRandomizer.randomizeBlockType(groupIds);
+ addInput.add(positionOffset, newGroupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ add(positionOffset, (IntBlock) groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ add(positionOffset, (IntBlock) groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntVector groupIds) {
+ add(positionOffset, groupIds.asBlock());
+ }
+
+ @Override
+ public void close() {
+ addInput.close();
+ }
+ });
+ }
+ };
+ };
+
+ return new HashAggregationOperator(aggregators, blockHashSupplier, driverContext);
+ }
+
+ @Override
+ public String describe() {
+ return new HashAggregationOperator.HashAggregationOperatorFactory(
+ groups,
+ aggregatorMode,
+ aggregators,
+ maxPageSize,
+ analysisRegistry
+ ).describe();
+ }
+ }
+
}
diff --git a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/AddPageTests.java b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/AddPageTests.java
index fb8b01e68c6cc..c9628cc8074de 100644
--- a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/AddPageTests.java
+++ b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/AddPageTests.java
@@ -11,6 +11,8 @@
import org.elasticsearch.compute.aggregation.GroupingAggregatorFunction;
import org.elasticsearch.compute.data.BlockFactory;
import org.elasticsearch.compute.data.BlockFactoryTests;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.test.ESTestCase;
@@ -156,8 +158,7 @@ Added added(int positionOffset, int... ords) {
private class TestAddInput implements GroupingAggregatorFunction.AddInput {
private final List added = new ArrayList<>();
- @Override
- public void add(int positionOffset, IntBlock groupIds) {
+ private void addBlock(int positionOffset, IntBlock groupIds) {
List> result = new ArrayList<>(groupIds.getPositionCount());
for (int p = 0; p < groupIds.getPositionCount(); p++) {
int valueCount = groupIds.getValueCount(p);
@@ -172,9 +173,19 @@ public void add(int positionOffset, IntBlock groupIds) {
added.add(new Added(positionOffset, result));
}
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
@Override
public void add(int positionOffset, IntVector groupIds) {
- add(positionOffset, groupIds.asBlock());
+ addBlock(positionOffset, groupIds.asBlock());
}
@Override
@@ -187,7 +198,12 @@ private class CountingAddInput implements GroupingAggregatorFunction.AddInput {
private int count;
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ count++;
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
count++;
}
diff --git a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashTests.java b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashTests.java
index ed86969a62227..4d77cd9aa234e 100644
--- a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashTests.java
+++ b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashTests.java
@@ -19,6 +19,8 @@
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
@@ -1276,7 +1278,13 @@ public void close() {
) {
hash1.add(page, new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ groupIds.incRef();
+ output1.add(new Output(positionOffset, groupIds, null));
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
groupIds.incRef();
output1.add(new Output(positionOffset, groupIds, null));
}
@@ -1294,7 +1302,13 @@ public void close() {
});
hash2.add(page, new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ groupIds.incRef();
+ output2.add(new Output(positionOffset, groupIds, null));
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
groupIds.incRef();
output2.add(new Output(positionOffset, groupIds, null));
}
@@ -1380,7 +1394,12 @@ public void testTimeSeriesBlockHash() throws Exception {
Holder ords1 = new Holder<>();
hash1.add(page, new GroupingAggregatorFunction.AddInput() {
@Override
- public void add(int positionOffset, IntBlock groupIds) {
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ throw new AssertionError("time-series block hash should emit a vector");
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
throw new AssertionError("time-series block hash should emit a vector");
}
@@ -1397,8 +1416,7 @@ public void close() {
});
Holder ords2 = new Holder<>();
hash2.add(page, new GroupingAggregatorFunction.AddInput() {
- @Override
- public void add(int positionOffset, IntBlock groupIds) {
+ private void addBlock(int positionOffset, IntBlock groupIds) {
// TODO: check why PackedValuesBlockHash doesn't emit a vector?
IntVector vector = groupIds.asVector();
assertNotNull("should emit a vector", vector);
@@ -1406,6 +1424,16 @@ public void add(int positionOffset, IntBlock groupIds) {
ords2.set(vector);
}
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
@Override
public void add(int positionOffset, IntVector groupIds) {
groupIds.incRef();
@@ -1498,8 +1526,7 @@ private BlockHash buildBlockHash(int emitBatchSize, Block... values) {
static void hash(boolean collectKeys, BlockHash blockHash, Consumer callback, Block... values) {
blockHash.add(new Page(values), new GroupingAggregatorFunction.AddInput() {
- @Override
- public void add(int positionOffset, IntBlock groupIds) {
+ private void addBlock(int positionOffset, IntBlock groupIds) {
OrdsAndKeys result = new OrdsAndKeys(
blockHash.toString(),
positionOffset,
@@ -1532,9 +1559,19 @@ public void add(int positionOffset, IntBlock groupIds) {
}
}
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
@Override
public void add(int positionOffset, IntVector groupIds) {
- add(positionOffset, groupIds.asBlock());
+ addBlock(positionOffset, groupIds.asBlock());
}
@Override
diff --git a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashWrapper.java b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashWrapper.java
new file mode 100644
index 0000000000000..0c93b6ff111cc
--- /dev/null
+++ b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashWrapper.java
@@ -0,0 +1,69 @@
+/*
+ * 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.compute.aggregation.blockhash;
+
+import org.elasticsearch.common.unit.ByteSizeValue;
+import org.elasticsearch.common.util.BigArrays;
+import org.elasticsearch.common.util.BitArray;
+import org.elasticsearch.compute.aggregation.GroupingAggregatorFunction;
+import org.elasticsearch.compute.data.Block;
+import org.elasticsearch.compute.data.BlockFactory;
+import org.elasticsearch.compute.data.IntBlock;
+import org.elasticsearch.compute.data.IntVector;
+import org.elasticsearch.compute.data.Page;
+import org.elasticsearch.core.ReleasableIterator;
+
+/**
+ * A test BlockHash that wraps another one.
+ *
+ * Its methods can be overridden to implement custom behaviours or checks.
+ *
+ */
+public abstract class BlockHashWrapper extends BlockHash {
+ protected BlockHash blockHash;
+
+ public BlockHashWrapper(BlockFactory blockFactory, BlockHash blockHash) {
+ super(blockFactory);
+ this.blockHash = blockHash;
+ }
+
+ @Override
+ public void add(Page page, GroupingAggregatorFunction.AddInput addInput) {
+ blockHash.add(page, addInput);
+ }
+
+ @Override
+ public ReleasableIterator lookup(Page page, ByteSizeValue targetBlockSize) {
+ return blockHash.lookup(page, targetBlockSize);
+ }
+
+ @Override
+ public Block[] getKeys() {
+ return blockHash.getKeys();
+ }
+
+ @Override
+ public IntVector nonEmpty() {
+ return blockHash.nonEmpty();
+ }
+
+ @Override
+ public BitArray seenGroupIds(BigArrays bigArrays) {
+ return blockHash.seenGroupIds(bigArrays);
+ }
+
+ @Override
+ public void close() {
+ blockHash.close();
+ }
+
+ @Override
+ public String toString() {
+ return blockHash.toString();
+ }
+}
diff --git a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/CategorizeBlockHashTests.java b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/CategorizeBlockHashTests.java
index b1319e65e0989..842952f9ef8bd 100644
--- a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/CategorizeBlockHashTests.java
+++ b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/CategorizeBlockHashTests.java
@@ -25,6 +25,8 @@
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
import org.elasticsearch.compute.data.ElementType;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntBigArrayBlock;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
@@ -99,8 +101,7 @@ public void testCategorizeRaw() {
try (var hash = new CategorizeBlockHash(blockFactory, 0, AggregatorMode.SINGLE, analysisRegistry)) {
for (int i = randomInt(2); i < 3; i++) {
hash.add(page, new GroupingAggregatorFunction.AddInput() {
- @Override
- public void add(int positionOffset, IntBlock groupIds) {
+ private void addBlock(int positionOffset, IntBlock groupIds) {
assertEquals(groupIds.getPositionCount(), positions);
assertEquals(1, groupIds.getInt(0));
@@ -115,9 +116,19 @@ public void add(int positionOffset, IntBlock groupIds) {
}
}
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
@Override
public void add(int positionOffset, IntVector groupIds) {
- add(positionOffset, groupIds.asBlock());
+ addBlock(positionOffset, groupIds.asBlock());
}
@Override
@@ -162,8 +173,7 @@ public void testCategorizeRawMultivalue() {
try (var hash = new CategorizeBlockHash(blockFactory, 0, AggregatorMode.SINGLE, analysisRegistry)) {
for (int i = randomInt(2); i < 3; i++) {
hash.add(page, new GroupingAggregatorFunction.AddInput() {
- @Override
- public void add(int positionOffset, IntBlock groupIds) {
+ private void addBlock(int positionOffset, IntBlock groupIds) {
assertEquals(groupIds.getPositionCount(), positions);
assertThat(groupIds.getFirstValueIndex(0), equalTo(0));
@@ -185,9 +195,19 @@ public void add(int positionOffset, IntBlock groupIds) {
}
}
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
@Override
public void add(int positionOffset, IntVector groupIds) {
- add(positionOffset, groupIds.asBlock());
+ addBlock(positionOffset, groupIds.asBlock());
}
@Override
@@ -243,8 +263,7 @@ public void testCategorizeIntermediate() {
BlockHash rawHash2 = new CategorizeBlockHash(blockFactory, 0, AggregatorMode.INITIAL, analysisRegistry);
) {
rawHash1.add(page1, new GroupingAggregatorFunction.AddInput() {
- @Override
- public void add(int positionOffset, IntBlock groupIds) {
+ private void addBlock(int positionOffset, IntBlock groupIds) {
assertEquals(groupIds.getPositionCount(), positions1);
assertEquals(1, groupIds.getInt(0));
assertEquals(2, groupIds.getInt(1));
@@ -258,9 +277,19 @@ public void add(int positionOffset, IntBlock groupIds) {
}
}
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
@Override
public void add(int positionOffset, IntVector groupIds) {
- add(positionOffset, groupIds.asBlock());
+ addBlock(positionOffset, groupIds.asBlock());
}
@Override
@@ -271,8 +300,7 @@ public void close() {
intermediatePage1 = new Page(rawHash1.getKeys()[0]);
rawHash2.add(page2, new GroupingAggregatorFunction.AddInput() {
- @Override
- public void add(int positionOffset, IntBlock groupIds) {
+ private void addBlock(int positionOffset, IntBlock groupIds) {
assertEquals(groupIds.getPositionCount(), positions2);
assertEquals(1, groupIds.getInt(0));
assertEquals(2, groupIds.getInt(1));
@@ -281,9 +309,19 @@ public void add(int positionOffset, IntBlock groupIds) {
assertEquals(3, groupIds.getInt(4));
}
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
@Override
public void add(int positionOffset, IntVector groupIds) {
- add(positionOffset, groupIds.asBlock());
+ addBlock(positionOffset, groupIds.asBlock());
}
@Override
@@ -299,8 +337,7 @@ public void close() {
try (var intermediateHash = new CategorizeBlockHash(blockFactory, 0, AggregatorMode.FINAL, null)) {
intermediateHash.add(intermediatePage1, new GroupingAggregatorFunction.AddInput() {
- @Override
- public void add(int positionOffset, IntBlock groupIds) {
+ private void addBlock(int positionOffset, IntBlock groupIds) {
List values = IntStream.range(0, groupIds.getPositionCount())
.map(groupIds::getInt)
.boxed()
@@ -312,9 +349,19 @@ public void add(int positionOffset, IntBlock groupIds) {
}
}
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
@Override
public void add(int positionOffset, IntVector groupIds) {
- add(positionOffset, groupIds.asBlock());
+ addBlock(positionOffset, groupIds.asBlock());
}
@Override
@@ -325,8 +372,7 @@ public void close() {
for (int i = randomInt(2); i < 3; i++) {
intermediateHash.add(intermediatePage2, new GroupingAggregatorFunction.AddInput() {
- @Override
- public void add(int positionOffset, IntBlock groupIds) {
+ private void addBlock(int positionOffset, IntBlock groupIds) {
List values = IntStream.range(0, groupIds.getPositionCount())
.map(groupIds::getInt)
.boxed()
@@ -336,9 +382,19 @@ public void add(int positionOffset, IntBlock groupIds) {
assertEquals(List.of(3, 1, 4), values);
}
+ @Override
+ public void add(int positionOffset, IntArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
+ @Override
+ public void add(int positionOffset, IntBigArrayBlock groupIds) {
+ addBlock(positionOffset, groupIds);
+ }
+
@Override
public void add(int positionOffset, IntVector groupIds) {
- add(positionOffset, groupIds.asBlock());
+ addBlock(positionOffset, groupIds.asBlock());
}
@Override
diff --git a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/data/BlockTypeRandomizer.java b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/data/BlockTypeRandomizer.java
new file mode 100644
index 0000000000000..9640cbb2b44ea
--- /dev/null
+++ b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/data/BlockTypeRandomizer.java
@@ -0,0 +1,102 @@
+/*
+ * 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.compute.data;
+
+import org.elasticsearch.compute.test.TestBlockFactory;
+
+import java.util.BitSet;
+
+import static org.elasticsearch.test.ESTestCase.randomIntBetween;
+
+public class BlockTypeRandomizer {
+ private BlockTypeRandomizer() {}
+
+ /**
+ * Returns a block with the same contents, but with a randomized type (Constant, vector, big-array...).
+ *
+ * The new block uses a non-breaking block builder, and doesn't increment the circuit breaking.
+ * This is done to avoid randomly using more memory in tests that expect a deterministic memory usage.
+ *
+ */
+ public static IntBlock randomizeBlockType(IntBlock block) {
+ // Just to track the randomization
+ int classCount = 4;
+
+ BlockFactory blockFactory = TestBlockFactory.getNonBreakingInstance();
+
+ //
+ // ConstantNullBlock. It requires all positions to be null
+ //
+ if (randomIntBetween(0, --classCount) == 0 && block.areAllValuesNull()) {
+ if (block instanceof ConstantNullBlock) {
+ return block;
+ }
+ return new ConstantNullBlock(block.getPositionCount(), blockFactory);
+ }
+
+ //
+ // IntVectorBlock. It doesn't allow nulls or multivalues
+ //
+ if (randomIntBetween(0, --classCount) == 0 && block.doesHaveMultivaluedFields() == false && block.mayHaveNulls() == false) {
+ if (block instanceof IntVectorBlock) {
+ return block;
+ }
+
+ int[] values = new int[block.getPositionCount()];
+ for (int i = 0; i < values.length; i++) {
+ values[i] = block.getInt(i);
+ }
+
+ return new IntVectorBlock(new IntArrayVector(values, block.getPositionCount(), blockFactory));
+ }
+
+ // Both IntArrayBlock and IntBigArrayBlock need a nullsBitSet and a firstValueIndexes int[]
+ int[] firstValueIndexes = new int[block.getPositionCount() + 1];
+ BitSet nullsMask = new BitSet(block.getPositionCount());
+ for (int i = 0; i < block.getPositionCount(); i++) {
+ firstValueIndexes[i] = block.getFirstValueIndex(i);
+
+ if (block.isNull(i)) {
+ nullsMask.set(i);
+ }
+ }
+ int totalValues = block.getFirstValueIndex(block.getPositionCount() - 1) + block.getValueCount(block.getPositionCount() - 1);
+ firstValueIndexes[firstValueIndexes.length - 1] = totalValues;
+
+ //
+ // IntArrayBlock
+ //
+ if (randomIntBetween(0, --classCount) == 0) {
+ if (block instanceof IntArrayBlock) {
+ return block;
+ }
+
+ int[] values = new int[totalValues];
+ for (int i = 0; i < values.length; i++) {
+ values[i] = block.getInt(i);
+ }
+
+ return new IntArrayBlock(values, block.getPositionCount(), firstValueIndexes, nullsMask, block.mvOrdering(), blockFactory);
+ }
+ assert classCount == 1;
+
+ //
+ // IntBigArrayBlock
+ //
+ if (block instanceof IntBigArrayBlock) {
+ return block;
+ }
+
+ var intArray = blockFactory.bigArrays().newIntArray(totalValues);
+ for (int i = 0; i < block.getPositionCount(); i++) {
+ intArray.set(i, block.getInt(i));
+ }
+
+ return new IntBigArrayBlock(intArray, block.getPositionCount(), firstValueIndexes, nullsMask, block.mvOrdering(), blockFactory);
+ }
+}