Skip to content

Commit d05ad9b

Browse files
committed
[SPARK-23935][SQL] Inlining struct size and moving structOffeset into else branch.
1 parent 4739977 commit d05ad9b

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/collectionOperations.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import org.apache.spark.sql.catalyst.expressions.ArraySortLike.NullOrder
2424
import org.apache.spark.sql.catalyst.expressions.codegen._
2525
import org.apache.spark.sql.catalyst.util.{ArrayData, GenericArrayData, MapData, TypeUtils}
2626
import org.apache.spark.sql.types._
27+
import org.apache.spark.unsafe.Platform
2728
import org.apache.spark.unsafe.array.ByteArrayMethods
2829
import org.apache.spark.unsafe.types.{ByteArray, UTF8String}
2930

@@ -197,14 +198,14 @@ case class MapEntries(child: Expression) extends UnaryExpression with ExpectsInp
197198
val byteArraySize = ctx.freshName("byteArraySize")
198199
val data = ctx.freshName("byteArray")
199200
val unsafeRow = ctx.freshName("unsafeRow")
200-
val structSize = ctx.freshName("structSize")
201201
val unsafeArrayData = ctx.freshName("unsafeArrayData")
202202
val structsOffset = ctx.freshName("structsOffset")
203203
val calculateArraySize = "UnsafeArrayData.calculateSizeOfUnderlyingByteArray"
204204
val calculateHeader = "UnsafeArrayData.calculateHeaderPortionInBytes"
205205

206206
val baseOffset = Platform.BYTE_ARRAY_OFFSET
207207
val longSize = LongType.defaultSize
208+
val structSize = UnsafeRow.calculateBitSetWidthInBytes(2) + longSize * 2
208209
val keyTypeName = CodeGenerator.primitiveTypeName(childDataType.keyType)
209210
val valueTypeName = CodeGenerator.primitiveTypeName(childDataType.keyType)
210211

@@ -222,12 +223,11 @@ case class MapEntries(child: Expression) extends UnaryExpression with ExpectsInp
222223
}
223224

224225
s"""
225-
|final int $structSize = ${UnsafeRow.calculateBitSetWidthInBytes(2) + longSize * 2};
226-
|final long $byteArraySize = $calculateArraySize($numElements, $longSize + $structSize);
227-
|final int $structsOffset = $calculateHeader($numElements) + $numElements * $longSize;
226+
|final long $byteArraySize = $calculateArraySize($numElements, ${longSize + structSize});
228227
|if ($byteArraySize > ${ByteArrayMethods.MAX_ROUNDED_ARRAY_LENGTH}) {
229228
| ${genCodeForAnyElements(ctx, keys, values, arrayData, numElements)}
230229
|} else {
230+
| final int $structsOffset = $calculateHeader($numElements) + $numElements * $longSize;
231231
| final byte[] $data = new byte[(int)$byteArraySize];
232232
| UnsafeArrayData $unsafeArrayData = new UnsafeArrayData();
233233
| Platform.putLong($data, $baseOffset, $numElements);

0 commit comments

Comments
 (0)