davidm-db commented on code in PR #47442: URL: https://github.com/apache/spark/pull/47442#discussion_r1689573051
########## sql/core/src/main/scala/org/apache/spark/sql/scripting/SqlScriptingExecutionNode.scala: ########## @@ -155,3 +157,98 @@ abstract class CompoundNestedStatementIteratorExec(collection: Seq[CompoundState */ class CompoundBodyExec(statements: Seq[CompoundStatementExec]) extends CompoundNestedStatementIteratorExec(statements) + +/** + * Executable node for IfElseStatement. + * @param conditions Collection of executable conditions. First condition corresponds to IF clause, + * while others (if any) correspond to following ELSE IF clauses. + * @param bodies Collection of executable bodies. + * @param booleanEvaluator Evaluator for Boolean conditions. + */ +class IfElseStatementExec( + conditions: Seq[SingleStatementExec], + bodies: Seq[CompoundBodyExec], + booleanEvaluator: StatementBooleanEvaluator) extends NonLeafStatementExec { + private object IfElseState extends Enumeration { + val Condition, Body = Value + } + + private var state = IfElseState.Condition + private var curr: Option[CompoundStatementExec] = Some(conditions.head) + + private var clauseIdx: Int = 0 + private val conditionsCount: Int = conditions.length + private val bodiesCount: Int = bodies.length + assert(conditionsCount == bodiesCount || conditionsCount + 1 == bodiesCount) + + private lazy val treeIterator: Iterator[CompoundStatementExec] = Review Comment: I've read through JDBC/ODBC API specifications and it seems like my previous understanding was correct - they propose to return result sets using cursors, where you actually specify in the Script/Stored Procedure what are you actually returning, thus it's impossible to return IF conditions in the result sets. On another hand, MySql has "Unbound SELECT statements", which is really similar to what we want to achieve here - any standalone SQL statement is returned as a part of the result set, but that also means that IF conditions are never returned. This is the understanding from discussions with Serge as well, we want to return results only for standalone statements. -- 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