Skip to content

Commit 99c3ed0

Browse files
committed
Fix
1 parent 1d623f8 commit 99c3ed0

File tree

1 file changed

+17
-14
lines changed
  • sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions

1 file changed

+17
-14
lines changed

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

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -213,9 +213,10 @@ case class Cast(child: Expression, dataType: DataType, timeZoneId: Option[String
213213
res.append("[")
214214
if (array.numElements > 0) {
215215
val toStringFunc = castToString(ar.elementType)
216-
var i = 0
216+
res.append(toStringFunc(array.get(0, ar.elementType)))
217+
var i = 1
217218
while (i < array.numElements) {
218-
if (i != 0) res.append(", ")
219+
res.append(", ")
219220
res.append(toStringFunc(array.get(i, ar.elementType)))
220221
i += 1
221222
}
@@ -633,23 +634,28 @@ case class Cast(child: Expression, dataType: DataType, timeZoneId: Option[String
633634
val loopIndex = ctx.freshName("loopIndex")
634635
val writeArrayToBuffer = ctx.freshName("writeArrayToBuffer")
635636
val arTerm = ctx.freshName("arTerm")
636-
val bufferClass = classOf[StringBuffer].getName
637+
val bufferClass = "java.lang.StringBuilder"
637638
val bufferTerm = ctx.freshName("bufferTerm")
638-
val elemTerm = ctx.freshName("elemTerm")
639-
val writeElemCode = writeElemToBufferCode(ar.elementType, bufferTerm, elemTerm, ctx)
639+
def writeElemCode(elemTerm: String) = {
640+
writeElemToBufferCode(ar.elementType, bufferTerm, elemTerm, ctx)
641+
}
640642
def writeToBufferCode(i: String) = {
643+
val elemTerm = ctx.freshName("elemTerm")
641644
s"""
642645
|${ctx.javaType(ar.elementType)} $elemTerm = ${ctx.getValue(arTerm, ar.elementType, i)};
643-
|$writeElemCode;
646+
|${writeElemCode(elemTerm)};
644647
""".stripMargin
645648
}
646649
ctx.addNewFunction(writeArrayToBuffer,
647650
s"""
648651
|private void $writeArrayToBuffer(ArrayData $arTerm, $bufferClass $bufferTerm) {
649652
| $bufferTerm.append("[");
650-
| for (int $loopIndex = 0; $loopIndex < $arTerm.numElements(); $loopIndex++) {
651-
| if ($loopIndex != 0) $bufferTerm.append(", ");
652-
| ${writeToBufferCode(loopIndex)}
653+
| if ($arTerm.numElements() > 0) {
654+
| ${writeToBufferCode("0")}
655+
| for (int $loopIndex = 1; $loopIndex < $arTerm.numElements(); $loopIndex++) {
656+
| $bufferTerm.append(", ");
657+
| ${writeToBufferCode(loopIndex)}
658+
| }
653659
| }
654660
| $bufferTerm.append("]");
655661
|}
@@ -670,14 +676,11 @@ case class Cast(child: Expression, dataType: DataType, timeZoneId: Option[String
670676
case ar: ArrayType =>
671677
(c, evPrim, evNull) => {
672678
val bufferTerm = ctx.freshName("bufferTerm")
673-
val bufferClass = classOf[StringBuffer].getName
679+
val bufferClass = "java.lang.StringBuilder"
674680
val writeArrayToBuffer = codegenWriteArrayToBuffer(ar, ctx)
675681
s"""
676682
|$bufferClass $bufferTerm = new $bufferClass();
677-
|if (!$evNull) {
678-
| $writeArrayToBuffer($c, $bufferTerm);
679-
|}
680-
|
683+
|$writeArrayToBuffer($c, $bufferTerm);
681684
|$evPrim = UTF8String.fromString($bufferTerm.toString());
682685
""".stripMargin
683686
}

0 commit comments

Comments
 (0)