Skip to content

Commit ba225ba

Browse files
committed
Use appendBlockRange to append Block positions in bulk
1 parent 52b234d commit ba225ba

File tree

5 files changed

+16
-61
lines changed

5 files changed

+16
-61
lines changed

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

Lines changed: 1 addition & 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;
@@ -126,10 +125,7 @@ public static Block concat(Object state, Block[] blocks)
126125

127126
return ((BufferedArrayValueBuilder) state).build(resultPositionCount, elementBuilder -> {
128127
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-
}
128+
elementBuilder.appendBlockRange(block, 0, block.getPositionCount());
133129
}
134130
});
135131
}

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

Lines changed: 10 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
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

2322
public final class ArrayConcatUtils
@@ -28,10 +27,7 @@ private ArrayConcatUtils() {}
2827
public static Block appendElement(Type elementType, Block block, long value)
2928
{
3029
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-
}
30+
blockBuilder.appendBlockRange(block, 0, block.getPositionCount());
3531

3632
elementType.writeLong(blockBuilder, value);
3733

@@ -42,10 +38,7 @@ public static Block appendElement(Type elementType, Block block, long value)
4238
public static Block appendElement(Type elementType, Block block, boolean value)
4339
{
4440
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-
}
41+
blockBuilder.appendBlockRange(block, 0, block.getPositionCount());
4942

5043
elementType.writeBoolean(blockBuilder, value);
5144

@@ -56,10 +49,7 @@ public static Block appendElement(Type elementType, Block block, boolean value)
5649
public static Block appendElement(Type elementType, Block block, double value)
5750
{
5851
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-
}
52+
blockBuilder.appendBlockRange(block, 0, block.getPositionCount());
6353

6454
elementType.writeDouble(blockBuilder, value);
6555

@@ -70,10 +60,7 @@ public static Block appendElement(Type elementType, Block block, double value)
7060
public static Block appendElement(Type elementType, Block block, Slice value)
7161
{
7262
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-
}
63+
blockBuilder.appendBlockRange(block, 0, block.getPositionCount());
7764

7865
elementType.writeSlice(blockBuilder, value);
7966

@@ -84,10 +71,7 @@ public static Block appendElement(Type elementType, Block block, Slice value)
8471
public static Block appendElement(Type elementType, Block block, Object value)
8572
{
8673
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-
}
74+
blockBuilder.appendBlockRange(block, 0, block.getPositionCount());
9175

9276
elementType.writeObject(blockBuilder, value);
9377

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

10387
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-
}
88+
blockBuilder.appendBlockRange(block, 0, block.getPositionCount());
10889

10990
return blockBuilder.build();
11091
}
@@ -115,10 +96,7 @@ public static Block prependElement(Type elementType, Object value, Block block)
11596
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
11697

11798
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-
}
99+
blockBuilder.appendBlockRange(block, 0, block.getPositionCount());
122100

123101
return blockBuilder.build();
124102
}
@@ -129,10 +107,7 @@ public static Block prependElement(Type elementType, long value, Block block)
129107
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
130108

131109
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-
}
110+
blockBuilder.appendBlockRange(block, 0, block.getPositionCount());
136111

137112
return blockBuilder.build();
138113
}
@@ -143,10 +118,7 @@ public static Block prependElement(Type elementType, boolean value, Block block)
143118
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
144119

145120
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-
}
121+
blockBuilder.appendBlockRange(block, 0, block.getPositionCount());
150122

151123
return blockBuilder.build();
152124
}
@@ -157,10 +129,7 @@ public static Block prependElement(Type elementType, double value, Block block)
157129
BlockBuilder blockBuilder = elementType.createBlockBuilder(null, block.getPositionCount() + 1);
158130

159131
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-
}
132+
blockBuilder.appendBlockRange(block, 0, block.getPositionCount());
164133

165134
return blockBuilder.build();
166135
}

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

Lines changed: 1 addition & 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;
@@ -76,10 +75,7 @@ public static Block flatten(Type type, Type arrayType, Block array)
7675
for (int i = 0; i < array.getPositionCount(); i++) {
7776
if (!array.isNull(i)) {
7877
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-
}
78+
builder.appendBlockRange(subArray, 0, subArray.getPositionCount());
8379
}
8480
}
8581
return builder.build();

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -254,12 +254,8 @@ public Block getObject(Block block, int position)
254254
public void writeObject(BlockBuilder blockBuilder, Object value)
255255
{
256256
Block arrayBlock = (Block) value;
257-
ValueBlock valueBlock = arrayBlock.getUnderlyingValueBlock();
258-
((ArrayBlockBuilder) blockBuilder).buildEntry(elementBuilder -> {
259-
for (int i = 0; i < arrayBlock.getPositionCount(); i++) {
260-
elementBuilder.append(valueBlock, arrayBlock.getUnderlyingValuePosition(i));
261-
}
262-
});
257+
((ArrayBlockBuilder) blockBuilder).buildEntry(elementBuilder ->
258+
elementBuilder.appendBlockRange(arrayBlock, 0, arrayBlock.getPositionCount()));
263259
}
264260

265261
// FLAT MEMORY LAYOUT

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -321,10 +321,8 @@ public void writeObject(BlockBuilder blockBuilder, Object value)
321321
Block rawValueBlock = sqlMap.getRawValueBlock();
322322

323323
((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-
}
324+
keyBuilder.appendBlockRange(rawKeyBlock, rawOffset, sqlMap.getSize());
325+
valueBuilder.appendBlockRange(rawValueBlock, rawOffset, sqlMap.getSize());
328326
});
329327
}
330328

0 commit comments

Comments
 (0)