From ef58dc576b1c4e35bab97e666fe457f2e317b7ba Mon Sep 17 00:00:00 2001 From: Dain Sundstrom Date: Wed, 31 Jan 2024 18:52:41 -0800 Subject: [PATCH] Add recordValueNullOffset to simplify reading TypedKeyValueHeap code --- .../aggregation/minmaxbyn/TypedKeyValueHeap.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core/trino-main/src/main/java/io/trino/operator/aggregation/minmaxbyn/TypedKeyValueHeap.java b/core/trino-main/src/main/java/io/trino/operator/aggregation/minmaxbyn/TypedKeyValueHeap.java index 021939390084..60e7a64b973c 100644 --- a/core/trino-main/src/main/java/io/trino/operator/aggregation/minmaxbyn/TypedKeyValueHeap.java +++ b/core/trino-main/src/main/java/io/trino/operator/aggregation/minmaxbyn/TypedKeyValueHeap.java @@ -48,6 +48,7 @@ public final class TypedKeyValueHeap private final Type valueType; private final int capacity; + private final int recordValueNullOffset; private final int recordKeyOffset; private final int recordValueOffset; @@ -100,7 +101,8 @@ public TypedKeyValueHeap( boolean variableWidth = keyVariableWidth || valueVariableWidth; variableWidthData = variableWidth ? new VariableWidthData() : null; - recordKeyOffset = (variableWidth ? POINTER_SIZE : 0) + 1; + recordValueNullOffset = (variableWidth ? POINTER_SIZE : 0); + recordKeyOffset = recordValueNullOffset + 1; recordValueOffset = recordKeyOffset + keyType.getFlatFixedSize(); recordSize = recordValueOffset + valueType.getFlatFixedSize(); @@ -125,6 +127,7 @@ public TypedKeyValueHeap(TypedKeyValueHeap typedHeap) this.keyVariableWidth = typedHeap.keyVariableWidth; this.valueVariableWidth = typedHeap.valueVariableWidth; + this.recordValueNullOffset = typedHeap.recordValueNullOffset; this.recordKeyOffset = typedHeap.recordKeyOffset; this.recordValueOffset = typedHeap.recordValueOffset; this.recordSize = typedHeap.recordSize; @@ -208,7 +211,7 @@ private void write(int index, @Nullable BlockBuilder keyBlockBuilder, BlockBuild throw new RuntimeException(throwable); } } - if (fixedChunk[recordOffset + recordKeyOffset - 1] != 0) { + if (fixedChunk[recordOffset + recordValueNullOffset] != 0) { valueBlockBuilder.appendNull(); } else { @@ -260,7 +263,7 @@ private void clear(int index) positionCount, (fixedSizeOffset, variableWidthChunk, variableWidthChunkOffset) -> { int keyVariableWidth = keyType.relocateFlatVariableWidthOffsets(fixedChunk, fixedSizeOffset + recordKeyOffset, variableWidthChunk, variableWidthChunkOffset); - if (fixedChunk[fixedSizeOffset + recordKeyOffset - 1] == 0) { + if (fixedChunk[fixedSizeOffset + recordValueNullOffset] == 0) { valueType.relocateFlatVariableWidthOffsets(fixedChunk, fixedSizeOffset + recordValueOffset, variableWidthChunk, variableWidthChunkOffset + keyVariableWidth); } }); @@ -290,7 +293,7 @@ private void set(int index, ValueBlock keyBlock, int keyPosition, ValueBlock val throw new RuntimeException(throwable); } if (valueBlock.isNull(valuePosition)) { - fixedChunk[recordOffset + recordKeyOffset - 1] = 1; + fixedChunk[recordOffset + recordValueNullOffset] = 1; } else { try {