Skip to content

Commit 93282ba

Browse files
committed
Use appendRawBlockRange to append Block positions in bulk
1 parent 9d8bc61 commit 93282ba

File tree

5 files changed

+21
-59
lines changed

5 files changed

+21
-59
lines changed

core/trino-main/src/main/java/io/trino/operator/scalar/ArrayConcatFunction.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import io.trino.spi.TrinoException;
1919
import io.trino.spi.block.Block;
2020
import io.trino.spi.block.BufferedArrayValueBuilder;
21-
import io.trino.spi.block.ValueBlock;
2221
import io.trino.spi.function.BoundSignature;
2322
import io.trino.spi.function.FunctionMetadata;
2423
import io.trino.spi.function.Signature;
@@ -31,6 +30,7 @@
3130
import java.util.Optional;
3231

3332
import static io.trino.spi.StandardErrorCode.INVALID_FUNCTION_ARGUMENT;
33+
import static io.trino.spi.block.BlockBuilder.appendRawBlockRange;
3434
import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.NEVER_NULL;
3535
import static io.trino.spi.function.InvocationConvention.InvocationReturnConvention.FAIL_ON_NULL;
3636
import static io.trino.spi.type.TypeSignature.arrayType;
@@ -126,10 +126,7 @@ public static Block concat(Object state, Block[] blocks)
126126

127127
return ((BufferedArrayValueBuilder) state).build(resultPositionCount, elementBuilder -> {
128128
for (Block block : blocks) {
129-
ValueBlock valueBlock = block.getUnderlyingValueBlock();
130-
for (int i = 0; i < block.getPositionCount(); i++) {
131-
elementBuilder.append(valueBlock, block.getUnderlyingValuePosition(i));
132-
}
129+
appendRawBlockRange(block, 0, block.getPositionCount(), elementBuilder);
133130
}
134131
});
135132
}

core/trino-main/src/main/java/io/trino/operator/scalar/ArrayConcatUtils.java

Lines changed: 12 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717
import io.trino.annotation.UsedByGeneratedCode;
1818
import io.trino.spi.block.Block;
1919
import io.trino.spi.block.BlockBuilder;
20-
import io.trino.spi.block.ValueBlock;
2120
import io.trino.spi.type.Type;
2221

22+
import static io.trino.spi.block.BlockBuilder.appendRawBlockRange;
23+
2324
public final class ArrayConcatUtils
2425
{
2526
private ArrayConcatUtils() {}
@@ -28,10 +29,7 @@ private ArrayConcatUtils() {}
2829
public static Block appendElement(Type elementType, Block block, long value)
2930
{
3031
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
31-
ValueBlock valueBlock = block.getUnderlyingValueBlock();
32-
for (int i = 0; i < block.getPositionCount(); i++) {
33-
blockBuilder.append(valueBlock, block.getUnderlyingValuePosition(i));
34-
}
32+
appendRawBlockRange(block, 0, block.getPositionCount(), blockBuilder);
3533

3634
elementType.writeLong(blockBuilder, value);
3735

@@ -42,10 +40,7 @@ public static Block appendElement(Type elementType, Block block, long value)
4240
public static Block appendElement(Type elementType, Block block, boolean value)
4341
{
4442
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
45-
ValueBlock valueBlock = block.getUnderlyingValueBlock();
46-
for (int i = 0; i < block.getPositionCount(); i++) {
47-
blockBuilder.append(valueBlock, block.getUnderlyingValuePosition(i));
48-
}
43+
appendRawBlockRange(block, 0, block.getPositionCount(), blockBuilder);
4944

5045
elementType.writeBoolean(blockBuilder, value);
5146

@@ -56,10 +51,7 @@ public static Block appendElement(Type elementType, Block block, boolean value)
5651
public static Block appendElement(Type elementType, Block block, double value)
5752
{
5853
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
59-
ValueBlock valueBlock = block.getUnderlyingValueBlock();
60-
for (int i = 0; i < block.getPositionCount(); i++) {
61-
blockBuilder.append(valueBlock, block.getUnderlyingValuePosition(i));
62-
}
54+
appendRawBlockRange(block, 0, block.getPositionCount(), blockBuilder);
6355

6456
elementType.writeDouble(blockBuilder, value);
6557

@@ -70,10 +62,7 @@ public static Block appendElement(Type elementType, Block block, double value)
7062
public static Block appendElement(Type elementType, Block block, Slice value)
7163
{
7264
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
73-
ValueBlock valueBlock = block.getUnderlyingValueBlock();
74-
for (int i = 0; i < block.getPositionCount(); i++) {
75-
blockBuilder.append(valueBlock, block.getUnderlyingValuePosition(i));
76-
}
65+
appendRawBlockRange(block, 0, block.getPositionCount(), blockBuilder);
7766

7867
elementType.writeSlice(blockBuilder, value);
7968

@@ -84,10 +73,7 @@ public static Block appendElement(Type elementType, Block block, Slice value)
8473
public static Block appendElement(Type elementType, Block block, Object value)
8574
{
8675
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
87-
ValueBlock valueBlock = block.getUnderlyingValueBlock();
88-
for (int i = 0; i < block.getPositionCount(); i++) {
89-
blockBuilder.append(valueBlock, block.getUnderlyingValuePosition(i));
90-
}
76+
appendRawBlockRange(block, 0, block.getPositionCount(), blockBuilder);
9177

9278
elementType.writeObject(blockBuilder, value);
9379

@@ -101,10 +87,7 @@ public static Block prependElement(Type elementType, Slice value, Block block)
10187
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
10288

10389
elementType.writeSlice(blockBuilder, value);
104-
ValueBlock valueBlock = block.getUnderlyingValueBlock();
105-
for (int i = 0; i < block.getPositionCount(); i++) {
106-
blockBuilder.append(valueBlock, block.getUnderlyingValuePosition(i));
107-
}
90+
appendRawBlockRange(block, 0, block.getPositionCount(), blockBuilder);
10891

10992
return blockBuilder.build();
11093
}
@@ -115,10 +98,7 @@ public static Block prependElement(Type elementType, Object value, Block block)
11598
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
11699

117100
elementType.writeObject(blockBuilder, value);
118-
ValueBlock valueBlock = block.getUnderlyingValueBlock();
119-
for (int i = 0; i < block.getPositionCount(); i++) {
120-
blockBuilder.append(valueBlock, block.getUnderlyingValuePosition(i));
121-
}
101+
appendRawBlockRange(block, 0, block.getPositionCount(), blockBuilder);
122102

123103
return blockBuilder.build();
124104
}
@@ -129,10 +109,7 @@ public static Block prependElement(Type elementType, long value, Block block)
129109
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
130110

131111
elementType.writeLong(blockBuilder, value);
132-
ValueBlock valueBlock = block.getUnderlyingValueBlock();
133-
for (int i = 0; i < block.getPositionCount(); i++) {
134-
blockBuilder.append(valueBlock, block.getUnderlyingValuePosition(i));
135-
}
112+
appendRawBlockRange(block, 0, block.getPositionCount(), blockBuilder);
136113

137114
return blockBuilder.build();
138115
}
@@ -143,10 +120,7 @@ public static Block prependElement(Type elementType, boolean value, Block block)
143120
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
144121

145122
elementType.writeBoolean(blockBuilder, value);
146-
ValueBlock valueBlock = block.getUnderlyingValueBlock();
147-
for (int i = 0; i < block.getPositionCount(); i++) {
148-
blockBuilder.append(valueBlock, block.getUnderlyingValuePosition(i));
149-
}
123+
appendRawBlockRange(block, 0, block.getPositionCount(), blockBuilder);
150124

151125
return blockBuilder.build();
152126
}
@@ -157,10 +131,7 @@ public static Block prependElement(Type elementType, double value, Block block)
157131
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
158132

159133
elementType.writeDouble(blockBuilder, value);
160-
ValueBlock valueBlock = block.getUnderlyingValueBlock();
161-
for (int i = 0; i < block.getPositionCount(); i++) {
162-
blockBuilder.append(valueBlock, block.getUnderlyingValuePosition(i));
163-
}
134+
appendRawBlockRange(block, 0, block.getPositionCount(), blockBuilder);
164135

165136
return blockBuilder.build();
166137
}

core/trino-main/src/main/java/io/trino/operator/scalar/ArrayFlattenFunction.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import io.trino.metadata.SqlScalarFunction;
1818
import io.trino.spi.block.Block;
1919
import io.trino.spi.block.BlockBuilder;
20-
import io.trino.spi.block.ValueBlock;
2120
import io.trino.spi.function.BoundSignature;
2221
import io.trino.spi.function.FunctionMetadata;
2322
import io.trino.spi.function.Signature;
@@ -27,6 +26,7 @@
2726

2827
import java.lang.invoke.MethodHandle;
2928

29+
import static io.trino.spi.block.BlockBuilder.appendRawBlockRange;
3030
import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.NEVER_NULL;
3131
import static io.trino.spi.function.InvocationConvention.InvocationReturnConvention.FAIL_ON_NULL;
3232
import static io.trino.spi.type.TypeSignature.arrayType;
@@ -76,10 +76,7 @@ public static Block flatten(Type type, Type arrayType, Block array)
7676
for (int i = 0; i < array.getPositionCount(); i++) {
7777
if (!array.isNull(i)) {
7878
Block subArray = (Block) arrayType.getObject(array, i);
79-
ValueBlock subArrayValueBlock = subArray.getUnderlyingValueBlock();
80-
for (int j = 0; j < subArray.getPositionCount(); j++) {
81-
builder.append(subArrayValueBlock, subArray.getUnderlyingValuePosition(j));
82-
}
79+
appendRawBlockRange(subArray, 0, subArray.getPositionCount(), builder);
8380
}
8481
}
8582
return builder.build();

core/trino-spi/src/main/java/io/trino/spi/type/ArrayType.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.util.List;
3636
import java.util.function.BiFunction;
3737

38+
import static io.trino.spi.block.BlockBuilder.appendRawBlockRange;
3839
import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.BOXED_NULLABLE;
3940
import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.FLAT;
4041
import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.NEVER_NULL;
@@ -254,11 +255,8 @@ public Block getObject(Block block, int position)
254255
public void writeObject(BlockBuilder blockBuilder, Object value)
255256
{
256257
Block arrayBlock = (Block) value;
257-
ValueBlock valueBlock = arrayBlock.getUnderlyingValueBlock();
258258
((ArrayBlockBuilder) blockBuilder).buildEntry(elementBuilder -> {
259-
for (int i = 0; i < arrayBlock.getPositionCount(); i++) {
260-
elementBuilder.append(valueBlock, arrayBlock.getUnderlyingValuePosition(i));
261-
}
259+
appendRawBlockRange(arrayBlock, 0, arrayBlock.getPositionCount(), elementBuilder);
262260
});
263261
}
264262

core/trino-spi/src/main/java/io/trino/spi/type/MapType.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.Map;
3434
import java.util.Optional;
3535

36+
import static io.trino.spi.block.BlockBuilder.appendRawBlockRange;
3637
import static io.trino.spi.block.MapValueBuilder.buildMapValue;
3738
import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.BLOCK_POSITION;
3839
import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.BLOCK_POSITION_NOT_NULL;
@@ -321,10 +322,8 @@ public void writeObject(BlockBuilder blockBuilder, Object value)
321322
Block rawValueBlock = sqlMap.getRawValueBlock();
322323

323324
((MapBlockBuilder) blockBuilder).buildEntry((keyBuilder, valueBuilder) -> {
324-
for (int i = 0; i < sqlMap.getSize(); i++) {
325-
keyBuilder.append(rawKeyBlock.getUnderlyingValueBlock(), rawKeyBlock.getUnderlyingValuePosition(rawOffset + i));
326-
valueBuilder.append(rawValueBlock.getUnderlyingValueBlock(), rawValueBlock.getUnderlyingValuePosition(rawOffset + i));
327-
}
325+
appendRawBlockRange(rawKeyBlock, rawOffset, sqlMap.getSize(), keyBuilder);
326+
appendRawBlockRange(rawValueBlock, rawOffset, sqlMap.getSize(), valueBuilder);
328327
});
329328
}
330329

0 commit comments

Comments
 (0)