Github user viirya commented on a diff in the pull request:

    https://github.com/apache/spark/pull/19964#discussion_r156656043
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala
 ---
    @@ -299,33 +299,35 @@ case class Elt(children: Seq[Expression])
           """
         }
     
    -    val cases = ctx.buildCodeBlocks(assignStringValue)
    -    val codes = if (cases.length == 1) {
    -      s"""
    -        UTF8String $stringVal = null;
    -        switch ($indexVal) {
    -          ${cases.head}
    -        }
    -       """
    -    } else {
    -      var prevFunc = "null"
    -      for (c <- cases.reverse) {
    -        val funcName = ctx.freshName("eltFunc")
    -        val funcBody = s"""
    -         private UTF8String $funcName(InternalRow ${ctx.INPUT_ROW}, int 
$indexVal) {
    -           UTF8String $stringVal = null;
    -           switch ($indexVal) {
    -             $c
    -             default:
    -               return $prevFunc;
    -           }
    -           return $stringVal;
    -         }
    -        """
    -        val fullFuncName = ctx.addNewFunction(funcName, funcBody)
    -        prevFunc = s"$fullFuncName(${ctx.INPUT_ROW}, $indexVal)"
    -      }
    -      s"UTF8String $stringVal = $prevFunc;"
    +    var prevFunc = "null"
    +    var codes = ctx.splitExpressionsWithCurrentInputs(
    +      expressions = assignStringValue,
    +      funcName = "eltFunc",
    +      extraArguments = ("int", indexVal) :: Nil,
    +      returnType = "UTF8String",
    +      makeSplitFunction = body =>
    +        s"""
    +           |UTF8String $stringVal = null;
    +           |switch ($indexVal) {
    +           |  $body
    +           |  default:
    +           |    return $prevFunc;
    +           |}
    +           |return $stringVal;
    +        """.stripMargin,
    +      foldFunctions = funcs => s"UTF8String $stringVal = ${funcs.last};",
    +      makeFunctionCallback = f => prevFunc = s"$f(${ctx.INPUT_ROW}, 
$indexVal)",
    +      mergeSplit = false)
    --- End diff --
    
    Ok. Let me replace it with simpler codes. Thanks.


---

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

Reply via email to