davidm-db commented on code in PR #49427: URL: https://github.com/apache/spark/pull/49427#discussion_r1916465173
########## sql/core/src/main/scala/org/apache/spark/sql/scripting/SqlScriptingInterpreter.scala: ########## @@ -63,6 +66,84 @@ case class SqlScriptingInterpreter(session: SparkSession) { case _ => None } + /** + * Transform [[CompoundBody]] into [[CompoundBodyExec]]. + * @param compoundBody + * CompoundBody to be transformed into CompoundBodyExec. + * @param args + * A map of parameter names to SQL literal expressions. + * @param isExitHandler + * Flag to indicate if the body is an exit handler body to add leave statement at the end. + * @param exitHandlerLabel + * If body is an exit handler body, this is the label of surrounding CompoundBody + * that should be exited. + * @return + * Executable version of the CompoundBody . + */ + private def transformBodyIntoExec( + compoundBody: CompoundBody, + args: Map[String, Expression], + context: SqlScriptingExecutionContext, + isExitHandler: Boolean = false, + exitHandlerLabel: String = ""): CompoundBodyExec = { + val variables = compoundBody.collection.flatMap { + case st: SingleStatement => getDeclareVarNameFromPlan(st.parsedPlan) + case _ => None + } + val dropVariables = variables + .map(varName => DropVariable(varName, ifExists = true)) + .map(new SingleStatementExec(_, Origin(), args, isInternal = true, context)) + .reverse + + // Create a map of conditions (SqlStates) to their respective handlers. + val conditionHandlerMap = HashMap[String, ErrorHandlerExec]() + compoundBody.handlers.foreach(handler => { + val handlerBodyExec = + transformBodyIntoExec( + handler.body, + args, + context, + handler.handlerType == HandlerType.EXIT, + compoundBody.label.get) + + // Execution node of handler. + val scopeToExit = if (handler.handlerType == HandlerType.EXIT) { Review Comment: does it make sense to remove "exit" stuff here as well and use "handlerLabel" instead? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org