Skip to content

Commit 539dd68

Browse files
ivanceaafoucret
authored andcommitted
ESQL: Specialize aggs AddInput for each block type (elastic#127582)
* Specialize block parameters on AddInput (cherry picked from commit a5855c1) * Call the specific add() methods for eacj block type (cherry picked from commit 5176663) * Implement custom add in HashAggregationOperator (cherry picked from commit fb670bd) * 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
1 parent a665523 commit 539dd68

File tree

93 files changed

+4852
-1100
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+4852
-1100
lines changed

docs/changelog/127582.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 127582
2+
summary: Specialize ags `AddInput` for each block type
3+
area: ES|QL
4+
type: enhancement
5+
issues: []

x-pack/plugin/esql/compute/gen/src/main/java/org/elasticsearch/compute/gen/GroupingAggregatorImplementer.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@
5454
import static org.elasticsearch.compute.gen.Types.GROUPING_AGGREGATOR_FUNCTION;
5555
import static org.elasticsearch.compute.gen.Types.GROUPING_AGGREGATOR_FUNCTION_ADD_INPUT;
5656
import static org.elasticsearch.compute.gen.Types.INTERMEDIATE_STATE_DESC;
57-
import static org.elasticsearch.compute.gen.Types.INT_BLOCK;
57+
import static org.elasticsearch.compute.gen.Types.INT_ARRAY_BLOCK;
58+
import static org.elasticsearch.compute.gen.Types.INT_BIG_ARRAY_BLOCK;
5859
import static org.elasticsearch.compute.gen.Types.INT_VECTOR;
5960
import static org.elasticsearch.compute.gen.Types.LIST_AGG_FUNC_DESC;
6061
import static org.elasticsearch.compute.gen.Types.LIST_INTEGER;
@@ -76,6 +77,8 @@
7677
* and break-point-able as possible.
7778
*/
7879
public class GroupingAggregatorImplementer {
80+
private static final List<ClassName> GROUP_IDS_CLASSES = List.of(INT_ARRAY_BLOCK, INT_BIG_ARRAY_BLOCK, INT_VECTOR);
81+
7982
private final TypeElement declarationType;
8083
private final List<TypeMirror> warnExceptions;
8184
private final ExecutableElement init;
@@ -196,10 +199,10 @@ private TypeSpec type() {
196199
builder.addMethod(intermediateStateDesc());
197200
builder.addMethod(intermediateBlockCount());
198201
builder.addMethod(prepareProcessPage());
199-
builder.addMethod(addRawInputLoop(INT_VECTOR, blockType(aggParam.type())));
200-
builder.addMethod(addRawInputLoop(INT_VECTOR, vectorType(aggParam.type())));
201-
builder.addMethod(addRawInputLoop(INT_BLOCK, blockType(aggParam.type())));
202-
builder.addMethod(addRawInputLoop(INT_BLOCK, vectorType(aggParam.type())));
202+
for (ClassName groupIdClass : GROUP_IDS_CLASSES) {
203+
builder.addMethod(addRawInputLoop(groupIdClass, blockType(aggParam.type())));
204+
builder.addMethod(addRawInputLoop(groupIdClass, vectorType(aggParam.type())));
205+
}
203206
builder.addMethod(selectedMayContainUnseenGroups());
204207
builder.addMethod(addIntermediateInput());
205208
builder.addMethod(addIntermediateRowInput());
@@ -347,15 +350,12 @@ private TypeSpec addInput(Consumer<MethodSpec.Builder> addBlock) {
347350
TypeSpec.Builder builder = TypeSpec.anonymousClassBuilder("");
348351
builder.addSuperinterface(GROUPING_AGGREGATOR_FUNCTION_ADD_INPUT);
349352

350-
MethodSpec.Builder block = MethodSpec.methodBuilder("add").addAnnotation(Override.class).addModifiers(Modifier.PUBLIC);
351-
block.addParameter(TypeName.INT, "positionOffset").addParameter(INT_BLOCK, "groupIds");
352-
addBlock.accept(block);
353-
builder.addMethod(block.build());
354-
355-
MethodSpec.Builder vector = MethodSpec.methodBuilder("add").addAnnotation(Override.class).addModifiers(Modifier.PUBLIC);
356-
vector.addParameter(TypeName.INT, "positionOffset").addParameter(INT_VECTOR, "groupIds");
357-
addBlock.accept(vector);
358-
builder.addMethod(vector.build());
353+
for (ClassName groupIdsType : GROUP_IDS_CLASSES) {
354+
MethodSpec.Builder vector = MethodSpec.methodBuilder("add").addAnnotation(Override.class).addModifiers(Modifier.PUBLIC);
355+
vector.addParameter(TypeName.INT, "positionOffset").addParameter(groupIdsType, "groupIds");
356+
addBlock.accept(vector);
357+
builder.addMethod(vector.build());
358+
}
359359

360360
MethodSpec.Builder close = MethodSpec.methodBuilder("close").addAnnotation(Override.class).addModifiers(Modifier.PUBLIC);
361361
builder.addMethod(close.build());

x-pack/plugin/esql/compute/gen/src/main/java/org/elasticsearch/compute/gen/Types.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public class Types {
4646
static final ClassName BOOLEAN_BLOCK = ClassName.get(DATA_PACKAGE, "BooleanBlock");
4747
static final ClassName BYTES_REF_BLOCK = ClassName.get(DATA_PACKAGE, "BytesRefBlock");
4848
static final ClassName INT_BLOCK = ClassName.get(DATA_PACKAGE, "IntBlock");
49+
static final ClassName INT_ARRAY_BLOCK = ClassName.get(DATA_PACKAGE, "IntArrayBlock");
50+
static final ClassName INT_BIG_ARRAY_BLOCK = ClassName.get(DATA_PACKAGE, "IntBigArrayBlock");
4951
static final ClassName LONG_BLOCK = ClassName.get(DATA_PACKAGE, "LongBlock");
5052
static final ClassName DOUBLE_BLOCK = ClassName.get(DATA_PACKAGE, "DoubleBlock");
5153
static final ClassName FLOAT_BLOCK = ClassName.get(DATA_PACKAGE, "FloatBlock");

x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/BooleanArrayBlock.java

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/BytesRefArrayBlock.java

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/DoubleArrayBlock.java

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/FloatArrayBlock.java

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/IntArrayBlock.java

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x-pack/plugin/esql/compute/src/main/generated-src/org/elasticsearch/compute/data/LongArrayBlock.java

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

x-pack/plugin/esql/compute/src/main/generated/org/elasticsearch/compute/aggregation/CountDistinctBooleanGroupingAggregatorFunction.java

Lines changed: 61 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)