Skip to content

Commit 132d45c

Browse files
SongChujunpettyjamesm
authored andcommitted
Introduce startOffset to RowBlock
1 parent 4806bcf commit 132d45c

File tree

5 files changed

+162
-74
lines changed

5 files changed

+162
-74
lines changed

core/trino-main/src/main/java/io/trino/operator/output/RowPositionsAppender.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import it.unimi.dsi.fastutil.ints.IntArrayList;
2222

2323
import java.util.Arrays;
24-
import java.util.List;
2524
import java.util.Optional;
2625

2726
import static com.google.common.base.Preconditions.checkArgument;
@@ -79,9 +78,25 @@ public void append(IntArrayList positions, ValueBlock block)
7978
}
8079
ensureCapacity(positions.size());
8180
RowBlock sourceRowBlock = (RowBlock) block;
81+
int startOffset = sourceRowBlock.getOffsetBase();
8282

83-
for (int i = 0; i < fieldAppenders.length; i++) {
84-
fieldAppenders[i].append(positions, sourceRowBlock.getFieldBlock(i));
83+
Block[] rawFieldBlocks = sourceRowBlock.getRawFieldBlocks();
84+
85+
if (startOffset == 0) {
86+
for (int i = 0; i < fieldAppenders.length; i++) {
87+
fieldAppenders[i].append(positions, rawFieldBlocks[i]);
88+
}
89+
}
90+
else {
91+
int[] adjustedPositions = new int[positions.size()];
92+
for (int i = 0; i < positions.size(); i++) {
93+
adjustedPositions[i] = startOffset + positions.getInt(i);
94+
}
95+
IntArrayList adjustedPositionsList = IntArrayList.wrap(adjustedPositions);
96+
97+
for (int i = 0; i < fieldAppenders.length; i++) {
98+
fieldAppenders[i].append(adjustedPositionsList, rawFieldBlocks[i]);
99+
}
85100
}
86101

87102
if (sourceRowBlock.mayHaveNull()) {
@@ -108,9 +123,11 @@ public void appendRle(ValueBlock value, int rlePositionCount)
108123
ensureCapacity(rlePositionCount);
109124
RowBlock sourceRowBlock = (RowBlock) value;
110125

111-
List<Block> fieldBlocks = sourceRowBlock.getFieldBlocks();
126+
Block[] rawFieldBlocks = sourceRowBlock.getRawFieldBlocks();
127+
int startOffset = sourceRowBlock.getOffsetBase();
128+
112129
for (int i = 0; i < fieldAppenders.length; i++) {
113-
fieldAppenders[i].appendRle(fieldBlocks.get(i).getSingleValueBlock(0), rlePositionCount);
130+
fieldAppenders[i].appendRle(rawFieldBlocks[i].getSingleValueBlock(startOffset), rlePositionCount);
114131
}
115132

116133
if (sourceRowBlock.isNull(0)) {
@@ -134,9 +151,11 @@ public void append(int position, ValueBlock value)
134151
ensureCapacity(1);
135152
RowBlock sourceRowBlock = (RowBlock) value;
136153

137-
List<Block> fieldBlocks = sourceRowBlock.getFieldBlocks();
154+
Block[] rawFieldBlocks = sourceRowBlock.getRawFieldBlocks();
155+
int startOffset = sourceRowBlock.getOffsetBase();
156+
138157
for (int i = 0; i < fieldAppenders.length; i++) {
139-
fieldAppenders[i].append(position, fieldBlocks.get(i));
158+
fieldAppenders[i].append(startOffset + position, rawFieldBlocks[i]);
140159
}
141160

142161
if (sourceRowBlock.isNull(position)) {

core/trino-spi/pom.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,20 @@
804804
<code>java.method.removed</code>
805805
<old>method io.trino.spi.connector.CatalogHandle io.trino.spi.catalog.CatalogProperties::catalogHandle()</old>
806806
</item>
807+
<item>
808+
<ignore>true</ignore>
809+
<code>java.method.visibilityIncreased</code>
810+
<old>method io.trino.spi.block.Block[] io.trino.spi.block.RowBlock::getRawFieldBlocks()</old>
811+
<new>method io.trino.spi.block.Block[] io.trino.spi.block.RowBlock::getRawFieldBlocks()</new>
812+
<oldVisibility>package</oldVisibility>
813+
<newVisibility>public</newVisibility>
814+
<justification>getRawFieldBlocks need to be accessed from trino-main</justification>
815+
</item>
816+
<item>
817+
<ignore>true</ignore>
818+
<code>java.method.removed</code>
819+
<old>method io.trino.spi.block.Block io.trino.spi.block.RowBlock::getFieldBlock(int)</old>
820+
</item>
807821
</differences>
808822
</revapi.differences>
809823
</analysisConfiguration>

0 commit comments

Comments
 (0)