@@ -95,7 +95,8 @@ static void selfTest() {
9595 try {
9696 for (String groups : ValuesAggregatorBenchmark .class .getField ("groups" ).getAnnotationsByType (Param .class )[0 ].value ()) {
9797 for (String dataType : ValuesAggregatorBenchmark .class .getField ("dataType" ).getAnnotationsByType (Param .class )[0 ].value ()) {
98- run (Integer .parseInt (groups ), dataType , 10 );
98+ run (Integer .parseInt (groups ), dataType , 10 , 0 );
99+ run (Integer .parseInt (groups ), dataType , 10 , 1 );
99100 }
100101 }
101102 } catch (NoSuchFieldException e ) {
@@ -113,7 +114,10 @@ static void selfTest() {
113114 @ Param ({ BYTES_REF , INT , LONG })
114115 public String dataType ;
115116
116- private static Operator operator (DriverContext driverContext , int groups , String dataType ) {
117+ @ Param ({ "0" , "1" })
118+ public int numOrdinalMerges ;
119+
120+ private static Operator operator (DriverContext driverContext , int groups , String dataType , int numOrdinalMerges ) {
117121 if (groups == 1 ) {
118122 return new AggregationOperator (
119123 List .of (supplier (dataType ).aggregatorFactory (AggregatorMode .SINGLE , List .of (0 )).apply (driverContext )),
@@ -125,7 +129,24 @@ private static Operator operator(DriverContext driverContext, int groups, String
125129 List .of (supplier (dataType ).groupingAggregatorFactory (AggregatorMode .SINGLE , List .of (1 ))),
126130 () -> BlockHash .build (groupSpec , driverContext .blockFactory (), 16 * 1024 , false ),
127131 driverContext
128- );
132+ ) {
133+ @ Override
134+ public Page getOutput () {
135+ mergeOrdinal ();
136+ return super .getOutput ();
137+ }
138+
139+ // simulate OrdinalsGroupingOperator
140+ void mergeOrdinal () {
141+ var merged = supplier (dataType ).groupingAggregatorFactory (AggregatorMode .SINGLE , List .of (1 )).apply (driverContext );
142+ for (int i = 0 ; i < numOrdinalMerges ; i ++) {
143+ for (int p = 0 ; p < groups ; p ++) {
144+ merged .addIntermediateRow (p , aggregators .getFirst (), p );
145+ }
146+ }
147+ aggregators .set (0 , merged );
148+ }
149+ };
129150 }
130151
131152 private static AggregatorFunctionSupplier supplier (String dataType ) {
@@ -331,12 +352,12 @@ private static Block groupingBlock(int groups) {
331352
332353 @ Benchmark
333354 public void run () {
334- run (groups , dataType , OP_COUNT );
355+ run (groups , dataType , OP_COUNT , numOrdinalMerges );
335356 }
336357
337- private static void run (int groups , String dataType , int opCount ) {
358+ private static void run (int groups , String dataType , int opCount , int numOrdinalMerges ) {
338359 DriverContext driverContext = driverContext ();
339- try (Operator operator = operator (driverContext , groups , dataType )) {
360+ try (Operator operator = operator (driverContext , groups , dataType , numOrdinalMerges )) {
340361 Page page = page (groups , dataType );
341362 for (int i = 0 ; i < opCount ; i ++) {
342363 operator .addInput (page .shallowCopy ());
0 commit comments