davidm-db commented on code in PR #47442:
URL: https://github.com/apache/spark/pull/47442#discussion_r1687921832


##########
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:
   yes, the conditions are also considered as the statements that are iterated 
through.
   however, during the condition evaluation, it is marked as `isExecuted` - 
this way, we allow this decision (whether or not to be included in the result 
set) to be made outside of the iteration logic - @miland-db is introducing this 
logic in his [execution PR](https://github.com/apache/spark/pull/47403).
   there are multiple reasons for such approach, but mainly we want to iterate 
through conditions in the same way as with other statements, for the sake of 
handling exceptions, being able to stop at the condition during debugging, etc.



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to