Github user gatorsmile commented on a diff in the pull request: https://github.com/apache/spark/pull/19480#discussion_r147220632 --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala --- @@ -801,10 +831,84 @@ class CodegenContext { | ${makeSplitFunction(body)} |} """.stripMargin - addNewFunction(name, code) + addNewFunctionInternal(name, code, inlineToOuterClass = false) } - foldFunctions(functions.map(name => s"$name(${arguments.map(_._2).mkString(", ")})")) + // Here we store all the methods which have been added to the outer class. + val outerClassFunctions = functions + .filter(_.innerClassName.isEmpty) + .map(_.functionName) + + val innerClassFunctions = generateInnerClassesMethodsCalls( + functions.filter(_.innerClassName.nonEmpty), + func, + arguments, + returnType, + makeSplitFunction, + foldFunctions) + + val argsString = arguments.map(_._2).mkString(", ") + foldFunctions((outerClassFunctions ++ innerClassFunctions).map( + name => s"$name($argsString)")) + } --- End diff -- ```Scala val (outerClassFunctions, innerClassFunctions) = functions.partition(_.innerClassName.isEmpty) val argsString = arguments.map(_._2).mkString(", ") val outerClassFunctionCalls = outerClassFunctions.map(f => s"${f.functionName}($argsString)") val innerClassFunctionCalls = generateInnerClassesFunctionCalls( innerClassFunctions, func, arguments, returnType, makeSplitFunction, foldFunctions) foldFunctions(outerClassFunctionCalls ++ innerClassFunctionCalls) ```
--- --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org