ESQL: Specialize aggs AddInput for each block type (#127582)

* Specialize block parameters on AddInput

(cherry picked from commit a5855c1664)

* Call the specific add() methods for eacj block type

(cherry picked from commit 5176663f43)

* Implement custom add in HashAggregationOperator

(cherry picked from commit fb670bdbbc)

* Migrated everything to the new add() calls

* Update docs/changelog/127582.yaml

* Spotless format

* Remove unused ClassName for IntVectorBlock

* Fixed tests

* Randomize groupIds block types to check most AddInput cases

* Minor fix and added some docs

* Renamed BlockHashWrapper
This commit is contained in:
Iván Cea Fontenla 2025-05-07 12:21:41 +02:00 committed by GitHub
parent 736e2e6eb7
commit a2fc1caa32
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
93 changed files with 5917 additions and 2165 deletions

View File

@ -0,0 +1,5 @@
pr: 127582
summary: Specialize ags `AddInput` for each block type
area: ES|QL
type: enhancement
issues: []

View File

@ -54,7 +54,8 @@ import static org.elasticsearch.compute.gen.Types.GROUPING_AGGREGATOR_EVALUATOR_
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 @@ import static org.elasticsearch.compute.gen.Types.vectorType;
* and break-point-able as possible.
*/
public class GroupingAggregatorImplementer {
private static final List<ClassName> GROUP_IDS_CLASSES = List.of(INT_ARRAY_BLOCK, INT_BIG_ARRAY_BLOCK, INT_VECTOR);
private final TypeElement declarationType;
private final List<TypeMirror> warnExceptions;
private final ExecutableElement init;
@ -196,10 +199,10 @@ public class GroupingAggregatorImplementer {
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 @@ public class GroupingAggregatorImplementer {
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());

View File

@ -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");

View File

@ -23,7 +23,7 @@ import java.util.BitSet;
* 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);

View File

@ -25,7 +25,7 @@ import java.util.BitSet;
* 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);

View File

@ -23,7 +23,7 @@ import java.util.BitSet;
* 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);

View File

@ -23,7 +23,7 @@ import java.util.BitSet;
* 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);

View File

@ -23,7 +23,7 @@ import java.util.BitSet;
* 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);

View File

@ -23,7 +23,7 @@ import java.util.BitSet;
* 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);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class CountDistinctBooleanGroupingAggregatorFunction implements Gro
}
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 final class CountDistinctBooleanGroupingAggregatorFunction implements Gro
}
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,7 @@ public final class CountDistinctBooleanGroupingAggregatorFunction implements Gro
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -138,7 +128,7 @@ public final class CountDistinctBooleanGroupingAggregatorFunction implements Gro
}
}
private void addRawInput(int positionOffset, IntBlock groups, BooleanVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -152,6 +142,62 @@ public final class CountDistinctBooleanGroupingAggregatorFunction implements Gro
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanBlock values) {
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 = 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, IntBigArrayBlock groups, BooleanVector values) {
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 = groups.getInt(g);
CountDistinctBooleanAggregator.combine(state, groupId, values.getBoolean(groupPosition + positionOffset));
}
}
}
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);

View File

@ -14,7 +14,8 @@ import org.elasticsearch.compute.data.Block;
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 final class CountDistinctBytesRefGroupingAggregatorFunction implements Gr
}
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 final class CountDistinctBytesRefGroupingAggregatorFunction implements Gr
}
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,6 +110,80 @@ public final class CountDistinctBytesRefGroupingAggregatorFunction implements Gr
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
CountDistinctBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
CountDistinctBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -122,43 +207,6 @@ public final class CountDistinctBytesRefGroupingAggregatorFunction implements Gr
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
CountDistinctBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -16,7 +16,8 @@ import org.elasticsearch.compute.data.BytesRefVector;
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 final class CountDistinctDoubleGroupingAggregatorFunction implements Grou
}
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 final class CountDistinctDoubleGroupingAggregatorFunction implements Grou
}
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,7 @@ public final class CountDistinctDoubleGroupingAggregatorFunction implements Grou
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -143,7 +133,7 @@ public final class CountDistinctDoubleGroupingAggregatorFunction implements Grou
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -157,6 +147,62 @@ public final class CountDistinctDoubleGroupingAggregatorFunction implements Grou
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
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 = 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, IntBigArrayBlock groups, DoubleVector values) {
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 = groups.getInt(g);
CountDistinctDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
}
}
}
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);

View File

@ -16,7 +16,8 @@ import org.elasticsearch.compute.data.BytesRefVector;
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 final class CountDistinctFloatGroupingAggregatorFunction implements Group
}
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 final class CountDistinctFloatGroupingAggregatorFunction implements Group
}
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,7 @@ public final class CountDistinctFloatGroupingAggregatorFunction implements Group
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -143,7 +133,7 @@ public final class CountDistinctFloatGroupingAggregatorFunction implements Group
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -157,6 +147,62 @@ public final class CountDistinctFloatGroupingAggregatorFunction implements Group
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
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 = 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, IntBigArrayBlock groups, FloatVector values) {
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 = groups.getInt(g);
CountDistinctFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
}
}
}
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);

View File

@ -14,6 +14,8 @@ import org.elasticsearch.compute.data.Block;
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 final class CountDistinctIntGroupingAggregatorFunction implements Groupin
}
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 final class CountDistinctIntGroupingAggregatorFunction implements Groupin
}
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,7 @@ public final class CountDistinctIntGroupingAggregatorFunction implements Groupin
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -141,7 +132,7 @@ public final class CountDistinctIntGroupingAggregatorFunction implements Groupin
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -155,6 +146,62 @@ public final class CountDistinctIntGroupingAggregatorFunction implements Groupin
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
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 = 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, IntBigArrayBlock groups, IntVector values) {
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 = groups.getInt(g);
CountDistinctIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
}
}
}
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);

View File

@ -14,7 +14,8 @@ import org.elasticsearch.compute.data.Block;
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 final class CountDistinctLongGroupingAggregatorFunction implements Groupi
}
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 final class CountDistinctLongGroupingAggregatorFunction implements Groupi
}
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,7 @@ public final class CountDistinctLongGroupingAggregatorFunction implements Groupi
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -143,7 +133,7 @@ public final class CountDistinctLongGroupingAggregatorFunction implements Groupi
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -157,6 +147,62 @@ public final class CountDistinctLongGroupingAggregatorFunction implements Groupi
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
CountDistinctLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
}
}
}
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);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class LastOverTimeDoubleGroupingAggregatorFunction implements Group
}
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 final class LastOverTimeDoubleGroupingAggregatorFunction implements Group
}
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,6 +114,82 @@ public final class LastOverTimeDoubleGroupingAggregatorFunction implements Group
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values,
LongVector timestamps) {
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 = 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, IntArrayBlock groups, DoubleVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
LastOverTimeDoubleAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getDouble(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values,
LongVector timestamps) {
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 = 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, IntBigArrayBlock groups, DoubleVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
LastOverTimeDoubleAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getDouble(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -127,44 +214,6 @@ public final class LastOverTimeDoubleGroupingAggregatorFunction implements Group
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values,
LongVector timestamps) {
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 = 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, IntBlock groups, DoubleVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
LastOverTimeDoubleAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getDouble(valuePosition));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class LastOverTimeFloatGroupingAggregatorFunction implements Groupi
}
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 final class LastOverTimeFloatGroupingAggregatorFunction implements Groupi
}
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,6 +114,82 @@ public final class LastOverTimeFloatGroupingAggregatorFunction implements Groupi
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values,
LongVector timestamps) {
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 = 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, IntArrayBlock groups, FloatVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
LastOverTimeFloatAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getFloat(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values,
LongVector timestamps) {
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 = 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, IntBigArrayBlock groups, FloatVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
LastOverTimeFloatAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getFloat(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, FloatBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -127,44 +214,6 @@ public final class LastOverTimeFloatGroupingAggregatorFunction implements Groupi
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values,
LongVector timestamps) {
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 = 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, IntBlock groups, FloatVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
LastOverTimeFloatAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getFloat(valuePosition));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -11,6 +11,8 @@ import java.lang.StringBuilder;
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 final class LastOverTimeIntGroupingAggregatorFunction implements Grouping
}
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 final class LastOverTimeIntGroupingAggregatorFunction implements Grouping
}
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,6 +113,82 @@ public final class LastOverTimeIntGroupingAggregatorFunction implements Grouping
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values,
LongVector timestamps) {
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 = 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, IntArrayBlock groups, IntVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
LastOverTimeIntAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getInt(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values,
LongVector timestamps) {
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 = 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, IntBigArrayBlock groups, IntVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
LastOverTimeIntAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getInt(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, IntBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -125,44 +213,6 @@ public final class LastOverTimeIntGroupingAggregatorFunction implements Grouping
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values,
LongVector timestamps) {
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 = 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, IntBlock groups, IntVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
LastOverTimeIntAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getInt(valuePosition));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -11,7 +11,8 @@ import java.lang.StringBuilder;
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 final class LastOverTimeLongGroupingAggregatorFunction implements Groupin
}
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 final class LastOverTimeLongGroupingAggregatorFunction implements Groupin
}
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,6 +112,82 @@ public final class LastOverTimeLongGroupingAggregatorFunction implements Groupin
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values,
LongVector timestamps) {
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 = 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, IntArrayBlock groups, LongVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
LastOverTimeLongAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getLong(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values,
LongVector timestamps) {
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 = 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, IntBigArrayBlock groups, LongVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
LastOverTimeLongAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getLong(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, LongBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -125,44 +212,6 @@ public final class LastOverTimeLongGroupingAggregatorFunction implements Groupin
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values,
LongVector timestamps) {
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 = 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, IntBlock groups, LongVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
LastOverTimeLongAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getLong(valuePosition));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class MaxBooleanGroupingAggregatorFunction implements GroupingAggre
}
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 final class MaxBooleanGroupingAggregatorFunction implements GroupingAggre
}
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,7 @@ public final class MaxBooleanGroupingAggregatorFunction implements GroupingAggre
};
}
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)));
}
}
private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -138,7 +128,7 @@ public final class MaxBooleanGroupingAggregatorFunction implements GroupingAggre
}
}
private void addRawInput(int positionOffset, IntBlock groups, BooleanVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -152,6 +142,62 @@ public final class MaxBooleanGroupingAggregatorFunction implements GroupingAggre
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanBlock values) {
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 = 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, IntBigArrayBlock groups, BooleanVector values) {
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 = groups.getInt(g);
state.set(groupId, MaxBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(groupPosition + positionOffset)));
}
}
}
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);

View File

@ -16,7 +16,8 @@ import org.elasticsearch.compute.data.BooleanVector;
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 final class MaxBytesRefGroupingAggregatorFunction implements GroupingAggr
}
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 final class MaxBytesRefGroupingAggregatorFunction implements GroupingAggr
}
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,6 +110,80 @@ public final class MaxBytesRefGroupingAggregatorFunction implements GroupingAggr
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
MaxBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
MaxBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -122,43 +207,6 @@ public final class MaxBytesRefGroupingAggregatorFunction implements GroupingAggr
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
MaxBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -15,7 +15,8 @@ import org.elasticsearch.compute.data.BooleanVector;
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 final class MaxDoubleGroupingAggregatorFunction implements GroupingAggreg
}
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 final class MaxDoubleGroupingAggregatorFunction implements GroupingAggreg
}
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,7 @@ public final class MaxDoubleGroupingAggregatorFunction implements GroupingAggreg
};
}
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)));
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -140,7 +130,7 @@ public final class MaxDoubleGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -154,6 +144,62 @@ public final class MaxDoubleGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
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 = 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, IntBigArrayBlock groups, DoubleVector values) {
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 = groups.getInt(g);
state.set(groupId, MaxDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(groupPosition + positionOffset)));
}
}
}
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);

View File

@ -15,7 +15,8 @@ import org.elasticsearch.compute.data.BooleanVector;
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 final class MaxFloatGroupingAggregatorFunction implements GroupingAggrega
}
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 final class MaxFloatGroupingAggregatorFunction implements GroupingAggrega
}
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,7 @@ public final class MaxFloatGroupingAggregatorFunction implements GroupingAggrega
};
}
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)));
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -140,7 +130,7 @@ public final class MaxFloatGroupingAggregatorFunction implements GroupingAggrega
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -154,6 +144,62 @@ public final class MaxFloatGroupingAggregatorFunction implements GroupingAggrega
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
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 = 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, IntBigArrayBlock groups, FloatVector values) {
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 = groups.getInt(g);
state.set(groupId, MaxFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(groupPosition + positionOffset)));
}
}
}
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);

View File

@ -13,6 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class MaxIntGroupingAggregatorFunction implements GroupingAggregato
}
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 final class MaxIntGroupingAggregatorFunction implements GroupingAggregato
}
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,7 @@ public final class MaxIntGroupingAggregatorFunction implements GroupingAggregato
};
}
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)));
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -138,7 +129,7 @@ public final class MaxIntGroupingAggregatorFunction implements GroupingAggregato
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -152,6 +143,62 @@ public final class MaxIntGroupingAggregatorFunction implements GroupingAggregato
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
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 = 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, IntBigArrayBlock groups, IntVector values) {
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 = groups.getInt(g);
state.set(groupId, MaxIntAggregator.combine(state.getOrDefault(groupId), values.getInt(groupPosition + positionOffset)));
}
}
}
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);

View File

@ -16,7 +16,8 @@ import org.elasticsearch.compute.data.BooleanVector;
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 final class MaxIpGroupingAggregatorFunction implements GroupingAggregator
}
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 final class MaxIpGroupingAggregatorFunction implements GroupingAggregator
}
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,6 +110,80 @@ public final class MaxIpGroupingAggregatorFunction implements GroupingAggregator
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
MaxIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
MaxIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -122,43 +207,6 @@ public final class MaxIpGroupingAggregatorFunction implements GroupingAggregator
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
MaxIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class MaxLongGroupingAggregatorFunction implements GroupingAggregat
}
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 final class MaxLongGroupingAggregatorFunction implements GroupingAggregat
}
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,7 @@ public final class MaxLongGroupingAggregatorFunction implements GroupingAggregat
};
}
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)));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -140,7 +130,7 @@ public final class MaxLongGroupingAggregatorFunction implements GroupingAggregat
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -154,6 +144,62 @@ public final class MaxLongGroupingAggregatorFunction implements GroupingAggregat
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
state.set(groupId, MaxLongAggregator.combine(state.getOrDefault(groupId), values.getLong(groupPosition + positionOffset)));
}
}
}
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);

View File

@ -16,7 +16,8 @@ import org.elasticsearch.compute.data.BytesRefVector;
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 final class MedianAbsoluteDeviationDoubleGroupingAggregatorFunction imple
}
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 final class MedianAbsoluteDeviationDoubleGroupingAggregatorFunction imple
}
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,7 @@ public final class MedianAbsoluteDeviationDoubleGroupingAggregatorFunction imple
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -140,7 +130,7 @@ public final class MedianAbsoluteDeviationDoubleGroupingAggregatorFunction imple
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -154,6 +144,62 @@ public final class MedianAbsoluteDeviationDoubleGroupingAggregatorFunction imple
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
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 = 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, IntBigArrayBlock groups, DoubleVector values) {
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 = groups.getInt(g);
MedianAbsoluteDeviationDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
}
}
}
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);

View File

@ -16,7 +16,8 @@ import org.elasticsearch.compute.data.BytesRefVector;
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 final class MedianAbsoluteDeviationFloatGroupingAggregatorFunction implem
}
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 final class MedianAbsoluteDeviationFloatGroupingAggregatorFunction implem
}
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,7 @@ public final class MedianAbsoluteDeviationFloatGroupingAggregatorFunction implem
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -140,7 +130,7 @@ public final class MedianAbsoluteDeviationFloatGroupingAggregatorFunction implem
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -154,6 +144,62 @@ public final class MedianAbsoluteDeviationFloatGroupingAggregatorFunction implem
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
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 = 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, IntBigArrayBlock groups, FloatVector values) {
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 = groups.getInt(g);
MedianAbsoluteDeviationFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
}
}
}
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);

View File

@ -14,6 +14,8 @@ import org.elasticsearch.compute.data.Block;
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 final class MedianAbsoluteDeviationIntGroupingAggregatorFunction implemen
}
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 final class MedianAbsoluteDeviationIntGroupingAggregatorFunction implemen
}
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,7 @@ public final class MedianAbsoluteDeviationIntGroupingAggregatorFunction implemen
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -138,7 +129,7 @@ public final class MedianAbsoluteDeviationIntGroupingAggregatorFunction implemen
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -152,6 +143,62 @@ public final class MedianAbsoluteDeviationIntGroupingAggregatorFunction implemen
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
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 = 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, IntBigArrayBlock groups, IntVector values) {
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 = groups.getInt(g);
MedianAbsoluteDeviationIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
}
}
}
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);

View File

@ -14,7 +14,8 @@ import org.elasticsearch.compute.data.Block;
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 final class MedianAbsoluteDeviationLongGroupingAggregatorFunction impleme
}
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 final class MedianAbsoluteDeviationLongGroupingAggregatorFunction impleme
}
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,7 @@ public final class MedianAbsoluteDeviationLongGroupingAggregatorFunction impleme
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -140,7 +130,7 @@ public final class MedianAbsoluteDeviationLongGroupingAggregatorFunction impleme
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -154,6 +144,62 @@ public final class MedianAbsoluteDeviationLongGroupingAggregatorFunction impleme
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
MedianAbsoluteDeviationLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
}
}
}
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);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class MinBooleanGroupingAggregatorFunction implements GroupingAggre
}
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 final class MinBooleanGroupingAggregatorFunction implements GroupingAggre
}
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,7 @@ public final class MinBooleanGroupingAggregatorFunction implements GroupingAggre
};
}
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)));
}
}
private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -138,7 +128,7 @@ public final class MinBooleanGroupingAggregatorFunction implements GroupingAggre
}
}
private void addRawInput(int positionOffset, IntBlock groups, BooleanVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -152,6 +142,62 @@ public final class MinBooleanGroupingAggregatorFunction implements GroupingAggre
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanBlock values) {
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 = 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, IntBigArrayBlock groups, BooleanVector values) {
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 = groups.getInt(g);
state.set(groupId, MinBooleanAggregator.combine(state.getOrDefault(groupId), values.getBoolean(groupPosition + positionOffset)));
}
}
}
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);

View File

@ -16,7 +16,8 @@ import org.elasticsearch.compute.data.BooleanVector;
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 final class MinBytesRefGroupingAggregatorFunction implements GroupingAggr
}
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 final class MinBytesRefGroupingAggregatorFunction implements GroupingAggr
}
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,6 +110,80 @@ public final class MinBytesRefGroupingAggregatorFunction implements GroupingAggr
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
MinBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
MinBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -122,43 +207,6 @@ public final class MinBytesRefGroupingAggregatorFunction implements GroupingAggr
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
MinBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -15,7 +15,8 @@ import org.elasticsearch.compute.data.BooleanVector;
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 final class MinDoubleGroupingAggregatorFunction implements GroupingAggreg
}
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 final class MinDoubleGroupingAggregatorFunction implements GroupingAggreg
}
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,7 @@ public final class MinDoubleGroupingAggregatorFunction implements GroupingAggreg
};
}
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)));
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -140,7 +130,7 @@ public final class MinDoubleGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -154,6 +144,62 @@ public final class MinDoubleGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
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 = 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, IntBigArrayBlock groups, DoubleVector values) {
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 = groups.getInt(g);
state.set(groupId, MinDoubleAggregator.combine(state.getOrDefault(groupId), values.getDouble(groupPosition + positionOffset)));
}
}
}
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);

View File

@ -15,7 +15,8 @@ import org.elasticsearch.compute.data.BooleanVector;
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 final class MinFloatGroupingAggregatorFunction implements GroupingAggrega
}
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 final class MinFloatGroupingAggregatorFunction implements GroupingAggrega
}
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,7 @@ public final class MinFloatGroupingAggregatorFunction implements GroupingAggrega
};
}
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)));
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -140,7 +130,7 @@ public final class MinFloatGroupingAggregatorFunction implements GroupingAggrega
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -154,6 +144,62 @@ public final class MinFloatGroupingAggregatorFunction implements GroupingAggrega
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
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 = 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, IntBigArrayBlock groups, FloatVector values) {
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 = groups.getInt(g);
state.set(groupId, MinFloatAggregator.combine(state.getOrDefault(groupId), values.getFloat(groupPosition + positionOffset)));
}
}
}
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);

View File

@ -13,6 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class MinIntGroupingAggregatorFunction implements GroupingAggregato
}
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 final class MinIntGroupingAggregatorFunction implements GroupingAggregato
}
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,7 @@ public final class MinIntGroupingAggregatorFunction implements GroupingAggregato
};
}
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)));
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -138,7 +129,7 @@ public final class MinIntGroupingAggregatorFunction implements GroupingAggregato
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -152,6 +143,62 @@ public final class MinIntGroupingAggregatorFunction implements GroupingAggregato
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
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 = 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, IntBigArrayBlock groups, IntVector values) {
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 = groups.getInt(g);
state.set(groupId, MinIntAggregator.combine(state.getOrDefault(groupId), values.getInt(groupPosition + positionOffset)));
}
}
}
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);

View File

@ -16,7 +16,8 @@ import org.elasticsearch.compute.data.BooleanVector;
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 final class MinIpGroupingAggregatorFunction implements GroupingAggregator
}
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 final class MinIpGroupingAggregatorFunction implements GroupingAggregator
}
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,6 +110,80 @@ public final class MinIpGroupingAggregatorFunction implements GroupingAggregator
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
MinIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
MinIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -122,43 +207,6 @@ public final class MinIpGroupingAggregatorFunction implements GroupingAggregator
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
MinIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class MinLongGroupingAggregatorFunction implements GroupingAggregat
}
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 final class MinLongGroupingAggregatorFunction implements GroupingAggregat
}
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,7 @@ public final class MinLongGroupingAggregatorFunction implements GroupingAggregat
};
}
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)));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -140,7 +130,7 @@ public final class MinLongGroupingAggregatorFunction implements GroupingAggregat
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -154,6 +144,62 @@ public final class MinLongGroupingAggregatorFunction implements GroupingAggregat
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
state.set(groupId, MinLongAggregator.combine(state.getOrDefault(groupId), values.getLong(groupPosition + positionOffset)));
}
}
}
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);

View File

@ -16,7 +16,8 @@ import org.elasticsearch.compute.data.BytesRefVector;
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 final class PercentileDoubleGroupingAggregatorFunction implements Groupin
}
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 final class PercentileDoubleGroupingAggregatorFunction implements Groupin
}
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,7 @@ public final class PercentileDoubleGroupingAggregatorFunction implements Groupin
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -143,7 +133,7 @@ public final class PercentileDoubleGroupingAggregatorFunction implements Groupin
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -157,6 +147,62 @@ public final class PercentileDoubleGroupingAggregatorFunction implements Groupin
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
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 = 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, IntBigArrayBlock groups, DoubleVector values) {
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 = groups.getInt(g);
PercentileDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
}
}
}
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);

View File

@ -16,7 +16,8 @@ import org.elasticsearch.compute.data.BytesRefVector;
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 final class PercentileFloatGroupingAggregatorFunction implements Grouping
}
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 final class PercentileFloatGroupingAggregatorFunction implements Grouping
}
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,7 @@ public final class PercentileFloatGroupingAggregatorFunction implements Grouping
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -143,7 +133,7 @@ public final class PercentileFloatGroupingAggregatorFunction implements Grouping
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -157,6 +147,62 @@ public final class PercentileFloatGroupingAggregatorFunction implements Grouping
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
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 = 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, IntBigArrayBlock groups, FloatVector values) {
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 = groups.getInt(g);
PercentileFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
}
}
}
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);

View File

@ -14,6 +14,8 @@ import org.elasticsearch.compute.data.Block;
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 final class PercentileIntGroupingAggregatorFunction implements GroupingAg
}
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 final class PercentileIntGroupingAggregatorFunction implements GroupingAg
}
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,7 @@ public final class PercentileIntGroupingAggregatorFunction implements GroupingAg
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -141,7 +132,7 @@ public final class PercentileIntGroupingAggregatorFunction implements GroupingAg
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -155,6 +146,62 @@ public final class PercentileIntGroupingAggregatorFunction implements GroupingAg
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
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 = 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, IntBigArrayBlock groups, IntVector values) {
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 = groups.getInt(g);
PercentileIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
}
}
}
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);

View File

@ -14,7 +14,8 @@ import org.elasticsearch.compute.data.Block;
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 final class PercentileLongGroupingAggregatorFunction implements GroupingA
}
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 final class PercentileLongGroupingAggregatorFunction implements GroupingA
}
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,7 @@ public final class PercentileLongGroupingAggregatorFunction implements GroupingA
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -143,7 +133,7 @@ public final class PercentileLongGroupingAggregatorFunction implements GroupingA
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -157,6 +147,62 @@ public final class PercentileLongGroupingAggregatorFunction implements GroupingA
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
PercentileLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
}
}
}
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);

View File

@ -13,6 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class RateDoubleGroupingAggregatorFunction implements GroupingAggre
}
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 final class RateDoubleGroupingAggregatorFunction implements GroupingAggre
}
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,6 +117,82 @@ public final class RateDoubleGroupingAggregatorFunction implements GroupingAggre
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values,
LongVector timestamps) {
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 = 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, IntArrayBlock groups, DoubleVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
RateDoubleAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getDouble(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values,
LongVector timestamps) {
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 = 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, IntBigArrayBlock groups, DoubleVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
RateDoubleAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getDouble(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, DoubleBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -129,44 +217,6 @@ public final class RateDoubleGroupingAggregatorFunction implements GroupingAggre
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values,
LongVector timestamps) {
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 = 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, IntBlock groups, DoubleVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
RateDoubleAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getDouble(valuePosition));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -15,6 +15,8 @@ import org.elasticsearch.compute.data.DoubleVector;
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 final class RateFloatGroupingAggregatorFunction implements GroupingAggreg
}
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 final class RateFloatGroupingAggregatorFunction implements GroupingAggreg
}
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,6 +119,82 @@ public final class RateFloatGroupingAggregatorFunction implements GroupingAggreg
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values,
LongVector timestamps) {
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 = 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, IntArrayBlock groups, FloatVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
RateFloatAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getFloat(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values,
LongVector timestamps) {
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 = 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, IntBigArrayBlock groups, FloatVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
RateFloatAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getFloat(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, FloatBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -131,44 +219,6 @@ public final class RateFloatGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values,
LongVector timestamps) {
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 = 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, IntBlock groups, FloatVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
RateFloatAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getFloat(valuePosition));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -13,6 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class RateIntGroupingAggregatorFunction implements GroupingAggregat
}
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 final class RateIntGroupingAggregatorFunction implements GroupingAggregat
}
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,6 +117,82 @@ public final class RateIntGroupingAggregatorFunction implements GroupingAggregat
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values,
LongVector timestamps) {
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 = 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, IntArrayBlock groups, IntVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
RateIntAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getInt(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values,
LongVector timestamps) {
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 = 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, IntBigArrayBlock groups, IntVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
RateIntAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getInt(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, IntBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -129,44 +217,6 @@ public final class RateIntGroupingAggregatorFunction implements GroupingAggregat
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values,
LongVector timestamps) {
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 = 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, IntBlock groups, IntVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
RateIntAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getInt(valuePosition));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -13,6 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class RateLongGroupingAggregatorFunction implements GroupingAggrega
}
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 final class RateLongGroupingAggregatorFunction implements GroupingAggrega
}
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,6 +117,82 @@ public final class RateLongGroupingAggregatorFunction implements GroupingAggrega
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values,
LongVector timestamps) {
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 = 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, IntArrayBlock groups, LongVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
RateLongAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getLong(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values,
LongVector timestamps) {
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 = 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, IntBigArrayBlock groups, LongVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
RateLongAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getLong(valuePosition));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, LongBlock values,
LongVector timestamps) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -129,44 +217,6 @@ public final class RateLongGroupingAggregatorFunction implements GroupingAggrega
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values,
LongVector timestamps) {
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 = 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, IntBlock groups, LongVector values,
LongVector timestamps) {
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 = groups.getInt(g);
var valuePosition = groupPosition + positionOffset;
RateLongAggregator.combine(state, groupId, timestamps.getLong(valuePosition), values.getLong(valuePosition));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class StdDevDoubleGroupingAggregatorFunction implements GroupingAgg
}
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 final class StdDevDoubleGroupingAggregatorFunction implements GroupingAgg
}
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,7 @@ public final class StdDevDoubleGroupingAggregatorFunction implements GroupingAgg
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -141,7 +131,7 @@ public final class StdDevDoubleGroupingAggregatorFunction implements GroupingAgg
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -155,6 +145,62 @@ public final class StdDevDoubleGroupingAggregatorFunction implements GroupingAgg
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
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 = 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, IntBigArrayBlock groups, DoubleVector values) {
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 = groups.getInt(g);
StdDevDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
}
}
}
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);

View File

@ -15,7 +15,8 @@ import org.elasticsearch.compute.data.DoubleVector;
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 final class StdDevFloatGroupingAggregatorFunction implements GroupingAggr
}
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 final class StdDevFloatGroupingAggregatorFunction implements GroupingAggr
}
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,7 @@ public final class StdDevFloatGroupingAggregatorFunction implements GroupingAggr
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -143,7 +133,7 @@ public final class StdDevFloatGroupingAggregatorFunction implements GroupingAggr
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -157,6 +147,62 @@ public final class StdDevFloatGroupingAggregatorFunction implements GroupingAggr
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
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 = 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, IntBigArrayBlock groups, FloatVector values) {
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 = groups.getInt(g);
StdDevFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
}
}
}
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);

View File

@ -13,6 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class StdDevIntGroupingAggregatorFunction implements GroupingAggreg
}
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 final class StdDevIntGroupingAggregatorFunction implements GroupingAggreg
}
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,7 @@ public final class StdDevIntGroupingAggregatorFunction implements GroupingAggreg
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -141,7 +132,7 @@ public final class StdDevIntGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -155,6 +146,62 @@ public final class StdDevIntGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
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 = 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, IntBigArrayBlock groups, IntVector values) {
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 = groups.getInt(g);
StdDevIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
}
}
}
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);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class StdDevLongGroupingAggregatorFunction implements GroupingAggre
}
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 final class StdDevLongGroupingAggregatorFunction implements GroupingAggre
}
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,7 @@ public final class StdDevLongGroupingAggregatorFunction implements GroupingAggre
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -141,7 +131,7 @@ public final class StdDevLongGroupingAggregatorFunction implements GroupingAggre
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -155,6 +145,62 @@ public final class StdDevLongGroupingAggregatorFunction implements GroupingAggre
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
StdDevLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
}
}
}
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);

View File

@ -15,7 +15,8 @@ import org.elasticsearch.compute.data.BooleanVector;
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 final class SumDoubleGroupingAggregatorFunction implements GroupingAggreg
}
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 final class SumDoubleGroupingAggregatorFunction implements GroupingAggreg
}
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,7 @@ public final class SumDoubleGroupingAggregatorFunction implements GroupingAggreg
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -141,7 +131,7 @@ public final class SumDoubleGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -155,6 +145,62 @@ public final class SumDoubleGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
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 = 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, IntBigArrayBlock groups, DoubleVector values) {
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 = groups.getInt(g);
SumDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
}
}
}
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);

View File

@ -17,7 +17,8 @@ import org.elasticsearch.compute.data.DoubleVector;
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 final class SumFloatGroupingAggregatorFunction implements GroupingAggrega
}
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 final class SumFloatGroupingAggregatorFunction implements GroupingAggrega
}
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,7 @@ public final class SumFloatGroupingAggregatorFunction implements GroupingAggrega
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -143,7 +133,7 @@ public final class SumFloatGroupingAggregatorFunction implements GroupingAggrega
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -157,6 +147,62 @@ public final class SumFloatGroupingAggregatorFunction implements GroupingAggrega
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
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 = 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, IntBigArrayBlock groups, FloatVector values) {
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 = groups.getInt(g);
SumFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
}
}
}
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);

View File

@ -13,6 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class SumIntGroupingAggregatorFunction implements GroupingAggregato
}
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 final class SumIntGroupingAggregatorFunction implements GroupingAggregato
}
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,7 @@ public final class SumIntGroupingAggregatorFunction implements GroupingAggregato
};
}
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)));
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -140,7 +131,7 @@ public final class SumIntGroupingAggregatorFunction implements GroupingAggregato
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -154,6 +145,62 @@ public final class SumIntGroupingAggregatorFunction implements GroupingAggregato
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
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 = 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, IntBigArrayBlock groups, IntVector values) {
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 = groups.getInt(g);
state.set(groupId, SumIntAggregator.combine(state.getOrDefault(groupId), values.getInt(groupPosition + positionOffset)));
}
}
}
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);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class SumLongGroupingAggregatorFunction implements GroupingAggregat
}
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 final class SumLongGroupingAggregatorFunction implements GroupingAggregat
}
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,7 @@ public final class SumLongGroupingAggregatorFunction implements GroupingAggregat
};
}
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)));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -140,7 +130,7 @@ public final class SumLongGroupingAggregatorFunction implements GroupingAggregat
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -154,6 +144,62 @@ public final class SumLongGroupingAggregatorFunction implements GroupingAggregat
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
state.set(groupId, SumLongAggregator.combine(state.getOrDefault(groupId), values.getLong(groupPosition + positionOffset)));
}
}
}
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);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class TopBooleanGroupingAggregatorFunction implements GroupingAggre
}
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 final class TopBooleanGroupingAggregatorFunction implements GroupingAggre
}
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,7 @@ public final class TopBooleanGroupingAggregatorFunction implements GroupingAggre
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -144,7 +134,7 @@ public final class TopBooleanGroupingAggregatorFunction implements GroupingAggre
}
}
private void addRawInput(int positionOffset, IntBlock groups, BooleanVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -158,6 +148,62 @@ public final class TopBooleanGroupingAggregatorFunction implements GroupingAggre
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanBlock values) {
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 = 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, IntBigArrayBlock groups, BooleanVector values) {
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 = groups.getInt(g);
TopBooleanAggregator.combine(state, groupId, values.getBoolean(groupPosition + positionOffset));
}
}
}
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);

View File

@ -14,7 +14,8 @@ import org.elasticsearch.compute.data.Block;
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 final class TopBytesRefGroupingAggregatorFunction implements GroupingAggr
}
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 final class TopBytesRefGroupingAggregatorFunction implements GroupingAggr
}
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,6 +114,80 @@ public final class TopBytesRefGroupingAggregatorFunction implements GroupingAggr
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
TopBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
TopBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -126,43 +211,6 @@ public final class TopBytesRefGroupingAggregatorFunction implements GroupingAggr
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
TopBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class TopDoubleGroupingAggregatorFunction implements GroupingAggreg
}
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 final class TopDoubleGroupingAggregatorFunction implements GroupingAggreg
}
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,7 @@ public final class TopDoubleGroupingAggregatorFunction implements GroupingAggreg
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -144,7 +134,7 @@ public final class TopDoubleGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -158,6 +148,62 @@ public final class TopDoubleGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
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 = 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, IntBigArrayBlock groups, DoubleVector values) {
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 = groups.getInt(g);
TopDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
}
}
}
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);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class TopFloatGroupingAggregatorFunction implements GroupingAggrega
}
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 final class TopFloatGroupingAggregatorFunction implements GroupingAggrega
}
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,7 @@ public final class TopFloatGroupingAggregatorFunction implements GroupingAggrega
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -144,7 +134,7 @@ public final class TopFloatGroupingAggregatorFunction implements GroupingAggrega
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -158,6 +148,62 @@ public final class TopFloatGroupingAggregatorFunction implements GroupingAggrega
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
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 = 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, IntBigArrayBlock groups, FloatVector values) {
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 = groups.getInt(g);
TopFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
}
}
}
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);

View File

@ -11,6 +11,8 @@ import java.lang.StringBuilder;
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 final class TopIntGroupingAggregatorFunction implements GroupingAggregato
}
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 final class TopIntGroupingAggregatorFunction implements GroupingAggregato
}
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,7 @@ public final class TopIntGroupingAggregatorFunction implements GroupingAggregato
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -142,7 +133,7 @@ public final class TopIntGroupingAggregatorFunction implements GroupingAggregato
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -156,6 +147,62 @@ public final class TopIntGroupingAggregatorFunction implements GroupingAggregato
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
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 = 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, IntBigArrayBlock groups, IntVector values) {
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 = groups.getInt(g);
TopIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
}
}
}
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);

View File

@ -14,7 +14,8 @@ import org.elasticsearch.compute.data.Block;
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 final class TopIpGroupingAggregatorFunction implements GroupingAggregator
}
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 final class TopIpGroupingAggregatorFunction implements GroupingAggregator
}
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,6 +114,80 @@ public final class TopIpGroupingAggregatorFunction implements GroupingAggregator
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
TopIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
TopIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -126,43 +211,6 @@ public final class TopIpGroupingAggregatorFunction implements GroupingAggregator
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
TopIpAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -11,7 +11,8 @@ import java.lang.StringBuilder;
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 final class TopLongGroupingAggregatorFunction implements GroupingAggregat
}
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 final class TopLongGroupingAggregatorFunction implements GroupingAggregat
}
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,7 @@ public final class TopLongGroupingAggregatorFunction implements GroupingAggregat
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -144,7 +134,7 @@ public final class TopLongGroupingAggregatorFunction implements GroupingAggregat
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -158,6 +148,62 @@ public final class TopLongGroupingAggregatorFunction implements GroupingAggregat
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
TopLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
}
}
}
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);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class ValuesBooleanGroupingAggregatorFunction implements GroupingAg
}
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 final class ValuesBooleanGroupingAggregatorFunction implements GroupingAg
}
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,7 @@ public final class ValuesBooleanGroupingAggregatorFunction implements GroupingAg
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, BooleanBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -137,7 +127,7 @@ public final class ValuesBooleanGroupingAggregatorFunction implements GroupingAg
}
}
private void addRawInput(int positionOffset, IntBlock groups, BooleanVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, BooleanVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -151,6 +141,62 @@ public final class ValuesBooleanGroupingAggregatorFunction implements GroupingAg
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, BooleanBlock values) {
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 = 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, IntBigArrayBlock groups, BooleanVector values) {
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 = groups.getInt(g);
ValuesBooleanAggregator.combine(state, groupId, values.getBoolean(groupPosition + positionOffset));
}
}
}
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);

View File

@ -14,7 +14,8 @@ import org.elasticsearch.compute.data.Block;
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 final class ValuesBytesRefGroupingAggregatorFunction implements GroupingA
}
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 final class ValuesBytesRefGroupingAggregatorFunction implements GroupingA
}
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,6 +107,80 @@ public final class ValuesBytesRefGroupingAggregatorFunction implements GroupingA
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
ValuesBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
ValuesBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -119,43 +204,6 @@ public final class ValuesBytesRefGroupingAggregatorFunction implements GroupingA
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
ValuesBytesRefAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class ValuesDoubleGroupingAggregatorFunction implements GroupingAgg
}
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 final class ValuesDoubleGroupingAggregatorFunction implements GroupingAgg
}
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,7 @@ public final class ValuesDoubleGroupingAggregatorFunction implements GroupingAgg
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -137,7 +127,7 @@ public final class ValuesDoubleGroupingAggregatorFunction implements GroupingAgg
}
}
private void addRawInput(int positionOffset, IntBlock groups, DoubleVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, DoubleVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -151,6 +141,62 @@ public final class ValuesDoubleGroupingAggregatorFunction implements GroupingAgg
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, DoubleBlock values) {
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 = 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, IntBigArrayBlock groups, DoubleVector values) {
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 = groups.getInt(g);
ValuesDoubleAggregator.combine(state, groupId, values.getDouble(groupPosition + positionOffset));
}
}
}
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);

View File

@ -13,7 +13,8 @@ import org.elasticsearch.compute.data.Block;
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 final class ValuesFloatGroupingAggregatorFunction implements GroupingAggr
}
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 final class ValuesFloatGroupingAggregatorFunction implements GroupingAggr
}
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,7 @@ public final class ValuesFloatGroupingAggregatorFunction implements GroupingAggr
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -137,7 +127,7 @@ public final class ValuesFloatGroupingAggregatorFunction implements GroupingAggr
}
}
private void addRawInput(int positionOffset, IntBlock groups, FloatVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, FloatVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -151,6 +141,62 @@ public final class ValuesFloatGroupingAggregatorFunction implements GroupingAggr
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, FloatBlock values) {
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 = 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, IntBigArrayBlock groups, FloatVector values) {
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 = groups.getInt(g);
ValuesFloatAggregator.combine(state, groupId, values.getFloat(groupPosition + positionOffset));
}
}
}
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);

View File

@ -11,6 +11,8 @@ import java.lang.StringBuilder;
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 final class ValuesIntGroupingAggregatorFunction implements GroupingAggreg
}
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 final class ValuesIntGroupingAggregatorFunction implements GroupingAggreg
}
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,7 @@ public final class ValuesIntGroupingAggregatorFunction implements GroupingAggreg
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -135,7 +126,7 @@ public final class ValuesIntGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBlock groups, IntVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -149,6 +140,62 @@ public final class ValuesIntGroupingAggregatorFunction implements GroupingAggreg
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, IntBlock values) {
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 = 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, IntBigArrayBlock groups, IntVector values) {
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 = groups.getInt(g);
ValuesIntAggregator.combine(state, groupId, values.getInt(groupPosition + positionOffset));
}
}
}
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);

View File

@ -11,7 +11,8 @@ import java.lang.StringBuilder;
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 final class ValuesLongGroupingAggregatorFunction implements GroupingAggre
}
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 final class ValuesLongGroupingAggregatorFunction implements GroupingAggre
}
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,7 @@ public final class ValuesLongGroupingAggregatorFunction implements GroupingAggre
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -137,7 +127,7 @@ public final class ValuesLongGroupingAggregatorFunction implements GroupingAggre
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -151,6 +141,62 @@ public final class ValuesLongGroupingAggregatorFunction implements GroupingAggre
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
ValuesLongAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
}
}
}
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);

View File

@ -17,7 +17,8 @@ import org.elasticsearch.compute.data.Block;
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 final class SpatialCentroidCartesianPointDocValuesGroupingAggregatorFunct
}
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 final class SpatialCentroidCartesianPointDocValuesGroupingAggregatorFunct
}
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,7 @@ public final class SpatialCentroidCartesianPointDocValuesGroupingAggregatorFunct
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -147,7 +137,7 @@ public final class SpatialCentroidCartesianPointDocValuesGroupingAggregatorFunct
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -161,6 +151,62 @@ public final class SpatialCentroidCartesianPointDocValuesGroupingAggregatorFunct
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
SpatialCentroidCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
}
}
}
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);

View File

@ -20,7 +20,8 @@ import org.elasticsearch.compute.data.BytesRefVector;
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 final class SpatialCentroidCartesianPointSourceValuesGroupingAggregatorFu
}
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 final class SpatialCentroidCartesianPointSourceValuesGroupingAggregatorFu
}
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,6 +119,80 @@ public final class SpatialCentroidCartesianPointSourceValuesGroupingAggregatorFu
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialCentroidCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialCentroidCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -131,43 +216,6 @@ public final class SpatialCentroidCartesianPointSourceValuesGroupingAggregatorFu
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialCentroidCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -17,7 +17,8 @@ import org.elasticsearch.compute.data.Block;
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 final class SpatialCentroidGeoPointDocValuesGroupingAggregatorFunction im
}
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 final class SpatialCentroidGeoPointDocValuesGroupingAggregatorFunction im
}
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,7 @@ public final class SpatialCentroidGeoPointDocValuesGroupingAggregatorFunction im
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -147,7 +137,7 @@ public final class SpatialCentroidGeoPointDocValuesGroupingAggregatorFunction im
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -161,6 +151,62 @@ public final class SpatialCentroidGeoPointDocValuesGroupingAggregatorFunction im
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
SpatialCentroidGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
}
}
}
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);

View File

@ -20,7 +20,8 @@ import org.elasticsearch.compute.data.BytesRefVector;
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 final class SpatialCentroidGeoPointSourceValuesGroupingAggregatorFunction
}
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 final class SpatialCentroidGeoPointSourceValuesGroupingAggregatorFunction
}
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,6 +119,80 @@ public final class SpatialCentroidGeoPointSourceValuesGroupingAggregatorFunction
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialCentroidGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialCentroidGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -131,43 +216,6 @@ public final class SpatialCentroidGeoPointSourceValuesGroupingAggregatorFunction
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialCentroidGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -15,6 +15,8 @@ import org.elasticsearch.compute.aggregation.IntermediateStateDesc;
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 final class SpatialExtentCartesianPointDocValuesGroupingAggregatorFunctio
}
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 final class SpatialExtentCartesianPointDocValuesGroupingAggregatorFunctio
}
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,7 @@ public final class SpatialExtentCartesianPointDocValuesGroupingAggregatorFunctio
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -144,7 +135,7 @@ public final class SpatialExtentCartesianPointDocValuesGroupingAggregatorFunctio
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -158,6 +149,62 @@ public final class SpatialExtentCartesianPointDocValuesGroupingAggregatorFunctio
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
SpatialExtentCartesianPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
}
}
}
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);

View File

@ -18,6 +18,8 @@ import org.elasticsearch.compute.data.Block;
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 final class SpatialExtentCartesianPointSourceValuesGroupingAggregatorFunc
}
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 final class SpatialExtentCartesianPointSourceValuesGroupingAggregatorFunc
}
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,6 +115,80 @@ public final class SpatialExtentCartesianPointSourceValuesGroupingAggregatorFunc
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialExtentCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialExtentCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -126,43 +212,6 @@ public final class SpatialExtentCartesianPointSourceValuesGroupingAggregatorFunc
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialExtentCartesianPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -15,6 +15,8 @@ import org.elasticsearch.compute.aggregation.IntermediateStateDesc;
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 final class SpatialExtentCartesianShapeDocValuesGroupingAggregatorFunctio
}
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 final class SpatialExtentCartesianShapeDocValuesGroupingAggregatorFunctio
}
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,7 @@ public final class SpatialExtentCartesianShapeDocValuesGroupingAggregatorFunctio
};
}
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
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -143,7 +135,54 @@ public final class SpatialExtentCartesianShapeDocValuesGroupingAggregatorFunctio
}
}
private void addRawInput(int positionOffset, IntBlock 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, IntBigArrayBlock groups, IntBlock values) {
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 = 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);
}
}
}
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
}

View File

@ -18,6 +18,8 @@ import org.elasticsearch.compute.data.Block;
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 final class SpatialExtentCartesianShapeSourceValuesGroupingAggregatorFunc
}
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 final class SpatialExtentCartesianShapeSourceValuesGroupingAggregatorFunc
}
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,6 +115,80 @@ public final class SpatialExtentCartesianShapeSourceValuesGroupingAggregatorFunc
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialExtentCartesianShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialExtentCartesianShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -126,43 +212,6 @@ public final class SpatialExtentCartesianShapeSourceValuesGroupingAggregatorFunc
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialExtentCartesianShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -15,6 +15,8 @@ import org.elasticsearch.compute.aggregation.IntermediateStateDesc;
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 final class SpatialExtentGeoPointDocValuesGroupingAggregatorFunction impl
}
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 final class SpatialExtentGeoPointDocValuesGroupingAggregatorFunction impl
}
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,7 @@ public final class SpatialExtentGeoPointDocValuesGroupingAggregatorFunction impl
};
}
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));
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -146,7 +137,7 @@ public final class SpatialExtentGeoPointDocValuesGroupingAggregatorFunction impl
}
}
private void addRawInput(int positionOffset, IntBlock groups, LongVector values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, LongVector values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -160,6 +151,62 @@ public final class SpatialExtentGeoPointDocValuesGroupingAggregatorFunction impl
}
}
private void addRawInput(int positionOffset, IntBigArrayBlock groups, LongBlock values) {
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 = 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, IntBigArrayBlock groups, LongVector values) {
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 = groups.getInt(g);
SpatialExtentGeoPointDocValuesAggregator.combine(state, groupId, values.getLong(groupPosition + positionOffset));
}
}
}
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);

View File

@ -18,6 +18,8 @@ import org.elasticsearch.compute.data.Block;
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 final class SpatialExtentGeoPointSourceValuesGroupingAggregatorFunction i
}
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 final class SpatialExtentGeoPointSourceValuesGroupingAggregatorFunction i
}
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,6 +117,80 @@ public final class SpatialExtentGeoPointSourceValuesGroupingAggregatorFunction i
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialExtentGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialExtentGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -128,43 +214,6 @@ public final class SpatialExtentGeoPointSourceValuesGroupingAggregatorFunction i
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialExtentGeoPointSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -15,6 +15,8 @@ import org.elasticsearch.compute.aggregation.IntermediateStateDesc;
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 final class SpatialExtentGeoShapeDocValuesGroupingAggregatorFunction impl
}
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 final class SpatialExtentGeoShapeDocValuesGroupingAggregatorFunction impl
}
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,7 @@ public final class SpatialExtentGeoShapeDocValuesGroupingAggregatorFunction impl
};
}
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
}
private void addRawInput(int positionOffset, IntBlock groups, IntBlock values) {
private void addRawInput(int positionOffset, IntArrayBlock groups, IntBlock values) {
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
if (groups.isNull(groupPosition)) {
continue;
@ -145,7 +137,54 @@ public final class SpatialExtentGeoShapeDocValuesGroupingAggregatorFunction impl
}
}
private void addRawInput(int positionOffset, IntBlock 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, IntBigArrayBlock groups, IntBlock values) {
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 = 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);
}
}
}
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
}

View File

@ -18,6 +18,8 @@ import org.elasticsearch.compute.data.Block;
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 final class SpatialExtentGeoShapeSourceValuesGroupingAggregatorFunction i
}
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 final class SpatialExtentGeoShapeSourceValuesGroupingAggregatorFunction i
}
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,6 +117,80 @@ public final class SpatialExtentGeoShapeSourceValuesGroupingAggregatorFunction i
};
}
private void addRawInput(int positionOffset, IntArrayBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialExtentGeoShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
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)) {
continue;
}
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, IntBigArrayBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialExtentGeoShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
private void addRawInput(int positionOffset, IntVector groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
for (int groupPosition = 0; groupPosition < groups.getPositionCount(); groupPosition++) {
@ -128,43 +214,6 @@ public final class SpatialExtentGeoShapeSourceValuesGroupingAggregatorFunction i
}
}
private void addRawInput(int positionOffset, IntBlock groups, BytesRefBlock values) {
BytesRef scratch = new BytesRef();
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 = 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, IntBlock groups, BytesRefVector values) {
BytesRef scratch = new BytesRef();
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 = groups.getInt(g);
SpatialExtentGeoShapeSourceValuesAggregator.combine(state, groupId, values.getBytesRef(groupPosition + positionOffset, scratch));
}
}
}
@Override
public void selectedMayContainUnseenGroups(SeenGroupIds seenGroupIds) {
state.enableGroupIdTracking(seenGroupIds);

View File

@ -11,7 +11,8 @@ import org.elasticsearch.compute.data.Block;
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 class CountGroupingAggregatorFunction implements GroupingAggregatorFuncti
}
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 class CountGroupingAggregatorFunction implements GroupingAggregatorFuncti
}
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 @@ public class CountGroupingAggregatorFunction implements GroupingAggregatorFuncti
}
}
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 @@ public class CountGroupingAggregatorFunction implements GroupingAggregatorFuncti
/**
* 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;

View File

@ -10,6 +10,8 @@ package org.elasticsearch.compute.aggregation;
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 @@ record FilteredGroupingAggregatorFunction(GroupingAggregatorFunction next, EvalO
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 @@ record FilteredGroupingAggregatorFunction(GroupingAggregatorFunction next, EvalO
}
}
@Override
public void add(int positionOffset, IntVector groupIds) {
add(positionOffset, groupIds.asBlock());
}
@Override
public void close() {
Releasables.close(mask, nextAdd);

View File

@ -10,6 +10,8 @@ package org.elasticsearch.compute.aggregation;
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 class FromPartialGroupingAggregatorFunction implements GroupingAggregator
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);

View File

@ -9,6 +9,8 @@ package org.elasticsearch.compute.aggregation;
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 class GroupingAggregator implements Releasable {
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);

View File

@ -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 @@ public interface GroupingAggregatorFunction extends Releasable {
* be skipped entirely or the groupIds block could contain a
* {@code null} value at that position.
* </p>
* <p>
* This method delegates the processing to the other overloads for specific groupIds block types.
* </p>
* @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}

View File

@ -12,6 +12,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.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;

View File

@ -19,7 +19,7 @@ import java.util.Objects;
/**
* Block implementation representing a constant null value.
*/
final class ConstantNullBlock extends AbstractNonThreadSafeRefCounted
public final class ConstantNullBlock extends AbstractNonThreadSafeRefCounted
implements
BooleanBlock,
IntBlock,

View File

@ -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);

View File

@ -20,7 +20,8 @@ import org.elasticsearch.compute.aggregation.GroupingAggregatorEvaluationContext
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 @@ public class HashAggregationOperator implements Operator {
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

View File

@ -12,13 +12,17 @@ import org.apache.lucene.util.BytesRef;
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.CannedSourceOperator;
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.List;
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 @@ public abstract class GroupingAggregatorFunctionTestCase extends ForkingOperator
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 abstract class GroupingAggregatorFunctionTestCase extends ForkingOperator
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 abstract class GroupingAggregatorFunctionTestCase extends ForkingOperator
}
}
@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 abstract class GroupingAggregatorFunctionTestCase extends ForkingOperator
};
}
/**
* Custom {@link HashAggregationOperator.HashAggregationOperatorFactory} implementation that
* randomizes the GroupIds block type passed to AddInput.
* <p>
* This helps testing the different overloads of
* {@link org.elasticsearch.compute.aggregation.GroupingAggregatorFunction.AddInput#add}
* </p>
*/
private record RandomizingHashAggregationOperatorFactory(
List<BlockHash.GroupSpec> groups,
AggregatorMode aggregatorMode,
List<GroupingAggregator.Factory> aggregators,
int maxPageSize,
AnalysisRegistry analysisRegistry
) implements Operator.OperatorFactory {
@Override
public Operator get(DriverContext driverContext) {
Supplier<BlockHash> 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();
}
}
}

View File

@ -11,6 +11,8 @@ import org.elasticsearch.common.unit.ByteSizeValue;
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 @@ public class AddPageTests extends ESTestCase {
private class TestAddInput implements GroupingAggregatorFunction.AddInput {
private final List<Added> added = new ArrayList<>();
@Override
public void add(int positionOffset, IntBlock groupIds) {
private void addBlock(int positionOffset, IntBlock groupIds) {
List<List<Integer>> result = new ArrayList<>(groupIds.getPositionCount());
for (int p = 0; p < groupIds.getPositionCount(); p++) {
int valueCount = groupIds.getValueCount(p);
@ -172,9 +173,19 @@ public class AddPageTests extends ESTestCase {
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 @@ public class AddPageTests extends ESTestCase {
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++;
}

View File

@ -19,6 +19,8 @@ import org.elasticsearch.compute.data.BytesRefBlock;
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 class BlockHashTests extends BlockHashTestCase {
) {
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 class BlockHashTests extends BlockHashTestCase {
});
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 class BlockHashTests extends BlockHashTestCase {
Holder<IntVector> 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 class BlockHashTests extends BlockHashTestCase {
});
Holder<IntVector> 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 class BlockHashTests extends BlockHashTestCase {
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 @@ public class BlockHashTests extends BlockHashTestCase {
static void hash(boolean collectKeys, BlockHash blockHash, Consumer<OrdsAndKeys> 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 class BlockHashTests extends BlockHashTestCase {
}
}
@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

View File

@ -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.
* <p>
* Its methods can be overridden to implement custom behaviours or checks.
* </p>
*/
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<IntBlock> 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();
}
}

View File

@ -25,6 +25,8 @@ import org.elasticsearch.compute.data.BlockFactory;
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 class CategorizeBlockHashTests extends BlockHashTestCase {
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 class CategorizeBlockHashTests extends BlockHashTestCase {
}
}
@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 class CategorizeBlockHashTests extends BlockHashTestCase {
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 class CategorizeBlockHashTests extends BlockHashTestCase {
}
}
@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 class CategorizeBlockHashTests extends BlockHashTestCase {
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 class CategorizeBlockHashTests extends BlockHashTestCase {
}
}
@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 class CategorizeBlockHashTests extends BlockHashTestCase {
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 class CategorizeBlockHashTests extends BlockHashTestCase {
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 class CategorizeBlockHashTests extends BlockHashTestCase {
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<Integer> values = IntStream.range(0, groupIds.getPositionCount())
.map(groupIds::getInt)
.boxed()
@ -312,9 +349,19 @@ public class CategorizeBlockHashTests extends BlockHashTestCase {
}
}
@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 class CategorizeBlockHashTests extends BlockHashTestCase {
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<Integer> values = IntStream.range(0, groupIds.getPositionCount())
.map(groupIds::getInt)
.boxed()
@ -336,9 +382,19 @@ public class CategorizeBlockHashTests extends BlockHashTestCase {
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

View File

@ -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...).
* <p>
* 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.
* </p>
*/
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);
}
}