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

    https://github.com/apache/spark/pull/19896#discussion_r155217888
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/complexTypeCreator.scala
 ---
    @@ -356,22 +356,25 @@ case class CreateNamedStruct(children: 
Seq[Expression]) extends CreateNamedStruc
       override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = {
         val rowClass = classOf[GenericInternalRow].getName
         val values = ctx.freshName("values")
    -    ctx.addMutableState("Object[]", values, s"$values = null;")
    +    val valCodes = valExprs.zipWithIndex.map { case (e, i) =>
    +      val eval = e.genCode(ctx)
    +      s"""
    +         |${eval.code}
    +         |if (${eval.isNull}) {
    +         |  $values[$i] = null;
    +         |} else {
    +         |  $values[$i] = ${eval.value};
    +         |}
    +       """.stripMargin
    +    }
         val valuesCode = ctx.splitExpressionsWithCurrentInputs(
    -      valExprs.zipWithIndex.map { case (e, i) =>
    -        val eval = e.genCode(ctx)
    -        s"""
    -          ${eval.code}
    -          if (${eval.isNull}) {
    -            $values[$i] = null;
    -          } else {
    -            $values[$i] = ${eval.value};
    -          }"""
    -      })
    +      valCodes,
    +      "createNamedStruct",
    +      "Object[]" -> values :: Nil)
     
         ev.copy(code =
           s"""
    -         |$values = new Object[${valExprs.size}];
    +         |Object[] $values = new Object[${valExprs.size}];
    --- End diff --
    
    actually I'm not very sure about this. The previous code can avoid creating 
this array every time.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to