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

Reply via email to