diff --git a/benchmarks/src/main/java/org/elasticsearch/benchmark/compute/operator/AggregatorBenchmark.java b/benchmarks/src/main/java/org/elasticsearch/benchmark/compute/operator/AggregatorBenchmark.java
index c4037bb4920c..545960c7003a 100644
--- a/benchmarks/src/main/java/org/elasticsearch/benchmark/compute/operator/AggregatorBenchmark.java
+++ b/benchmarks/src/main/java/org/elasticsearch/benchmark/compute/operator/AggregatorBenchmark.java
@@ -144,7 +144,7 @@ private static Operator operator(String grouping, String op, String dataType) {
DriverContext driverContext = driverContext();
return new HashAggregationOperator(
List.of(supplier(op, dataType, groups.size()).groupingAggregatorFactory(AggregatorMode.SINGLE)),
- () -> BlockHash.build(groups, driverContext, 16 * 1024, false),
+ () -> BlockHash.build(groups, BIG_ARRAYS, 16 * 1024, false),
driverContext
);
}
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BlockHash.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BlockHash.java
index 9ec139f3e0dc..49ec71560450 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BlockHash.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BlockHash.java
@@ -18,7 +18,6 @@
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
-import org.elasticsearch.compute.operator.DriverContext;
import org.elasticsearch.compute.operator.HashAggregationOperator;
import org.elasticsearch.core.Releasable;
@@ -70,39 +69,39 @@ public abstract sealed class BlockHash implements Releasable, SeenGroupIds //
*/
public static BlockHash build(
List groups,
- DriverContext driverContext,
+ BigArrays bigArrays,
int emitBatchSize,
boolean allowBrokenOptimizations
) {
if (groups.size() == 1) {
- return newForElementType(groups.get(0).channel(), groups.get(0).elementType(), driverContext);
+ return newForElementType(groups.get(0).channel(), groups.get(0).elementType(), bigArrays);
}
if (allowBrokenOptimizations && groups.size() == 2) {
var g1 = groups.get(0);
var g2 = groups.get(1);
if (g1.elementType() == ElementType.LONG && g2.elementType() == ElementType.LONG) {
- return new LongLongBlockHash(driverContext, g1.channel(), g2.channel(), emitBatchSize);
+ return new LongLongBlockHash(bigArrays, g1.channel(), g2.channel(), emitBatchSize);
}
if (g1.elementType() == ElementType.BYTES_REF && g2.elementType() == ElementType.LONG) {
- return new BytesRefLongBlockHash(driverContext, g1.channel(), g2.channel(), false, emitBatchSize);
+ return new BytesRefLongBlockHash(bigArrays, g1.channel(), g2.channel(), false, emitBatchSize);
}
if (g1.elementType() == ElementType.LONG && g2.elementType() == ElementType.BYTES_REF) {
- return new BytesRefLongBlockHash(driverContext, g2.channel(), g1.channel(), true, emitBatchSize);
+ return new BytesRefLongBlockHash(bigArrays, g2.channel(), g1.channel(), true, emitBatchSize);
}
}
- return new PackedValuesBlockHash(groups, driverContext, emitBatchSize);
+ return new PackedValuesBlockHash(groups, bigArrays, emitBatchSize);
}
/**
* Creates a specialized hash table that maps a {@link Block} of the given input element type to ids.
*/
- private static BlockHash newForElementType(int channel, ElementType type, DriverContext driverContext) {
+ private static BlockHash newForElementType(int channel, ElementType type, BigArrays bigArrays) {
return switch (type) {
- case BOOLEAN -> new BooleanBlockHash(channel, driverContext);
- case INT -> new IntBlockHash(channel, driverContext);
- case LONG -> new LongBlockHash(channel, driverContext);
- case DOUBLE -> new DoubleBlockHash(channel, driverContext);
- case BYTES_REF -> new BytesRefBlockHash(channel, driverContext);
+ case BOOLEAN -> new BooleanBlockHash(channel);
+ case INT -> new IntBlockHash(channel, bigArrays);
+ case LONG -> new LongBlockHash(channel, bigArrays);
+ case DOUBLE -> new DoubleBlockHash(channel, bigArrays);
+ case BYTES_REF -> new BytesRefBlockHash(channel, bigArrays);
default -> throw new IllegalArgumentException("unsupported grouping element type [" + type + "]");
};
}
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BooleanBlockHash.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BooleanBlockHash.java
index f282ae325f5a..1a7bad4366be 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BooleanBlockHash.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BooleanBlockHash.java
@@ -10,13 +10,12 @@
import org.elasticsearch.common.util.BigArrays;
import org.elasticsearch.common.util.BitArray;
import org.elasticsearch.compute.aggregation.GroupingAggregatorFunction;
-import org.elasticsearch.compute.data.BlockFactory;
import org.elasticsearch.compute.data.BooleanBlock;
import org.elasticsearch.compute.data.BooleanVector;
+import org.elasticsearch.compute.data.IntArrayVector;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
-import org.elasticsearch.compute.operator.DriverContext;
import org.elasticsearch.compute.operator.MultivalueDedupeBoolean;
import static org.elasticsearch.compute.operator.MultivalueDedupeBoolean.FALSE_ORD;
@@ -30,11 +29,9 @@
final class BooleanBlockHash extends BlockHash {
private final int channel;
private final boolean[] everSeen = new boolean[TRUE_ORD + 1];
- private final BlockFactory blockFactory;
- BooleanBlockHash(int channel, DriverContext driverContext) {
+ BooleanBlockHash(int channel) {
this.channel = channel;
- this.blockFactory = driverContext.blockFactory();
}
@Override
@@ -53,7 +50,7 @@ private IntVector add(BooleanVector vector) {
for (int i = 0; i < vector.getPositionCount(); i++) {
groups[i] = MultivalueDedupeBoolean.hashOrd(everSeen, vector.getBoolean(i));
}
- return blockFactory.newIntArrayVector(groups, groups.length);
+ return new IntArrayVector(groups, groups.length);
}
private IntBlock add(BooleanBlock block) {
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BytesRefBlockHash.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BytesRefBlockHash.java
index 6e75d0d02394..ee77e5e3c19b 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BytesRefBlockHash.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BytesRefBlockHash.java
@@ -17,13 +17,13 @@
import org.elasticsearch.common.util.BytesRefHash;
import org.elasticsearch.compute.aggregation.GroupingAggregatorFunction;
import org.elasticsearch.compute.aggregation.SeenGroupIds;
-import org.elasticsearch.compute.data.BlockFactory;
+import org.elasticsearch.compute.data.BytesRefArrayVector;
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
+import org.elasticsearch.compute.data.IntArrayVector;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
-import org.elasticsearch.compute.operator.DriverContext;
import org.elasticsearch.compute.operator.MultivalueDedupe;
import org.elasticsearch.compute.operator.MultivalueDedupeBytesRef;
@@ -45,12 +45,10 @@ final class BytesRefBlockHash extends BlockHash {
*
*/
private boolean seenNull;
- private final BlockFactory blockFactory;
- BytesRefBlockHash(int channel, DriverContext driverContext) {
+ BytesRefBlockHash(int channel, BigArrays bigArrays) {
this.channel = channel;
- this.blockFactory = driverContext.blockFactory();
- this.bytesRefHash = new BytesRefHash(1, driverContext.bigArrays());
+ this.bytesRefHash = new BytesRefHash(1, bigArrays);
}
@Override
@@ -69,7 +67,7 @@ private IntVector add(BytesRefVector vector) {
for (int i = 0; i < vector.getPositionCount(); i++) {
groups[i] = Math.toIntExact(hashOrdToGroupNullReserved(bytesRefHash.add(vector.getBytesRef(i, bytes))));
}
- return blockFactory.newIntArrayVector(groups, vector.getPositionCount());
+ return new IntArrayVector(groups, vector.getPositionCount());
}
private IntBlock add(BytesRefBlock block) {
@@ -101,7 +99,7 @@ public BytesRefBlock[] getKeys() {
bytesRefHash.getBytesRefs().writeTo(out);
try (StreamInput in = out.bytes().streamInput()) {
return new BytesRefBlock[] {
- blockFactory.newBytesRefArrayVector(new BytesRefArray(in, BigArrays.NON_RECYCLING_INSTANCE), size).asBlock() };
+ new BytesRefArrayVector(new BytesRefArray(in, BigArrays.NON_RECYCLING_INSTANCE), size).asBlock() };
}
} catch (IOException e) {
throw new IllegalStateException(e);
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BytesRefLongBlockHash.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BytesRefLongBlockHash.java
index 4283b9b3ea30..0c5b60f471f8 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BytesRefLongBlockHash.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/BytesRefLongBlockHash.java
@@ -16,14 +16,13 @@
import org.elasticsearch.compute.aggregation.GroupingAggregatorFunction;
import org.elasticsearch.compute.aggregation.SeenGroupIds;
import org.elasticsearch.compute.data.Block;
-import org.elasticsearch.compute.data.BlockFactory;
import org.elasticsearch.compute.data.BytesRefBlock;
import org.elasticsearch.compute.data.BytesRefVector;
+import org.elasticsearch.compute.data.IntArrayVector;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
import org.elasticsearch.compute.data.Page;
-import org.elasticsearch.compute.operator.DriverContext;
import org.elasticsearch.core.Releasables;
/**
@@ -36,21 +35,19 @@ final class BytesRefLongBlockHash extends BlockHash {
private final int emitBatchSize;
private final BytesRefHash bytesHash;
private final LongLongHash finalHash;
- private final BlockFactory blockFactory;
- BytesRefLongBlockHash(DriverContext driverContext, int channel1, int channel2, boolean reverseOutput, int emitBatchSize) {
+ BytesRefLongBlockHash(BigArrays bigArrays, int channel1, int channel2, boolean reverseOutput, int emitBatchSize) {
this.channel1 = channel1;
this.channel2 = channel2;
this.reverseOutput = reverseOutput;
this.emitBatchSize = emitBatchSize;
- this.blockFactory = driverContext.blockFactory();
boolean success = false;
BytesRefHash bytesHash = null;
LongLongHash longHash = null;
try {
- bytesHash = new BytesRefHash(1, driverContext.bigArrays());
- longHash = new LongLongHash(1, driverContext.bigArrays());
+ bytesHash = new BytesRefHash(1, bigArrays);
+ longHash = new LongLongHash(1, bigArrays);
this.bytesHash = bytesHash;
this.finalHash = longHash;
success = true;
@@ -88,7 +85,7 @@ public IntVector add(BytesRefVector vector1, LongVector vector2) {
long hash1 = hashOrdToGroup(bytesHash.add(vector1.getBytesRef(i, scratch)));
ords[i] = Math.toIntExact(hashOrdToGroup(finalHash.add(hash1, vector2.getLong(i))));
}
- return blockFactory.newIntArrayVector(ords, positions);
+ return new IntArrayVector(ords, positions);
}
private static final long[] EMPTY = new long[0];
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/DoubleBlockHash.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/DoubleBlockHash.java
index 52bf547dfad7..3a52beb9c2d8 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/DoubleBlockHash.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/DoubleBlockHash.java
@@ -13,13 +13,14 @@
import org.elasticsearch.compute.aggregation.GroupingAggregatorFunction;
import org.elasticsearch.compute.aggregation.SeenGroupIds;
import org.elasticsearch.compute.data.Block;
-import org.elasticsearch.compute.data.BlockFactory;
+import org.elasticsearch.compute.data.DoubleArrayBlock;
+import org.elasticsearch.compute.data.DoubleArrayVector;
import org.elasticsearch.compute.data.DoubleBlock;
import org.elasticsearch.compute.data.DoubleVector;
+import org.elasticsearch.compute.data.IntArrayVector;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
-import org.elasticsearch.compute.operator.DriverContext;
import org.elasticsearch.compute.operator.MultivalueDedupe;
import org.elasticsearch.compute.operator.MultivalueDedupeDouble;
@@ -40,12 +41,10 @@ final class DoubleBlockHash extends BlockHash {
*
*/
private boolean seenNull;
- private final BlockFactory blockFactory;
- DoubleBlockHash(int channel, DriverContext driverContext) {
+ DoubleBlockHash(int channel, BigArrays bigArrays) {
this.channel = channel;
- this.blockFactory = driverContext.blockFactory();
- this.longHash = new LongHash(1, driverContext.bigArrays());
+ this.longHash = new LongHash(1, bigArrays);
}
@Override
@@ -64,7 +63,7 @@ private IntVector add(DoubleVector vector) {
for (int i = 0; i < vector.getPositionCount(); i++) {
groups[i] = Math.toIntExact(hashOrdToGroupNullReserved(longHash.add(Double.doubleToLongBits(vector.getDouble(i)))));
}
- return blockFactory.newIntArrayVector(groups, groups.length);
+ return new IntArrayVector(groups, groups.length);
}
private IntBlock add(DoubleBlock block) {
@@ -83,7 +82,7 @@ public DoubleBlock[] getKeys() {
}
BitSet nulls = new BitSet(1);
nulls.set(0);
- return new DoubleBlock[] { blockFactory.newDoubleArrayBlock(keys, keys.length, null, nulls, Block.MvOrdering.ASCENDING) };
+ return new DoubleBlock[] { new DoubleArrayBlock(keys, keys.length, null, nulls, Block.MvOrdering.ASCENDING) };
}
final int size = Math.toIntExact(longHash.size());
@@ -93,7 +92,7 @@ public DoubleBlock[] getKeys() {
}
// TODO claim the array and wrap?
- return new DoubleBlock[] { blockFactory.newDoubleArrayVector(keys, keys.length).asBlock() };
+ return new DoubleBlock[] { new DoubleArrayVector(keys, keys.length).asBlock() };
}
@Override
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/IntBlockHash.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/IntBlockHash.java
index 00b7dfc79bfc..7e5f3c94b91c 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/IntBlockHash.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/IntBlockHash.java
@@ -13,11 +13,11 @@
import org.elasticsearch.compute.aggregation.GroupingAggregatorFunction;
import org.elasticsearch.compute.aggregation.SeenGroupIds;
import org.elasticsearch.compute.data.Block;
-import org.elasticsearch.compute.data.BlockFactory;
+import org.elasticsearch.compute.data.IntArrayBlock;
+import org.elasticsearch.compute.data.IntArrayVector;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
-import org.elasticsearch.compute.operator.DriverContext;
import org.elasticsearch.compute.operator.MultivalueDedupe;
import org.elasticsearch.compute.operator.MultivalueDedupeInt;
import org.elasticsearch.core.Releasables;
@@ -38,12 +38,10 @@ final class IntBlockHash extends BlockHash {
*
*/
private boolean seenNull;
- private final BlockFactory blockFactory;
- IntBlockHash(int channel, DriverContext driverContext) {
+ IntBlockHash(int channel, BigArrays bigArrays) {
this.channel = channel;
- this.blockFactory = driverContext.blockFactory();
- this.longHash = new LongHash(1, driverContext.bigArrays());
+ this.longHash = new LongHash(1, bigArrays);
}
@Override
@@ -63,7 +61,7 @@ private IntVector add(IntVector vector) {
for (int i = 0; i < vector.getPositionCount(); i++) {
groups[i] = Math.toIntExact(hashOrdToGroupNullReserved(longHash.add(vector.getInt(i))));
}
- return blockFactory.newIntArrayVector(groups, groups.length);
+ return new IntArrayVector(groups, groups.length);
}
private IntBlock add(IntBlock block) {
@@ -82,14 +80,14 @@ public IntBlock[] getKeys() {
}
BitSet nulls = new BitSet(1);
nulls.set(0);
- return new IntBlock[] { blockFactory.newIntArrayBlock(keys, keys.length, null, nulls, Block.MvOrdering.ASCENDING) };
+ return new IntBlock[] { new IntArrayBlock(keys, keys.length, null, nulls, Block.MvOrdering.ASCENDING) };
}
final int size = Math.toIntExact(longHash.size());
final int[] keys = new int[size];
for (int i = 0; i < size; i++) {
keys[i] = (int) longHash.get(i);
}
- return new IntBlock[] { blockFactory.newIntArrayVector(keys, keys.length).asBlock() };
+ return new IntBlock[] { new IntArrayVector(keys, keys.length).asBlock() };
}
@Override
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/LongBlockHash.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/LongBlockHash.java
index 919ca3dee6e3..b8b66e2197b6 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/LongBlockHash.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/LongBlockHash.java
@@ -13,13 +13,13 @@
import org.elasticsearch.compute.aggregation.GroupingAggregatorFunction;
import org.elasticsearch.compute.aggregation.SeenGroupIds;
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.LongArrayBlock;
+import org.elasticsearch.compute.data.LongArrayVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
import org.elasticsearch.compute.data.Page;
-import org.elasticsearch.compute.operator.DriverContext;
import org.elasticsearch.compute.operator.MultivalueDedupe;
import org.elasticsearch.compute.operator.MultivalueDedupeLong;
@@ -31,7 +31,6 @@
final class LongBlockHash extends BlockHash {
private final int channel;
private final LongHash longHash;
- private final BlockFactory blockFactory;
/**
* Have we seen any {@code null} values?
@@ -42,10 +41,9 @@ final class LongBlockHash extends BlockHash {
*/
private boolean seenNull;
- LongBlockHash(int channel, DriverContext driverContext) {
+ LongBlockHash(int channel, BigArrays bigArrays) {
this.channel = channel;
- this.blockFactory = driverContext.blockFactory();
- this.longHash = new LongHash(1, driverContext.bigArrays());
+ this.longHash = new LongHash(1, bigArrays);
}
@Override
@@ -83,7 +81,7 @@ public LongBlock[] getKeys() {
}
BitSet nulls = new BitSet(1);
nulls.set(0);
- return new LongBlock[] { blockFactory.newLongArrayBlock(keys, keys.length, null, nulls, Block.MvOrdering.ASCENDING) };
+ return new LongBlock[] { new LongArrayBlock(keys, keys.length, null, nulls, Block.MvOrdering.ASCENDING) };
}
final int size = Math.toIntExact(longHash.size());
@@ -93,7 +91,7 @@ public LongBlock[] getKeys() {
}
// TODO call something like takeKeyOwnership to claim the keys array directly
- return new LongBlock[] { blockFactory.newLongArrayVector(keys, keys.length).asBlock() };
+ return new LongBlock[] { new LongArrayVector(keys, keys.length).asBlock() };
}
@Override
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/LongLongBlockHash.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/LongLongBlockHash.java
index 1d610d2dd75b..9e4dbfe94311 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/LongLongBlockHash.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/LongLongBlockHash.java
@@ -14,13 +14,12 @@
import org.elasticsearch.compute.aggregation.GroupingAggregatorFunction;
import org.elasticsearch.compute.aggregation.SeenGroupIds;
import org.elasticsearch.compute.data.Block;
-import org.elasticsearch.compute.data.BlockFactory;
+import org.elasticsearch.compute.data.IntArrayVector;
import org.elasticsearch.compute.data.IntBlock;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.LongVector;
import org.elasticsearch.compute.data.Page;
-import org.elasticsearch.compute.operator.DriverContext;
import org.elasticsearch.core.Releasables;
/**
@@ -31,14 +30,12 @@ final class LongLongBlockHash extends BlockHash {
private final int channel2;
private final int emitBatchSize;
private final LongLongHash hash;
- private final BlockFactory blockFactory;
- LongLongBlockHash(DriverContext driverContext, int channel1, int channel2, int emitBatchSize) {
+ LongLongBlockHash(BigArrays bigArrays, int channel1, int channel2, int emitBatchSize) {
this.channel1 = channel1;
this.channel2 = channel2;
this.emitBatchSize = emitBatchSize;
- this.blockFactory = driverContext.blockFactory();
- this.hash = new LongLongHash(1, driverContext.bigArrays());
+ this.hash = new LongLongHash(1, bigArrays);
}
@Override
@@ -65,7 +62,7 @@ private IntVector add(LongVector vector1, LongVector vector2) {
for (int i = 0; i < positions; i++) {
ords[i] = Math.toIntExact(hashOrdToGroup(hash.add(vector1.getLong(i), vector2.getLong(i))));
}
- return blockFactory.newIntArrayVector(ords, positions);
+ return new IntArrayVector(ords, positions);
}
private static final long[] EMPTY = new long[0];
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/PackedValuesBlockHash.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/PackedValuesBlockHash.java
index 5968717d99a2..31f65e9b7005 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/PackedValuesBlockHash.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/aggregation/blockhash/PackedValuesBlockHash.java
@@ -16,12 +16,10 @@
import org.elasticsearch.compute.aggregation.GroupingAggregatorFunction;
import org.elasticsearch.compute.aggregation.SeenGroupIds;
import org.elasticsearch.compute.data.Block;
-import org.elasticsearch.compute.data.BlockFactory;
import org.elasticsearch.compute.data.ElementType;
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.Page;
import org.elasticsearch.compute.operator.BatchEncoder;
-import org.elasticsearch.compute.operator.DriverContext;
import org.elasticsearch.compute.operator.HashAggregationOperator;
import org.elasticsearch.compute.operator.MultivalueDedupe;
import org.elasticsearch.logging.LogManager;
@@ -60,13 +58,11 @@ final class PackedValuesBlockHash extends BlockHash {
private final int emitBatchSize;
private final BytesRefHash bytesRefHash;
private final int nullTrackingBytes;
- private final BlockFactory blockFactory;
- PackedValuesBlockHash(List groups, DriverContext driverContext, int emitBatchSize) {
+ PackedValuesBlockHash(List groups, BigArrays bigArrays, int emitBatchSize) {
this.groups = groups;
this.emitBatchSize = emitBatchSize;
- this.blockFactory = driverContext.blockFactory();
- this.bytesRefHash = new BytesRefHash(1, driverContext.bigArrays());
+ this.bytesRefHash = new BytesRefHash(1, bigArrays);
this.nullTrackingBytes = groups.size() / 8 + 1;
}
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/HashAggregationOperator.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/HashAggregationOperator.java
index 4ba9cf5c6cc8..585ab18c75e2 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/HashAggregationOperator.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/HashAggregationOperator.java
@@ -39,11 +39,7 @@ public record HashAggregationOperatorFactory(
) implements OperatorFactory {
@Override
public Operator get(DriverContext driverContext) {
- return new HashAggregationOperator(
- aggregators,
- () -> BlockHash.build(groups, driverContext, maxPageSize, false),
- driverContext
- );
+ return new HashAggregationOperator(aggregators, () -> BlockHash.build(groups, bigArrays, maxPageSize, false), driverContext);
}
@Override
diff --git a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/OrdinalsGroupingOperator.java b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/OrdinalsGroupingOperator.java
index e55a0829008a..996561121df8 100644
--- a/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/OrdinalsGroupingOperator.java
+++ b/x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/OrdinalsGroupingOperator.java
@@ -422,12 +422,7 @@ private static class ValuesAggregator implements Releasable {
this.extractor = new ValuesSourceReaderOperator(sources, docChannel, groupingField);
this.aggregator = new HashAggregationOperator(
aggregatorFactories,
- () -> BlockHash.build(
- List.of(new GroupSpec(channelIndex, sources.get(0).elementType())),
- driverContext,
- maxPageSize,
- false
- ),
+ () -> BlockHash.build(List.of(new GroupSpec(channelIndex, sources.get(0).elementType())), bigArrays, maxPageSize, false),
driverContext
);
}
diff --git a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/OperatorTests.java b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/OperatorTests.java
index fb894c1ca5a1..a182df8cb42e 100644
--- a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/OperatorTests.java
+++ b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/OperatorTests.java
@@ -249,7 +249,7 @@ public String toString() {
List.of(CountAggregatorFunction.supplier(bigArrays, List.of(1, 2)).groupingAggregatorFactory(FINAL)),
() -> BlockHash.build(
List.of(new HashAggregationOperator.GroupSpec(0, ElementType.BYTES_REF)),
- driverContext,
+ bigArrays,
randomPageSize(),
false
),
diff --git a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashRandomizedTests.java b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashRandomizedTests.java
index 11975d902387..af34d5733de1 100644
--- a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashRandomizedTests.java
+++ b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashRandomizedTests.java
@@ -19,7 +19,6 @@
import org.elasticsearch.compute.data.Block;
import org.elasticsearch.compute.data.BlockFactory;
import org.elasticsearch.compute.data.ElementType;
-import org.elasticsearch.compute.operator.DriverContext;
import org.elasticsearch.compute.operator.HashAggregationOperator;
import org.elasticsearch.compute.operator.MultivalueDedupeTests;
import org.elasticsearch.indices.breaker.NoneCircuitBreakerService;
@@ -174,13 +173,10 @@ private BlockHash newBlockHash(int emitBatchSize, List types) {
for (int c = 0; c < types.size(); c++) {
specs.add(new HashAggregationOperator.GroupSpec(c, types.get(c)));
}
- DriverContext driverContext = new DriverContext(
- new MockBigArrays(PageCacheRecycler.NON_RECYCLING_INSTANCE, new NoneCircuitBreakerService()),
- blockFactory
- );
+ BigArrays bigArrays = new MockBigArrays(PageCacheRecycler.NON_RECYCLING_INSTANCE, new NoneCircuitBreakerService());
return forcePackedHash
- ? new PackedValuesBlockHash(specs, driverContext, emitBatchSize)
- : BlockHash.build(specs, driverContext, emitBatchSize, true);
+ ? new PackedValuesBlockHash(specs, bigArrays, emitBatchSize)
+ : BlockHash.build(specs, bigArrays, emitBatchSize, true);
}
private static class KeyComparator implements Comparator> {
diff --git a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashTests.java b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashTests.java
index 131b351eb09b..6e7aa383b381 100644
--- a/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashTests.java
+++ b/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/aggregation/blockhash/BlockHashTests.java
@@ -26,7 +26,6 @@
import org.elasticsearch.compute.data.IntVector;
import org.elasticsearch.compute.data.LongBlock;
import org.elasticsearch.compute.data.Page;
-import org.elasticsearch.compute.operator.DriverContext;
import org.elasticsearch.compute.operator.HashAggregationOperator;
import org.elasticsearch.core.Releasables;
import org.elasticsearch.indices.breaker.NoneCircuitBreakerService;
@@ -1069,14 +1068,11 @@ private void hash(Consumer callback, int emitBatchSize, Block... va
for (int c = 0; c < values.length; c++) {
specs.add(new HashAggregationOperator.GroupSpec(c, values[c].elementType()));
}
- DriverContext driverContext = new DriverContext(
- new MockBigArrays(PageCacheRecycler.NON_RECYCLING_INSTANCE, new NoneCircuitBreakerService()),
- blockFactory
- );
+ BigArrays bigArrays = new MockBigArrays(PageCacheRecycler.NON_RECYCLING_INSTANCE, new NoneCircuitBreakerService());
try (
BlockHash blockHash = forcePackedHash
- ? new PackedValuesBlockHash(specs, driverContext, emitBatchSize)
- : BlockHash.build(specs, driverContext, emitBatchSize, true)
+ ? new PackedValuesBlockHash(specs, bigArrays, emitBatchSize)
+ : BlockHash.build(specs, bigArrays, emitBatchSize, true)
) {
hash(true, blockHash, callback, values);
}
diff --git a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/planner/TestPhysicalOperationProviders.java b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/planner/TestPhysicalOperationProviders.java
index 654acff97f10..d10f58671d71 100644
--- a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/planner/TestPhysicalOperationProviders.java
+++ b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/planner/TestPhysicalOperationProviders.java
@@ -259,7 +259,7 @@ public Operator get(DriverContext driverContext) {
aggregators,
() -> BlockHash.build(
List.of(new HashAggregationOperator.GroupSpec(groupByChannel, groupElementType)),
- driverContext,
+ bigArrays,
pageSize,
false
),