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

    https://github.com/apache/spark/pull/19480#discussion_r144240879
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
 ---
    @@ -798,10 +830,35 @@ class CodegenContext {
                |  ${makeSplitFunction(body)}
                |}
              """.stripMargin
    -        addNewFunction(name, code)
    +        addNewFunctionInternal(name, code, inlineToOuterClass = false)
           }
     
    -      foldFunctions(functions.map(name => 
s"$name(${arguments.map(_._2).mkString(", ")})"))
    +      val outerClassFunctions = functions
    +        .filter(_.subclassName.isEmpty)
    +        .map(_.functionName)
    +
    +      val innerClassFunctions = functions
    +        .filter(_.subclassName.isDefined)
    +        .foldLeft(Map.empty[(String, String), Seq[String]]) { case (acc, 
f) =>
    +          val key = (f.subclassName.get, f.subclassInstance.get)
    +          acc.updated(key, acc.getOrElse(key, Seq.empty[String]) ++ 
Seq(f.functionName))
    +        }
    +        .map { case ((subclassName, subclassInstance), subclassFunctions) 
=>
    +          // Adding a new function to each subclass which contains
    +          // the invocation of all the ones which have been added to
    +          // that subclass
    +          val code = s"""
    +              |private $returnType $func($argString) {
    +              |  
${makeSplitFunction(foldFunctions(subclassFunctions.map(name =>
    +                    s"$name(${arguments.map(_._2).mkString(", ")})")))}
    +              |}
    +            """.stripMargin
    +          addNewFunctionToClass(func, code, subclassName)
    --- End diff --
    
    So shall we call `addNewFunction` to add the caller method into an inner 
class and call those split functions in that?
    



---

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

Reply via email to