@@ -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