Github user cloud-fan commented on a diff in the pull request:

    https://github.com/apache/spark/pull/21824#discussion_r203953613
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/collectionOperations.scala
 ---
    @@ -2322,49 +2369,53 @@ case class Concat(children: Seq[Expression]) 
extends ComplexTypeMergingExpressio
         (code, numElements)
       }
     
    -  private def nullArgumentProtection() : String = {
    -    if (nullable) {
    -      s"""
    -         |for (int z = 0; z < ${children.length}; z++) {
    -         |  if (args[z] == null) return null;
    -         |}
    -       """.stripMargin
    -    } else {
    -      ""
    -    }
    -  }
    -
    -  private def genCodeForPrimitiveArrays(ctx: CodegenContext, elementType: 
DataType): String = {
    +  private def genCodeForPrimitiveArrays(
    +      ctx: CodegenContext,
    +      elementType: DataType,
    +      checkForNull: Boolean): String = {
         val counter = ctx.freshName("counter")
         val arrayData = ctx.freshName("arrayData")
     
         val (numElemCode, numElemName) = genCodeForNumberOfElements(ctx)
     
         val primitiveValueTypeName = 
CodeGenerator.primitiveTypeName(elementType)
     
    -    s"""
    -       |new Object() {
    -       |  public ArrayData concat($javaType[] args) {
    -       |    ${nullArgumentProtection()}
    -       |    $numElemCode
    -       |    ${ctx.createUnsafeArray(arrayData, numElemName, elementType, 
s" $prettyName failed.")}
    -       |    int $counter = 0;
    -       |    for (int y = 0; y < ${children.length}; y++) {
    -       |      for (int z = 0; z < args[y].numElements(); z++) {
    -       |        if (args[y].isNullAt(z)) {
    -       |          $arrayData.setNullAt($counter);
    -       |        } else {
    -       |          $arrayData.set$primitiveValueTypeName(
    -       |            $counter,
    -       |            ${CodeGenerator.getValue(s"args[y]", elementType, "z")}
    -       |          );
    -       |        }
    -       |        $counter++;
    -       |      }
    -       |    }
    -       |    return $arrayData;
    -       |  }
    -       |}""".stripMargin.stripPrefix("\n")
    +    val setterCode1 =
    +      s"""
    +         |$arrayData.set$primitiveValueTypeName(
    +         |  $counter,
    +         |  ${CodeGenerator.getValue(s"args[y]", elementType, "z")}
    +         |);""".stripMargin
    +
    +    val setterCode = if (checkForNull) {
    --- End diff --
    
    nit: `nullSafeSetterCode`


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to