Github user viirya commented on a diff in the pull request: https://github.com/apache/spark/pull/19964#discussion_r156626902 --- 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 -- We can't merge them because the `makeSplitFunction` will create invalid merged function if used with the given `foldFunctions`: ```java private UTF8String eltFunc(InternalRow i, int index) { UTF8String stringVal = null; switch (index) { UTF8String stringVal = eltFunc_999(i, index); default: return nestedClassInstance.eltFunc_999(i, index); } return stringVal; } ```
--- --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org