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

    https://github.com/apache/spark/pull/19778#discussion_r151958049
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala
 ---
    @@ -224,22 +224,55 @@ case class Elt(children: Seq[Expression])
       override protected def doGenCode(ctx: CodegenContext, ev: ExprCode): 
ExprCode = {
         val index = indexExpr.genCode(ctx)
         val strings = stringExprs.map(_.genCode(ctx))
    +    val indexVal = ctx.freshName("index")
    +    val stringVal = ctx.freshName("stringVal")
         val assignStringValue = strings.zipWithIndex.map { case (eval, index) 
=>
           s"""
             case ${index + 1}:
    -          ${ev.value} = ${eval.isNull} ? null : ${eval.value};
    +          ${eval.code}
    +          $stringVal = ${eval.isNull} ? null : ${eval.value};
               break;
           """
    -    }.mkString("\n")
    -    val indexVal = ctx.freshName("index")
    -    val stringArray = ctx.freshName("strings");
    +    }
     
    -    ev.copy(index.code + "\n" + strings.map(_.code).mkString("\n") + s"""
    -      final int $indexVal = ${index.value};
    -      UTF8String ${ev.value} = null;
    -      switch ($indexVal) {
    -        $assignStringValue
    +    val cases = ctx.splitCodes(assignStringValue)
    +    val codes = if (cases.length == 1) {
    +      s"""
    +        UTF8String $stringVal = null;
    +        switch ($indexVal) {
    +          ${cases.head}
    +        }
    +       """
    +    } else {
    +      var fullFuncName = ""
    +      cases.reverse.zipWithIndex.map { case (s, index) =>
    --- End diff --
    
    I'd like to make it more imperative:
    ```
    var prevFunc = "null"
    for (case <- cases) {
      val funcName = ...
      val funcBody = ...
      prevFunc = ctx.addNewFunction
    }
    s"UTF8String $stringVal = $prevFunc(${ctx.INPUT_ROW}, $indexVal);"
    ```


---

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

Reply via email to