1717import io .trino .annotation .UsedByGeneratedCode ;
1818import io .trino .spi .block .Block ;
1919import io .trino .spi .block .BlockBuilder ;
20- import io .trino .spi .block .ValueBlock ;
2120import io .trino .spi .type .Type ;
2221
22+ import static io .trino .spi .block .BlockBuilder .appendRawBlockRange ;
23+
2324public 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 }
0 commit comments